ARM Linux启动过程深度解析

需积分: 35 7 下载量 88 浏览量 更新于2024-07-28 收藏 179KB PDF 举报
"本文档详细分析了ARM Linux的启动过程,作者为张俊岭,创建于2008年8月9日。文档基于AT91SAM9260EK开发板,使用的Linux内核版本为2.6.21。内容涵盖了内核的压缩与非压缩映像的生成步骤,以及它们在启动过程中的作用。" ARM Linux启动过程分析主要涉及以下几个关键知识点: 1. **非压缩内核映像**:这是一个由`makeImage`命令生成的二进制格式映像,位于`arch/arm/boot/Image`。生成过程包括: - 编译内核源代码,生成ELF格式的`vmlinux`文件。 - 使用`arm-linux-objcopy`将`vmlinux`转换为二进制格式的内核映像。 2. **压缩内核映像**:由`makezImage`命令产生,主要用于节省存储空间。其生成流程: - 使用`gzip`工具对非压缩内核二进制映像`arch/arm/boot/Image`进行压缩,得到`arch/arm/boot/compressed/piggy.gz`。 - 在`arch/arm/boot/compressed/`目录下,`piggy.s`、`head.S`和`vmlinux-lds`等文件共同作用,编译链接生成包含解压代码的ELF格式`vmlinux`文件。 - 再次使用`arm-linux-objcopy`将这个压缩后的`vmlinux`转换为二进制格式的`zImage`。 3. **启动流程**: - 当系统上电或复位后,通常由固件(如Bootloader)加载内核映像到内存并执行。 - 如果是压缩内核,会先执行解压代码,解压`zImage`中的数据,然后跳转执行解压后的非压缩内核映像。 - 非压缩内核映像接着执行初始化过程,包括硬件初始化、驱动加载、内存管理设置等。 - 最后,内核会启动初始化进程,如`init`进程,进一步加载文件系统并启动用户空间服务。 4. **启动过程中的关键阶段**: - **BIOS或U-Boot加载**:在ARM系统中,通常由Bootloader如U-Boot加载内核映像。 - **解压内核**(如果为压缩内核):解压代码运行并解压内核映像。 - **初始化阶段**:设置中断处理、时钟、内存控制器等,启动设备驱动。 - **设置页表**:初始化内存管理,建立页表以便进行虚拟地址到物理地址的转换。 - **挂载根文件系统**:加载根文件系统,这是用户空间程序运行的基础。 - **启动第一个用户进程**:通常为`init`进程,它是所有其他用户进程的父进程。 了解这些启动过程对于调试和优化嵌入式系统、定制内核以及解决启动问题至关重要。通过掌握这些步骤,开发者可以更好地理解和控制系统的启动行为,以适应不同应用场景的需求。