ARM Linux 启动过程详解

需积分: 11 1 下载量 117 浏览量 更新于2024-09-21 收藏 155KB PDF 举报
"这篇文档详细分析了ARM Linux的启动过程,主要关注于在AT91SAM9260EK开发板上使用Linux内核版本2.6.21的启动流程,包括压缩和非压缩内核映像的生成步骤。" 在ARM架构的Linux系统中,启动过程是一个复杂且关键的环节,它涉及到硬件初始化、内核加载以及系统服务的启动等多个阶段。这篇文档详细介绍了这一过程,特别提到了压缩和非压缩内核映像的区别和生成方法。 首先,非压缩内核映像是实际的Linux内核代码,由`makeImage`命令生成。这个过程包括: 1. 内核模块编译和链接后,形成vmlinux文件,这是一个ELF(Executable and Linkable Format)格式的映像。 2. 使用`arm-linux-objcopy`工具将vmlinux转换成二进制格式的Image文件,供系统启动时加载。 其次,压缩内核映像则是为了减小存储占用,通过`makezImage`命令创建: 1. 使用gzip工具压缩非压缩内核的Image文件,生成piggy.gz。 2. 在`arch/arm/boot/compressed`目录下,编译head.S、piggy.s和vmlinux-lds,这些文件包含了解压代码和数据段定义。 3. 同样利用`arm-linux-objcopy`,将压缩后的vmlinux转换为二进制格式的zImage。 文档中还附有这两种内核映像生成过程的流程图,帮助理解每个步骤。 启动过程中,系统首先执行Bootloader,如U-Boot,它负责加载内核映像到内存中。对于压缩内核,Bootloader会找到解压代码并执行,解压内核后再跳转到解压后的内核入口点开始执行。非压缩内核则直接从内存中的地址开始运行。 启动过程的主要阶段包括: 1. **BIOS或固件初始化**:硬件初始化,如时钟设置、内存检测等。 2. **Bootloader**:加载内核映像到内存,可能还包括设备树(Device Tree Blob)等信息。 3. **Kernel Bootstrap**:内核开始运行,执行初始化代码,包括内存管理、设备驱动初始化等。 4. **Kernel Main**:设置内核栈,调用`start_kernel()`函数。 5. **System Initialization**:启动各种子系统和服务,如文件系统、网络、调度器等。 6. **User Space**:启动init进程,这是系统的第一个用户态进程,通常会继续启动其他系统服务和应用。 整个启动流程涉及了多个层次的代码和配置,理解这一过程对于调试和优化嵌入式系统至关重要。这篇文档提供的详细信息对于开发者来说是宝贵的参考资料。