1. 编译
Linux内核的Makefile分为5个部分:
Makefile 顶层Makefile
.config 内核配置文件
arch/$(ARCH)/Makefile 具体架构的Makefile
scripts/Makefile.* 通用的规则等。面向所有的Kbuild Makefiles。
kbuild Makefiles 内核源代码中大约有500个这样的文件
顶层Makefile阅读的.config文件,而该文件是由内核配置程序生成的
1.1. 顶层Makefile
根据.config自动生成
-->include/linux/autoconf.h
这个文件供所有源文件使用
-->include/config/auto.conf
这个文件供Makefile使用,被顶层Makefile包含
1、包含配置
442 -inlcude include/config/auto.conf
2、包含体系arch的makefile
491 include $(srctree)/arch/$(ARCH)/Makefile
3、包含13个子目录分为5类
433
init-y := init/
drivers-y := drivers/ sound/
net-y := net/
libs-y := lib/
core-y := usr/
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
4、修改体系和交叉编译
185 ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
1.2. 体系Makefile
head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o
core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common
core-y += $(MACHINE)
core-$(CONFIG_ARCH_S3C2410) += arch/arm/mach-s3c2410/
core-$(CONFIG_ARCH_S3C2410) += arch/arm/mach-s3c2412/
core-$(CONFIG_ARCH_S3C2410) += arch/arm/mach-s3c2440/
libs-y := arch/arm/lib/ $(libs-y)
1.3. vmlinux
vmlinux:$(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
vmlinux-init := $(head-y) $(init-y)
head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o
init –y := init/built-in.o
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
core-y := usr/
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
libs-y := lib/lib.a lib/built-in.o
drivers-y := drivers/built-in.o sound/built-in.o
net-y := net/built-in.o
vmlinux-all := $(vmlinux-init) $(vmlinux-main)
vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds