ARM Linux内核启动流程详解
需积分: 11 122 浏览量
更新于2024-07-30
收藏 155KB PDF 举报
"这篇文档详细分析了ARM Linux的启动过程,特别关注了内核的压缩与非压缩映像的生成步骤。作者张俊岭在2008年8月9日编写此文档,以AT91SAM9260EK开发板和Linux内核2.6.21为基础,讲解了内核如何从加载到运行的详细流程。"
在理解ARM Linux启动过程之前,首先要区分压缩内核映像和非压缩内核映像。非压缩内核映像是未经压缩的Linux内核代码,可以直接执行。它由`makeImage`命令生成,通过以下步骤:
1. 内核的各个模块编译和链接,形成顶层目录下的`vmlinux`文件,这是一个ELF格式的映像。
2. 使用`arm-linux-objcopy`将`vmlinux`转换为二进制格式的`arch/arm/boot/Image`。
压缩内核映像则是一个自解压的可执行映像,它首先对非压缩内核映像进行gzip压缩,然后附加解压缩代码。生成过程如下:
1. 使用gzip对`arch/arm/boot/Image`进行压缩,得到`arch/arm/boot/compressed/piggy.gz`。
2. `arch/arm/boot/compressed`目录下的`piggy.s`、`head.S`和`vmlinux-lds`文件编译链接,生成ELF格式的`vmlinux`文件。
3. 通过`arm-linux-objcopy`将`vmlinux`转换为二进制格式的`arch/arm/boot/compressed/zImage`。
启动流程大致分为以下几个阶段:
1. **引导加载器阶段**:通常由Bootloader(如U-Boot)负责,读取并解码存储设备上的内核映像(压缩或非压缩),并将控制权传递给内核。
2. **解压缩阶段**(仅针对压缩内核):如果加载的是压缩内核,Bootloader会跳转到解压缩代码,解压内核映像到内存中的特定位置。
3. **设置硬件环境**:内核初始化必要的硬件,如内存管理单元(MMU)、中断控制器等,并设置页表。
4. **初始化进程调度器**:设置调度算法,准备启动第一个用户空间进程。
5. **初始化文件系统**:挂载根文件系统,使得内核可以访问文件和配置。
6. **启动初始进程**:通常为/sbin/init,这个进程会继续启动系统服务和用户空间程序,完成系统启动。
这个过程在不同的架构和实现上可能略有不同,但基本流程保持一致。深入理解这个过程对嵌入式开发人员和系统调试人员尤其重要,有助于优化系统性能和解决启动问题。
2012-05-20 上传
2022-12-18 上传
2009-09-01 上传
2009-04-19 上传
点击了解资源详情
2009-05-19 上传
点击了解资源详情
点击了解资源详情
wanjx1234
- 粉丝: 1
- 资源: 10
最新资源
- 深入浅出:自定义 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色块闪烁现象解析