Linux系统启动流程分析
作者:郭孝星
微博:郭孝星的新浪微博
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells
一 系统上电和启动ROM
NOR Flash作为启动ROM的系统启动过程
- NOR Flash开头处存放启动代码,程序从NOR Flash開始处启动。
- 配置EMI寄存器,设置好各存储器的地址和存取规则。
- 配置电源管理模块。各模块上电。
- 启动代码将位于NOR Flash中的正式运行代码拷贝到内存中。以提高运行效率。
- 设置PC指针,指向NOR Flash中固定地址。
- 设置地址映射,用0地址映射到内存RAM空间。
- 设置PC指针,指向RAM中初始化代码。開始运行代码。
NAND Flash作为启动ROM的系统启动流程
- 上电初始。DMA默认设置将存储在NAND Flash中第一页的数据搬运到内部RAM中,然后设置PC到内部RAM開始处的地址。開始运行代码。
- 在启动代码中设置中断向量和硬件配置等。
- 将运行代码搬运到外部SDRAM或DDR=RAM,留出启动代码的位置。
- 将启动代码搬运到SDRAM或DDR-RAM中首址。
- 设置Remap。将0地址又一次映射到SDRAM或DDR-RAM首地址。
- 设置PC指针,開始运行正式的运行代码。
二 Bootloader引导
三 Linux内核引导
非压缩内核:Image
压缩内核:zImage
- 内核初始化
- 设备初始化
- 启动内核
- 挂载文件系统
- 启动用户空间进程
四 init初始化系统服务
- 初始化log系统
- 解析/init.rc和/init.%hardware%.rc文件,运行early-init,并运行解析出的init动作、early-boot动作、boot动作和execute property动作。
- 进行设备初始化,属性server初始化并开启属性服务。
- 进入无线循环以等待属性设置或子进程退出事件。