Co oznacza obj-y + = coś/ w pliku Makefile jądra Linuksa?

Rozumiem znaczenie

obj-$(CONFIG_USB)       += usb.o

Jeśli CONFIG_USB to y, to usb.o zostanie skompilowany. Więc teraz jak to zrozumieć

obj-y               += something/
Author: Jeegar Patel, 2012-06-08

3 answers

Pliki Makefile jądra są częścią systemu kbuild, udokumentowanego w różnych miejscach w sieci, na przykład http://lwn.net/Articles/21835 / . odpowiedni fragment znajduje się tutaj:

--- 3.1 Goal definitions

Definicje celów są główną częścią (sercem) pliku Makefile kbuild. Linie te definiują pliki do zbudowania, każda specjalna kompilacja opcje, oraz wszelkie podkatalogi, które mają być wprowadzane rekurencyjnie.

Najprostszy kbuild makefile zawiera jedną linię:

Przykład: obj-y + = foo.o

To mówi kbuild, że w katalogu znajduje się jeden obiekt o nazwie foo.o. foo.o będzie zbudowany z foo.c lub foo.S.

If foo.o buduje się jako moduł, stosuje się zmienną obj-M. Dlatego często używa się następującego wzoru:

Przykład: obj - $(CONFIG_FOO) + = foo.o

$(CONFIG_FOO) ocenia NA y (dla wbudowanego) lub M (dla modułu). Jeśli CONFIG_FOO nie jest ani y, ani m, to plik nie będzie opracowano na podstawie materiału źródłowego ani połączone.

Więc m oznacza moduł, y oznacza wbudowany (oznacza tak w procesie konfiguracji jądra), a $(CONFIG_FOO) pobiera prawidłową odpowiedź z normalnego procesu konfiguracji.

 39
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-08 13:46:14

Obj-y + = coś/

Oznacza to, że kbuild powinien wejść do katalogu "coś". Gdy przeniesie się do tego katalogu, spojrzy na plik Makefile w "something", aby zdecydować, jakie obiekty należy zbudować.

Jest to analogiczne do powiedzenia-przejdź do katalogu " coś "i wykonaj" make "

 6
Author: Tulip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-29 22:08:19

Twoje pytanie brzmi, dlaczego cały katalog jest dodawany jako cel, odpowiednia część dokumentacji KConfig to:

--- 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'.
 5
Author: Étienne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 10:31:29