您的位置:首页 > 运维架构 > Linux

嵌入式Linux的内核镜像生成过程

2015-09-02 14:49 323 查看

嵌入式Linux的内核镜像生成过程

最近读了《embedded linux primer》,里面讲到了Linux内核镜像的生成过程。

感觉在这方面算是讲的比较好的。在这里翻译一下。

顶层目录的vmlinux

配置好交叉编译环境后,就可以以开始准备编译内核了。

首先需要编译生成内核头文件,然后开始编译内核。内核编译完成后,会在

顶层目录生成vmlinux ELF文件。

这个vmlinux文件包含整个内核代码,包括注释,调试符号信息等。

piggy.o

piggy.o是包含经过压缩的内核代码的object文件。piggy.o主要是为了方便与其他object文件

链接生成最终Linux内核镜像文件。

生成piggy.o文件主要包含:

利用objcopy去掉vmlinux的一些辅助信息,生成镜像文件Image。

利用gzip将Image压缩成piggy.gz。

利用asm编译piggy.gzip.S生成piggy.o。

到此内核二进制镜像制作完成。

Bootstrap Loader

许多CPU架构都设计成通过两个阶段来加载Linux内核镜像。第一阶段为BootLoader,

第二阶段为Bootstrap Loader。每个阶段都有各自的设计目的。

Bootstrap Loader主要提供检查内核镜像完整性,解压内核镜像,内核镜像重定位功能。

Bootstrap Loader主要包括:

misc.o 内核解压,重定位相关代码。

head.o CPU启动相关底层代码。配置cache,建立C运行环境等。

其他.o

另一个vmlinux

将Bootstrap Loader和piggy.o链接成vmlinux。这个vmlinux在/arch/arm/boot/compressed/

目录下。

zImage

使用objcpoy将刚刚提到的vmlinux打包成Boot Loader需要的zImage文件。

结束

把之前的过程总结为下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息