linux2.6.35zImage生成流程简介

zImageARM Linux常用的一种压缩映像文件,uImageU-boot专用的映像文件,它是在zImage之前加上一个长度为0x40,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage0x40位置开始执行,zImageuImage没有任何区别。另外, Linux2.4内核不支持uImageLinux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。

 

分析一下zImage的组成。在内核编译完成后会在arch/arm/boot/下生成zImage。 

arch/armboot/Makefile中:

$(obj)/zImage: $(obj)/compressed/vmlinux FORCE

                    $(call if_changed,objcopy)

由此可见,zImage的是elf格式的arch/arm/boot/compressed/vmlinux二进制化得到的 

arch/armboot/compressed/Makefile中:

HEAD= head.o

OBJS= misc.o decompress.o

$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o /

                                                            $(addprefix $(obj)/, $(OBJS)) FORCE

                    $(call if_changed,ld)

$(obj)/piggy.gz: $(obj)/../Image FORCE

                    $(call if_changed,gzip)

$(obj)/piggy.o: $(obj)/piggy.gz FORCE

这里我们可以看到,vmlinux主要依赖下面几个文件:

Ø vmlinux.lds

Ø head.o

Ø piggy.o

Ø decompress.o

piggy.o依赖piggy.gz

piggy.gz依赖arch/arm/boot/Image

查看arch/arm/boot/Makefile,得知

$(obj)/Image: vmlinux FORCE

$(call if_changed,objcopy)

@echo '  Kernel: $@ is ready'

其中Image是由内核顶层目录下的vmlinux二进制化后得到的。注意:arch/arm/boot/compressed/vmlinux是位置无关的,这个有助于理解后面的代码,链接选项中有个 –fpic参数:

EXTRA_CFLAGS := -fpic 

总结一下zImage的组成,它是由一个压缩后的内核piggy.o,连接上一段初始化及解压功能的代码(head.o misc.o decompress.o)组成的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值