ARM Linux内核启动过程详解

需积分: 11 2 下载量 11 浏览量 更新于2024-09-25 收藏 155KB PDF 举报
"本文档详细分析了ARM Linux的启动过程,特别关注了在AT91SAM9260EK开发板上使用的Linux内核版本2.6.21。文档内容包括了压缩与非压缩内核映像的生成步骤,以及它们在启动过程中的作用。" ARM Linux启动过程分析主要涉及以下几个核心知识点: 1. **内核映像类型**: - **非压缩内核映像**:由`makeImage`命令生成,首先将内核模块编译、链接成`vmlinux`文件,然后通过`arm-linux-objcopy`将其转换为二进制格式的`Image`文件,这是一个可以直接执行的ELF格式映像。 - **压缩内核映像**:由`makezImage`命令生成,首先使用`gzip`压缩`Image`文件得到`piggy.gz`,然后在`arch/arm/boot/compressed/`目录下,结合`piggy.s`, `head.S`和`vmlinux-lds`编译链接生成ELF格式的`vmlinux`,最后同样通过`arm-linux-objcopy`转为二进制的`zImage`。压缩内核映像在加载时会先解压再执行。 2. **启动流程**: - **引导加载器**:通常,启动流程始于引导加载器(如U-Boot),它负责加载内核映像到内存中,并传递必要的参数。 - **解压过程**:如果是压缩内核映象,引导加载器会执行解压代码,解压`zImage`中的`piggy.gz`部分,解压后的非压缩内核映象被放置在适当的内存位置。 3. **内核初始化**: - 解压完成后,内核开始执行初始化代码,包括硬件初始化、内存管理、设备驱动初始化等。 - 接着,内核会执行设备树(Device Tree)解析,以理解系统硬件结构。 4. **内核启动参数**: - 引导加载器在加载内核时,可以传递诸如内存大小、设备节点信息等参数。 5. **系统调用和用户空间启动**: - 内核初始化完毕后,会启动第一个用户进程,通常是init进程,它是系统的起点,负责启动其他用户服务和守护进程。 6. **文件系统挂载**: - init进程会挂载根文件系统,这可能是RAMDisk、NFS或其它类型的文件系统。 7. **系统运行**: - 随着文件系统的挂载和初始化脚本的执行,系统逐渐进入稳定运行状态,开始提供服务。 ARM Linux的启动过程涉及编译、压缩、解压等多个步骤,同时涵盖了硬件初始化、内核启动、用户空间启动等多个阶段,这一过程的每个环节都是确保系统正常运行的关键。