ARM Linux内核启动过程详解

4星 · 超过85%的资源 需积分: 11 95 下载量 121 浏览量 更新于2024-10-07 收藏 155KB PDF 举报
"ARMLinux启动过程分析文档主要讲解了基于AT91SAM9260EK板的ARM Linux系统启动流程,涉及2.6.21内核版本,包括压缩与非压缩内核映像的生成方法。文档作者张俊岭提供了详细的技术解析和步骤说明。" 在ARM架构上运行的Linux系统启动过程复杂而精细,涉及到多个阶段。首先,我们来看非压缩内核映像和压缩内核映像的区别及其生成方法: 1. **非压缩内核映像**: - 非压缩内核映像是未经压缩的Linux内核代码,由`make Image`命令生成。 - 内核模块经过编译、链接后,形成顶层目录下的vmlinux文件,这是一个ELF格式的映像。 - 使用`arm-linux-objcopy`将vmlinux转换为二进制格式的Image文件。 2. **压缩内核映像**: - 压缩内核映像是对非压缩内核映像使用gzip进行压缩,生成piggy.gz文件。 - 在`arch/arm/boot/compressed/`目录下,利用piggy.s、head.S和vmlinux-lds等文件编译链接,生成一个包含解压代码的vmlinux文件。 - 再次使用`arm-linux-objcopy`将此vmlinux转换为二进制格式的zImage文件。 启动流程通常包括以下步骤: 1. **硬件初始化**:由固件(如Bootloader,如U-Boot)完成,初始化CPU、内存控制器、中断控制器等硬件,准备加载内核映像。 2. **加载内核**:Bootloader读取存储设备上的内核映像(压缩或非压缩),将其加载到内存的特定地址。 3. **解压内核**(如果使用压缩内核):如果加载的是压缩内核,Bootloader会执行解压代码,解压内核到内存中的预定位置。 4. **设置启动参数**:Bootloader传递设备树等启动参数给内核。 5. **跳转到内核入口点**:Bootloader跳转控制权到内核的入口点(通常在`start_kernel()`函数)。 6. **内核初始化**:内核进行自身初始化,如设置页表、初始化内存管理、设备驱动、文件系统等。 7. **启动用户空间**:加载init进程(通常是/sbin/init或类似),进入用户空间,进一步启动系统服务和应用程序。 这个过程涉及的每一步都是至关重要的,任何一个环节出错都可能导致系统无法正常启动。理解这些步骤有助于开发者调试和优化Linux在ARM平台上的启动性能。