ARM Linux启动过程详解

需积分: 11 2 下载量 183 浏览量 更新于2024-07-27 收藏 155KB PDF 举报
"这篇文档详细分析了ARM Linux的启动过程,包括非压缩和压缩内核映像的生成步骤。作者张俊岭通过讲解基于AT91SAM9260EK板的Linux内核2.6.211版本,阐述了内核如何从加载到解压,最终执行的过程。" 在ARM架构的Linux系统中,启动过程是一个复杂但有序的序列,涉及到硬件初始化、内核加载、解压(如果内核是压缩的)以及初始化阶段。这个过程可以分为以下几个关键步骤: 1. **引导加载器**:在系统上电或复位后,首先执行的是固件或引导加载器,如U-Boot。引导加载器负责初始化基本硬件,如内存控制器,设置处理器模式,并从存储设备加载内核映像。 2. **内核映像加载**:内核映像有两种形式,非压缩和压缩。非压缩内核映像是直接由编译链接生成的二进制格式,可以直接执行。而压缩内核映像是经过gzip压缩的,需要先解压。非压缩内核映像通常由`make Image`命令生成,而压缩内核映像由`make zImage`命令生成。 - **非压缩内核映像**:从`vmlinux`(ELF格式)通过`arm-linux-objcopy`转换成`Image`(BIN格式)。 - **压缩内核映像**:首先使用gzip对`Image`进行压缩得到`piggy.gz`,然后在`arch/arm/boot/compressed/`目录下,通过`piggy.s`,`head.S`和`vmlinux-lds`编译链接生成`vmlinux`(ELF格式),再通过`arm-linux-objcopy`转换成`zImage`。 3. **内核解压**:如果是压缩内核,引导加载器会将`zImage`加载到内存中,然后执行解压代码(包含在`head.S`中),解压后的内核映像是非压缩的`Image`。 4. **内核初始化**:解压完成后,内核开始执行初始化代码,这包括设置页表,初始化内存管理,设备驱动初始化,初始化进程调度等。 5. **初始化RAMdisk或根文件系统**:根据配置,内核可能需要挂载初始RAMdisk或者找到实际的根文件系统(例如通过网络或NFS)。 6. **启动第一个用户空间程序**:一旦根文件系统准备就绪,内核会启动`init`进程,这是系统的第一个用户空间程序,负责进一步的系统初始化和服务的启动。 7. **系统运行**:`init`进程根据`/etc/inittab`配置启动指定级别的运行级别服务,至此,系统进入正常运行状态。 整个启动过程的复杂性在于每个步骤都涉及硬件特定的配置和软件初始化,且不同平台可能会有不同的引导加载器和内核配置。理解这个过程对于调试和优化Linux在ARM设备上的启动性能至关重要。