内核镜像zImage是如何生成的

转载:内核镜像zImage是如何生成的

 

内核镜像zImage是如何生成的

前面两篇文章介绍了vmlinux 文件生成,这个文件必然是核心的linux内核,但是它是ELF格式的文件,其中包含了可执行的二进制指令(内核),调试信息,符号表等内容。 vmlinux的生成是编译内核的关键,但是得到的vmlinux文件是不能烧写到flash中执行的。主要的问题是,没有一个环境来加载ELF格式的文 件。而zImage则是可以加载执行的二进制代码。

总的来说zImage和vmlinux的关系是:

1、zImage是可可运行的二进制内核镜像

2、zImage是由vmlinux处理、压缩得到的

3、zImage的大小比vmlinux小很多


下面介绍一下如何由vmlinux处理得到zImage

a、将vmlinux文件中的调试信息、符号表除去生成一个Image的镜像文件

/usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -R .note -R .comment -S  vmlinux arch/arm/boot/Image


b、将Image镜像用gzip压缩工具进行压缩,得到piggy.gz的文件

gzip -f -9 < arch/arm/boot/compressed/../Image > arch/arm/boot/compressed/piggy.gz


c、piggy.S文件中直接将上面一步的piggy.gz文件包含在其中,将piggy.S编译得到piggy.o文件

/usr/local/arm/3.4.1/bin/arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.piggy.o.d  

-nostdinc -isystem /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/include

-D__KERNEL__ -Iinclude  -mlittle-endian -D__ASSEMBLY__ -mapcs-32 -mno-thumb-interwork

-D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi -msoft-float    

-c -o arch/arm/boot/compressed/piggy.o

arch/arm/boot/compressed/piggy.S


d、将piggy.gz head.o misc.o三个文件链接成文内核镜像

/usr/local/arm/3.4.1/bin/arm-linux-ld -EL   --defsym zreladdr=0x30008000 --defsym params_phys=0x30000100

-p --no-undefined -X /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/libgcc.a -T arch/arm/boot/compressed/vmlinux.lds

arch/arm/boot/compressed/head.o

arch/arm/boot/compressed/piggy.o

arch/arm/boot/compressed/misc.o

-o arch/arm/boot/compressed/vmlinux


e、再次去除掉镜像中的符号、注释、调试信息的内容

/usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -R .note -R .comment

-S  arch/arm/boot/compressed/vmlinux

arch/arm/boot/zImage

posted @ 2013-08-31 23:32  dolinux  阅读(1547)  评论(0编辑  收藏  举报