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

2019-07-12 23:02发布

嵌入式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文件。

结束

把之前的过程总结为下图:
内核镜像生成过程