Описание процесса сборки Makefile верхнего уровня ядра Linux 2.

1. Сделайте компиляцию исходного кода ядра Linux.

В предыдущей статье было проанализировано несколько целей, от которых зависит создание vmlinux после сборки исходного кода ядра Linux . Цели зависимости включают в себя:

scripts/link-vmlinux.sh
 $(head-y) 、 $(init-y) 、 $(core-y) 、 $(libs-y) 、 $(drivers-y) 和 $(net-y)

В этой статье основное внимание уделяется значениям шести переменных $(head-y), $(init-y), $(core-y), $(libs-y), $(drivers-y) и $(net-y .)

Данная статья является продолжением предыдущей статьи по следующему адресу:

Описание процесса сборки Makefile верхнего уровня ядра Linux 1_Блог Лин Сяочжана-Блог CSDN

2. Обработайте исходный код ядра Linux.

Давайте сосредоточимся на анализе значений шести переменных $(head-y), $(init-y), $(core-y), $(libs-y), $(drivers-y) и $(net-y ) .

1. головокружительный

head-y определен в файле Arch/arm/Makefile , его содержимое следующее:

135 head-y := arch/arm/kernel/head$(MMUEXT).o
Когда MMU не включен , MMUEXT=-nommu , если MMU включен, он пуст, потому что мы обычно используем MMU. Следовательно, окончательное значение head-y равно:
head-y = arch/arm/kernel/head.o

2.  init-y , driver-ynet-y

В Makefile верхнего уровня есть следующий код:

558 init-y := init/
559 drivers-y := drivers/ sound/ firmware/
560 net-y := net/
......
896 init-y := $(patsubst %/, %/built-in.o, $(init-y))
898 drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
899 net-y := $(patsubst %/, %/built-in.o, $(net-y))
Как видно из вышесказанного: окончательные значения init-y, libs-y, driver-y и net-y таковы:
init-y = init/built-in.o
drivers-y = drivers/built-in.o sound/built-in.o firmware/built-in.o
net-y = net/built-in.o

3. библиотеки-у

libs-y по сути аналогичен init-y . Следующий код существует в Makefile верхнего уровня:

561 libs-y := lib/
......
900 libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
901 libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
902 libs-y := $(libs-y1) $(libs-y2)
Как видно из приведенного выше кода Makefile верхнего уровня , libs-y должен быть равен « lib.abuilt-in.o » , это всего лишь часть!
Поскольку некоторые значения будут добавлены к libs-y в Arch/arm/Makefile , код выглядит следующим образом:
286 libs-y := arch/arm/lib/ $(libs-y)

Arch/arm/Makefile изменяет значение libs-y на: Arch/arm/lib $(libs-y) После расширения оно становится:
libs-y = arch/arm/lib lib/

Объединив настройки Makefile верхнего уровня и Arch/arm/Makefile , libs-y в конечном итоге должен иметь следующий вид:

libs-y = arch/arm/lib/lib.a lib/lib.a arch/arm/lib/built-in.o lib/built-in.o

4. ядро

То же самое касается core-y и init-y . В Makefile верхнего уровня есть следующий код :
532 core-y := usr/
......
887 core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

Однако core-y будет добавлен в Arch/arm/Makefile , код выглядит следующим образом:
269 core-$(CONFIG_FPE_NWFPE) += arch/arm/nwfpe/
270 core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ)
271 core-$(CONFIG_VFP) += arch/arm/vfp/
272 core-$(CONFIG_XEN) += arch/arm/xen/
273 core-$(CONFIG_KVM_ARM_HOST) += arch/arm/kvm/
274 core-$(CONFIG_VDSO) += arch/arm/vdso/
275
276 # If we have a machine-specific directory, then include it in the 
build.
277 core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
278 core-y += arch/arm/probes/
279 core-y += arch/arm/net/
280 core-y += arch/arm/crypto/
281 core-y += arch/arm/firmware/
282 core-y += $(machdirs) $(platdirs)

Строки 269 ~274 добавляют в core-y разные значения в соответствии с разными конфигурациями . Например, если VFP включен, он будет в .config
Если в нем есть строка CONFIG_VFP=y , то core-y добавит " arch/arm/vfp/ " .
Строки 277 ~ 282 — это значения, непосредственно добавленные в core-y .

В Makefile верхнего уровня есть следующая строка:

897 core-y := $(patsubst %/, %/built-in.o, $(core-y))

После преобразования приведенного выше кода окончательное значение core-y будет:

core-y = usr/built-in.o        arch/arm/vfp/built-in.o \
arch/arm/vdso/built-in.o       arch/arm/kernel/built-in.o \
arch/arm/mm/built-in.o         arch/arm/common/built-in.o \
arch/arm/probes/built-in.o     arch/arm/net/built-in.o \
arch/arm/crypto/built-in.o     arch/arm/firmware/built-in.o \
arch/arm/mach-imx/built-in.o   kernel/built-in.o\
mm/built-in.o                  fs/built-in.o \
ipc/built-in.o                 security/built-in.o \
crypto/built-in.o              block/built-in.o

На этом заканчивается объяснение шести переменных head -y , init-y , core-y , libs-y , driver-y и net -y .

Guess you like

Origin blog.csdn.net/wojiaxiaohuang2014/article/details/133141736