ARM linux解析之zImage镜像文件的生成
的。
内容如下:
是放在.text段的最后的,并且input_data和input_data_end包含里他们的起止地址。
最后是arch/arm/boot/compressed/vmlinux.lds文件的生成,这个是以arch/arm/boot/compressed/vmlinux.lds.in为蓝本,只是修改了
这个是在arch/arm/boot/compressed/Makefile中
SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
$(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG)
ifeq ($(CONFIG_ZBOOT_ROM),y)
ZTEXTADDR
ZBSSADDR:= $(CONFIG_ZBOOT_ROM_BSS)
else
ZTEXTADDR
ZBSSADDR:= ALIGN(8)
endif
就是:TEXT_START = $(ZTEXTADDR)
如果内枋是在nor flash中运行的,则选第一个,这时CONFIG_ZBOOT_ROM这个变量会定义,在RAM中运行的话,选第二个。在RAM中运行的代码是被编译成与位置无关的,所以可以加载到任何地方运行。
所以合起来的解释是:
$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
这个arch/arm/boot/compressed/vmlinux和前面的根目录下生成的vmlinux都是elf文件,但是却不是同一个东西。它是包令里解压用的头文件head.s,解压程序misc.c,decompress.c的,再加入压缩内核的elf文件,是可以通过trace32加载运行的。
下面是最后一步:
$(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy)
@echo
这个时候再把arch/arm/boot/compressed/vmlinux通过objcopy生成bin文件zImage,到这里,zImage文件生成完毕。
最后用个图表示一下整个zImage的生成过程:
图1.ARM linux的zImage生成过程
ARMlinuxzImage镜像文 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)