Skip to content

系统移植

环境搭建

主机地址: 192.168.1.5 开发板IP: 192.168.1.3 HOME = /home/guo 内存地址 0x410000000

Bootloader

Bootloader的启动过程分为单阶段和多阶段两种,多阶段可以提供更为复杂的功能。

第一阶段功能
  • 硬件设备初始化
  • 为加载Bootloader第二阶段代码准备RAM空间
  • 复制Bootloader第二阶段代码到RAM空间
  • 设置好栈
  • 跳转到第二阶段代码入口

第一阶段的硬件初始化一般包括:关闭开门狗,关闭中断,设置CPU速度和时钟频率,RAM初始化等等。但是这些也都不是必须的。

第二阶段功能
  • 初始化本阶段要使用到的硬件设备

  • 检测系统内存映射

  • 将内核映像和根文件系统从Flash上读到RAM

  • 为内核设置启动参数

  • 调用内核

调用内核之前,下列条件需要满足:

  1. CPU寄存器设置

  2. R0 = 0

  3. R1 = 机器类型ID,对于ARM结构的CPU,ID可以参见linux/arch/arm/tools/mach-types
  4. R2 = 启动参数标记列表在RAM中起始基地址

  5. CPU工作模式

  6. 必须禁止中断(IRQ 和 IFQ)

  7. CPU必须为 SVC模式

  8. Cache 和MMU的设置

  9. MMU必须关闭

  10. 指令Cache可以打开也可以关闭
  11. 数据Cache必须关闭
BootLoader与内核交互

BootLoader与内核交互式单向的,一般以标记列表(tagged list)的形式传递启动参数。

struct tag_header {
    u32 size;
    u32 tag
};

kernel

RootFileSystem