linux kernel编译产生的vmlinux Image zImage之间的关系

linux kernel的编译过程比较复杂,最后生成的给用户使用的kernel文件也是多种多样。
先来看一段编译ARM kernel时命令行最后的输出,主要可以分为5个步骤:
- 生成vmlinux
- 生成arch/arm/boot/Image
- 生成arch/arm/boot/compressed/piggy.gzip
- 生成arch/arm/boot/compressed/vmlinux
- 生成arch/arm/boot/zImage

  LD      vmlinux
  SYSMAP  System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  Building modules, stage 2.
  GZIP    arch/arm/boot/compressed/piggy.gzip
  MODPOST 1 modules
  CC      arch/arm/boot/compressed/misc.o
  CC      drivers/scsi/scsi_wait_scan.mod.o
  CC      arch/arm/boot/compressed/decompress.o
  CC      arch/arm/boot/compressed/string.o
  LD [M]  drivers/scsi/scsi_wait_scan.ko
  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready

我们来逐步分析每一个步骤:

生成vmlinux

vmlinux生成在kernel的根目录下,大小为28MB。链接文件在arch/arm/kernel/vmlinux.lds。

panzhenjie@panzhenjie-vmware:~/workspace/linux-3.5$ ll
......
-rwxrwxr-x   1 panzhenjie panzhenjie 28289095  91 07:27 vmlinux*

这个vmlinux是一个elf格式的文件,通过readelf命令我们可以看到,这个文件的链接地址是0xc0008000。
从第1段.head.text开始到第22段.bss,一共占用了2MB多的空间,而后面20多MB的数据其实都是些不必要的调试信息。

panzhenjie@panzhenjie-vmware:~/workspace/linux-3.5$ readelf -S vmlinux
There are 36 section headers, starting at offset 0x1a09770:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .head.text        PROGBITS        c0008000 008000 0001c4 00  AX  0   0  4
  [ 2] .text             PROGBITS        c0008200 008200 1948e4 00  AX  0   0 64
  [ 3] .rodata           PROGBITS        c019d000 19d000 072100 00   A  0   0 64
  [ 4] __bug_table       PROGBITS        c020f100 20f100 0028c8 00   A  0   0  1
  [ 5] __ksymtab         PROGBITS        c02119c8 2119c8 003c28 00   A  0   0  4
  [ 6] __ksymtab_gpl     PROGBITS        c02155f0 2155f0 001988 00   A  0   0  
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值