ARM的不同的启动过程(通过Makefile的分析)
2010-12-22 09:59
417 查看
转自网络
分析过程:
查看arch/arm/Makefile下的第一个目标为all: zImage
找到以zImage作为目标的规则:
zImage Image xipImage bootpImage uImage: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
这个规则中命令执行的目录为$(boot)= arch/arm/boot,那么读取arch/arm/boot下的Makefile找到了这个Makefile中的第一条规则targets := Image zImage xipImage bootpImage uImage
(1)查看arch/arm/boot下的Makefile中的规则:
$(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy)
@echo ' Kernel: $@ is ready'
要生成非压缩的内核Image,依赖的文件是vmlinux, 根据顶层Makefile中的规则:vmlinux的生成需要文件$(head-y),在arch/arm/Makefile下定义了
$(head-y) := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
由此可以看出的Image 的入口程序为 Kernel的head.S
(2)查看arch/arm/boot下的Makefile中的规则:
$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
$(call if_changed, objcopy)
@echo ' Kernel: $@ is ready'
可知压缩的内核zImage的依赖体是$(obj)/compressed/vmlinux
查看arch/arm/boot/compressed/Makefile中两条规则:
targets := vmlinux vmlinux.lds piggy.gz piggy.o $(FONT) head.o misc.o head.o misc.o $(OBJS)
$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o /
$(addprefix $(obj)/, $(OBJS)) FORCE
$(call if_changed,ld)
@:
其中$(HEAD):=head.o
有上述两条规则可知:zImage 的入口程序即arch/arm/boot/compressed/head.S
(3)查看arch/arm/boot下的Makefile中的另外两条规则:
$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
$(Q)$(MAKE) $(build)=$(obj)/bootp $@
@:
$(obj)/bootpImage: $(obj)/bootp/bootp FORCE
$(call if_changed,objcopy)
@echo ' Kernel: $@ is ready'
bootpImage的组成部分为bootp, bootp的组成部分为zImage和initrd
查看arch/arm/boot/bootp/下的Makefile的规则
$(obj)/bootp: $(src)/bootp.lds $(addprefix $(obj)/, init.o kernel.o initrd.o) FORCE
$(call if_changed,ld)
@:
$(obj)/kernel.o: arch/arm/boot/zImage FORCE
$(obj)/initrd.o: $(INITRD) FORCE
从上面的规则可知:bootpImage 的入口程序即arch/arm/boot/bootp/init.S
分析过程:
查看arch/arm/Makefile下的第一个目标为all: zImage
找到以zImage作为目标的规则:
zImage Image xipImage bootpImage uImage: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
这个规则中命令执行的目录为$(boot)= arch/arm/boot,那么读取arch/arm/boot下的Makefile找到了这个Makefile中的第一条规则targets := Image zImage xipImage bootpImage uImage
(1)查看arch/arm/boot下的Makefile中的规则:
$(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy)
@echo ' Kernel: $@ is ready'
要生成非压缩的内核Image,依赖的文件是vmlinux, 根据顶层Makefile中的规则:vmlinux的生成需要文件$(head-y),在arch/arm/Makefile下定义了
$(head-y) := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
由此可以看出的Image 的入口程序为 Kernel的head.S
(2)查看arch/arm/boot下的Makefile中的规则:
$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
$(call if_changed, objcopy)
@echo ' Kernel: $@ is ready'
可知压缩的内核zImage的依赖体是$(obj)/compressed/vmlinux
查看arch/arm/boot/compressed/Makefile中两条规则:
targets := vmlinux vmlinux.lds piggy.gz piggy.o $(FONT) head.o misc.o head.o misc.o $(OBJS)
$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o /
$(addprefix $(obj)/, $(OBJS)) FORCE
$(call if_changed,ld)
@:
其中$(HEAD):=head.o
有上述两条规则可知:zImage 的入口程序即arch/arm/boot/compressed/head.S
(3)查看arch/arm/boot下的Makefile中的另外两条规则:
$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
$(Q)$(MAKE) $(build)=$(obj)/bootp $@
@:
$(obj)/bootpImage: $(obj)/bootp/bootp FORCE
$(call if_changed,objcopy)
@echo ' Kernel: $@ is ready'
bootpImage的组成部分为bootp, bootp的组成部分为zImage和initrd
查看arch/arm/boot/bootp/下的Makefile的规则
$(obj)/bootp: $(src)/bootp.lds $(addprefix $(obj)/, init.o kernel.o initrd.o) FORCE
$(call if_changed,ld)
@:
$(obj)/kernel.o: arch/arm/boot/zImage FORCE
$(obj)/initrd.o: $(INITRD) FORCE
从上面的规则可知:bootpImage 的入口程序即arch/arm/boot/bootp/init.S
相关文章推荐
- ARM的不同的启动过程(通过Makefile的分析)
- 详解 ARM Linux启动过程分析(1)
- linux内核启动过程分析(一) arm
- ARM启动过程分析
- 详解 ARM Linux启动过程分析(2)
- 通过分析exevc系统调用处理过程来理解Linux内核如何装载和启动一个可执行程序
- ARMLinux启动过程分析
- ARM多核处理器启动过程分析
- ARM多核处理器启动过程分析【转】
- 详解 ARM Linux启动过程分析
- ARM Linux启动过程分析
- IntelliJ IDEA通过Tomcat启动项目过程分析
- linux内核启动过程分析之内核启动___arm__优秀
- 详解 ARM Linux启动过程分析
- GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析
- 随笔之GoldFish Kernel启动过程中arm汇编分析
- 基于S3C2410-ARM Linux启动过程分析
- 通过Bochs分析Lilo启动Linux内核的过程
- 嵌入式ARM Linux kernel启动过程之浅尝辄止分析start_kernel函数