comprendo sensiQual'è il significato di obj-y + = qualcosa/nel makefile del kernel di linux?
obj-$(CONFIG_USB) += usb.o
se CONFIG_USB è y allora usb.o verranno compilati. Così ora come capire questo
obj-y += something/
comprendo sensiQual'è il significato di obj-y + = qualcosa/nel makefile del kernel di linux?
obj-$(CONFIG_USB) += usb.o
se CONFIG_USB è y allora usb.o verranno compilati. Così ora come capire questo
obj-y += something/
Kernel Makefiles sono parte del sistema kbuild
, documentato in diversi posti sul web, ad esempio http://lwn.net/Articles/21835/. Il brano in questione è qui:
--- 3.1 Goal definitions
definizioni all'obiettivo rappresentano la parte principale (cuore) del kbuild Makefile. Queste righe definiscono i file da compilare, qualsiasi opzione di compilazione speciale e qualsiasi sottodirectory da immettere in modo ricorsivo.
Il più semplice makefile kbuild contiene una sola riga:
Esempio: obj-y + = foo.o
Questo dirà kbuild che c'è un oggetto in che directory denominata foo.o. foo.o sarà compilato da foo.c o foo.S.
Se foo.o deve essere costruito come modulo, viene utilizzata la variabile obj-m. Pertanto il seguente schema viene spesso utilizzato:
Esempio: obj - $ (CONFIG_FOO) + = foo.o
$ (CONFIG_FOO) valuta a uno y (per incasso) o m (per modulo) . Se CONFIG_FOO non è né y né m, il file non verrà compilato né collegato.
Così m
significa modulo, y
mezzi built-in (acronimo di sì, nel processo di configurazione del kernel), e $ (CONFIG_FOO) tira la risposta giusta dal normale processo di configurazione.
La tua domanda sembra essere il motivo per cui una intera directory viene aggiunto come obiettivo, la parte rilevante della documentazione KConfig è:
--- 3.6 Descending down in directories
A Makefile is only responsible for building objects in its own
directory. Files in subdirectories should be taken care of by
Makefiles in these subdirs. The build system will automatically
invoke make recursively in subdirectories, provided you let it know of
them.
To do so obj-y and obj-m are used.
ext2 lives in a separate directory, and the Makefile present in fs/
tells kbuild to descend down using the following assignment.
Example:
#fs/Makefile
obj-$(CONfIG_EXT2_FS) += ext2/
If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
the corresponding obj- variable will be set, and kbuild will descend
down in the ext2 directory.
Kbuild only uses this information to decide that it needs to visit
the directory, it is the Makefile in the subdirectory that
specifies what is modules and what is built-in.
It is good practice to use a CONFIG_ variable when assigning directory
names. This allows kbuild to totally skip the directory if the
corresponding CONFIG_ option is neither 'y' nor 'm'.
obj-y + = qualcosa/
Ciò significa che kbuild dovrebbe andare nella directory "qualcosa". Una volta che si sposta in questa directory, guarda al Makefile in "qualcosa" per decidere quali oggetti devono essere costruiti.
E 'analogo a dicendo- andare alla directory "qualcosa" ed eseguire "make"
dal modo in cui, dopo l'aggiunta di tutti i file .o nella variabile obj-y, dove viene in realtà li compilare? Intendo dove in uno dei tanti Makefile nell'albero del kernel? –