uboot启动流程
分两阶段,第一阶段主要用汇编完成,第二阶段主要用c完成。
个人觉得两个阶段的分工并没有什么明显的要求,很多硬件的初始化可以放到第一阶段也可以放到第二阶段。只不过有一些复杂工作用汇编比较麻烦。
一般来说第一阶段工作:
1. 硬件设备初始化。
2. 为加载bootloader的第二阶段代码准备RAM空间。
3. 复制bootloader的第二阶段代码到RAM空间中。
4. 设置好栈。
5. 跳转到第二阶段代码的c入口点。
第二阶段:
1. 初始化本阶段要用到的硬件设备。
2. 检测系统内存映射。
3. 将内核映像和根文件系统映像从flash督导RAM空间。
4. 为内核设置启动参数。
5. 调用内核。
Bootloader与内核的交互:
Bootloader与内核的交互是单向的,他们不能同时运行,bootloader将各类参数放在某一个约定好的位置,再启动内核,内核启动后从这个位置获得参数(比如内存的起始和结束地址)。
下面这个文件就是某个bootloader设计的详细架构。