在如下文件中有详细的Makefile 说明书
Makefile 文件分类
简单概括吧,子目录下的Makefile 将当前目录组织起来,一般都是通过 obj-y +=
这样的形式。
同分析uboot 的Makefile 一样,在make 时加上 V=1 ,即make uImage V=1
可以看编译时更详细的打印输出。找到输出vmlinux.o 处的语句,如下:
arm-linux-ld
-EL -p --no-undefined -X
-o vmlinux
-T arch/arm/kernel/vmlinux.lds
arch/arm/kernel/head.o arch/arm/kernel/init_task.o init/built-in.o --start-group usr/built-in.o arch/arm/kernel/built-in.o arch/arm/mm/built-in.o arch/arm/common/built-in.o arch/arm/mach-s3c2410/built-in.o arch/arm/mach-s3c2400/built-in.o arch/arm/mach-s3c2412/built-in.o arch/arm/mach-s3c2440/built-in.o arch/arm/mach-s3c2442/built-in.o arch/arm/mach-s3c2443/built-in.o arch/arm/nwfpe/built-in.o arch/arm/plat-s3c24xx/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 arch/arm/lib/lib.a lib/lib.a arch/arm/lib/built-in.o lib/built-in.o drivers/built-in.o sound/built-in.o net/built-in.o --end-group .tmp_kallsyms2.o
可以看到使用的链接脚本文件为:-T arch/arm/kernel/vmlinux.lds
第一个 .o 文件是 arch/arm/kernel/head.o
看一眼链接脚本文件,编译后可以看到 arch/arm/kernel/vmlinux.lds,如下:
可以看到链接脚本顺序存放了所有的目标文件,因此,vmlinux 存放的第一个文件就是链接命令里放的第一个目标文件,arch/arm/kernel/head.o,即vmlinux 的入口函数就是 head.o。从这个函数顺腾摸瓜就可以继续了。