make: 只生成vmlinux
make uImage:生成vmlinux并且使用mkimage工具生成uImage(uImage是在mlinux前面加上64字节头部,具体格式kernel和uboot有相关约定)。
/* linux-2.6.22.6\arch\arm\Makefile */
zImage Image xipImage bootpImage uImage: vmlinux
/* linux-2.6.22.6\Makefile ; include $(srctree)/arch/$(ARCH)/Makefile*/
all: vmlinux
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
>>>
vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds
{
lds和代码分析示例:
in lds:
.text.head : {
_stext = .;
_sinittext = .;
*(.text.head)
}
in head.S:
.section ".text.head", "ax"
.type stext, %function
code...
}
vmlinux-init := $(head-y) $(init-y)
{
head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o /* linux-2.6.22.6\arch\arm\Makefile */
init-y := init/built-in.o ; /*init/文件夹下面的所有代码被编译成init/built-in.o */
}
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
{
core-y := usr/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
libs-y := $(libs-y1) $(libs-y2)
libs-y1 := lib/lib.a
libs-y2 := lib/built-in.o
drivers-y := drivers/built-in.o sound/built-in.o
net-y := net/built-in.o
}
原文:http://www.cnblogs.com/mylinux/p/5055428.html