ARM Linux启动过程深度解析
需积分: 35 135 浏览量
更新于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`进程,它是所有其他用户进程的父进程。
了解这些启动过程对于调试和优化嵌入式系统、定制内核以及解决启动问题至关重要。通过掌握这些步骤,开发者可以更好地理解和控制系统的启动行为,以适应不同应用场景的需求。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-08-08 上传
2014-06-22 上传
2011-08-19 上传
2012-05-04 上传
2009-04-24 上传
抗麻布袋的人
- 粉丝: 26
- 资源: 11
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析