ARM-linux启动详解:内核映像生成与启动流程揭秘

需积分: 11 4 下载量 56 浏览量 更新于2024-07-25 1 收藏 155KB PDF 举报
ARM-Linux内核启动过程是一个复杂而精细的步骤,本文将深入解析这一过程,主要针对AT91SAM9260EK板和Linux内核版本2.6.211。这个启动过程主要涉及两个类型的内核映像:非压缩内核映像和压缩内核映像。 1. **非压缩内核映像 (vmlinux)**: - 非压缩内核映像是通过内核源代码的编译和链接产生的,首先在顶层目录下生成`vmlinux`文件,这是一种ELF(Executable and Linkable Format)格式的映像,包含了内核的核心组件和模块。 - 使用`arm-linux-objcopy`工具将`vmlinux`转换为二进制格式,通常存储在`arch/arm/boot/Image`目录下。 2. **压缩内核映像 (zImage)**: - 压缩内核映像是为了减小映像大小,便于存储和传输。首先,非压缩的二进制映像`arch/arm/boot/Image`被gzip压缩,生成`arch/arm/boot/compressed/piggy.gz`。 - 在`arch/arm/boot/compressed`目录下,有一个名为`piggy.s`的文件,用于定义包含压缩数据的段,以及`head.S`,其中包含了解压压缩数据的代码。还有一个链接脚本`vmlinux-lds`,确保了这些文件正确编译和链接。 - 最终,通过`arm-linux-objcopy`将处理后的`vmlinux`转换为二进制格式,形成`arch/arm/boot/compressed/zImage`,这是一个自解压的可执行映像。 启动流程概括如下: - 内核模块编译、链接生成vmlinux。 - 使用`arm-linux-objcopy`进行格式转换。 - 对非压缩内核映像进行gzip压缩。 - 创建压缩内核映像,包括解压代码和链接脚本。 理解这个过程对于从事内核移植或嵌入式系统开发的工程师至关重要,因为它涉及到硬件与软件交互的关键环节,能够帮助他们优化内存使用、提高启动速度和系统性能。此外,熟悉这些步骤也有助于调试和优化内核,以便适应特定硬件平台的需求。