一、引导加载程序
1、固件
有些CPU在运行bootloader之前有一段固化程序,如BIOS,然后才运行第一个分区中的bootloader程序,大多数嵌入式系统中无固件,直接从起始地址开始运行bootloader程序,ARM为0,将存储bootloader程序的存储设备映射到该地址;
2、bootloader
第一阶段:
CPU体系结构的初始化(关看门狗,关中断,设置CPU时钟,RAM初始化)
为加载第二阶段代码准备RAM空间
复制第二阶段代码到RAM空间
设置栈
跳转到第二阶段入口点
第二阶段:
初始化要用的设备
检测内存映射
将内核和根文件系统读到RAM
设置内核启动参数
调用内核
具体动作:
R0=0
R1=机器类型ID
R2=启动参数标记列表的起始地址(bootloader和内核间以标记列表形式来传递启动参数)
关中断
关MMU
关CACHE
3、内核
start_kernel(),具体过程:先挂载/dev/ram0,执行/linuxrc,切换根目录,挂载根文件系统,执行第一个用户进程(init);
4、用户进程
文件系统为用户进程和内核之间的交互接口,如shell,库(glibc,uclibc)等