ARM Linux启动揭秘:映像生成与执行流程详解

需积分: 11 4 下载量 177 浏览量 更新于2024-09-22 收藏 155KB PDF 举报
ARM Linux 启动过程深入解析 ARM Linux 启动过程是一个复杂且精细的步骤,涉及到操作系统加载到ARM处理器的过程。本文针对AT91SAM9260EK板,以Linux内核版本2.6.211为例,主要探讨了两种不同类型的内核映像:非压缩内核映像和压缩内核映像。 首先,非压缩内核映像是由内核源代码编译、链接生成的,具体步骤如下: 1. 模块开发阶段:内核中的各个模块被编译并链接,形成顶层目录下的vmlinux文件,这是一个ELF格式的可执行映像,通常用于开发环境。 2. 映像转换:使用`arm-linux-objcopy`工具将vmlinux转换为二进制格式的Image文件,常用于部署到目标硬件。 另一种是压缩内核映像,通常称为zImage,它的生成更为复杂: 1. 压缩阶段:对非压缩的arch/arm/boot/Image二进制映像应用gzip压缩,生成piggy.gz文件。 2. 构建阶段:在arch/arm/boot/compressed/目录下,有一个自解压机制,包含piggy.s和head.S两个文件,其中piggy.s定义了gzip文件的数据段,head.S则包含解压内核的代码。同时,vmlinux-lds是链接脚本,用于构建最终的vmlinux映像。 3. 最终转换:再次使用`arm-linux-objcopy`将压缩后的vmlinux映像转换为zImage,这是一种ELF格式的二进制映像,但包含有内核自解压功能。 整个启动过程可以总结为: - 非压缩内核映像(vmlinux)首先加载到内存,然后通过ELF格式的引导加载程序引导系统。 - 对于压缩内核映像(zImage),在引导过程中,会自动解压缩并执行非压缩内核内容,简化了存储需求。 理解这些细节对于嵌入式系统开发者来说至关重要,因为这直接影响到系统的启动速度、内存占用以及系统的稳定性和可移植性。在实际应用中,根据设备性能和资源限制,选择合适的内核映像类型是必要的。