ARM Linux 启动过程详解
需积分: 11 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进程,这是系统的第一个用户态进程,通常会继续启动其他系统服务和应用。
整个启动流程涉及了多个层次的代码和配置,理解这一过程对于调试和优化嵌入式系统至关重要。这篇文档提供的详细信息对于开发者来说是宝贵的参考资料。
2010-01-19 上传
2022-12-18 上传
2009-09-01 上传
2009-04-19 上传
点击了解资源详情
2009-05-19 上传
点击了解资源详情
点击了解资源详情
byname1234
- 粉丝: 59
- 资源: 64
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫