合成内核镜像

2017-01-11


经过编译的linux内核产生了很多镜像版本,这里对他们进行了下分析:

内核镜像的主要组件

组件名称 描述
vmlinx ELF格式的内核主体,包含符号、注释、调试信息(编译时加-g选项)和与架构相关的部分
System.map 基于文本的内核符号表,针对vmlinux模块
.tmp_System.map 生成这个文件只是为了对System.map进行完好性检查;否则不会用于最后的构建镜像中
Image 二进制内核模块,去除了符号、标记和注释
head.o 与ARM相关的启动代码,对所有的ARM处理器通用。引导加载程序会将控制权交给这个对象
piggy.gz 经过gzip压缩的Image文件
piggy.o 将文件piggy.gz进行汇编后生成的对象,这样它就可以和下一个对象misc.o链接在一起了
misc.o 其中包含了用于解压内核镜像piggy.gz的函数,另外,我们在一些架构上常会看到的引导消息”Uncompressing Linux ...Done“也是由它产生的
head-xscale.o 专门针对XScale处理器初始化
big-endian.o 这是个汇编语言编写的小程序,用于将XScale处理器转换到大端字节序模式
vmlinux 合成内核镜像。和第一个vmlinux不一样,这个二进制镜像是由内核主体和表格中的对象链接生成的
zImage 最终的合成内核镜像,由引导加载程序加载

合成内核镜像

        objcopy                      gzip              asm
vmlinux -------> Image二进制目标文件 ------> piggy.gz -----> piggy.o
内核主体        去除符号、标记、注释       压缩的二
                    的二进制镜像           进制内核

cat Image | gzip -f -9 > piggy.gz

___________________________________________________________________
|     piggy.o    | misc.o | big_endian.o | head-xscale.o | head.o |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 二进制内核镜像 |              启动加载程序                         |
                    可启动的内核镜像

vmlinux镜像部分图

vmlinux镜像部分图

可以看到这里包含了很多可识别的符号,需要处理才能运行在真实的硬件上

Image镜像部分图

Image镜像部分图

这里已经没有了可识别的字符了,纯粹的二进制代码

results matching ""

    No results matching ""