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
head-y = arch/arm/kernel/head.o
2. init-y , driver-y和net-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 = 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)
286 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. ядро
532 core-y := usr/
......
887 core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
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)
В 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 .