系统移植
环境搭建
主机地址: 192.168.1.5 开发板IP: 192.168.1.3 HOME = /home/guo 内存地址 0x410000000
Bootloader
Bootloader的启动过程分为单阶段和多阶段两种,多阶段可以提供更为复杂的功能。
第一阶段功能
- 硬件设备初始化
- 为加载Bootloader第二阶段代码准备
RAM空间 - 复制Bootloader第二阶段代码到
RAM空间 - 设置好栈
- 跳转到第二阶段代码入口
第一阶段的硬件初始化一般包括:关闭开门狗,关闭中断,设置CPU速度和时钟频率,RAM初始化等等。但是这些也都不是必须的。
第二阶段功能
-
初始化本阶段要使用到的硬件设备
-
检测系统内存映射
-
将内核映像和根文件系统从
Flash上读到RAM -
为内核设置启动参数
-
调用内核
调用内核之前,下列条件需要满足:
-
CPU寄存器设置
-
R0 = 0
- R1 = 机器类型ID,对于ARM结构的CPU,ID可以参见
linux/arch/arm/tools/mach-types -
R2 = 启动参数标记列表在RAM中起始基地址
-
CPU工作模式
-
必须禁止中断(IRQ 和 IFQ)
-
CPU必须为 SVC模式
-
Cache 和MMU的设置
-
MMU必须关闭
- 指令Cache可以打开也可以关闭
- 数据Cache必须关闭
BootLoader与内核交互
BootLoader与内核交互式单向的,一般以标记列表(tagged list)的形式传递启动参数。
struct tag_header {
u32 size;
u32 tag
};