1. 上电,start
2. disable watchdog,
3. disable interrupt,
4. set中断矢量地址,
5. 如果有mmu, 初始化mmu,
6. 初始化内存和flash控制器, 同时判断内存的size,
7. 使能mmu
8. 拷贝初级image到内存,
step 8 之前通常在在nor flash或者rom里面运行, 之后会跳到sdram里面运行. 如果是复杂的二级bootloader,应该是从ram跳到ram, 这个时候,如果需要拷贝image的话, 通常是在使能mmu之前(step 8 is done before step 7).
9. 跳转到内存,
10. 初始化stack, bss
11. 可能初始化串口等调试工具
12. 跳转到c语言入口函数
以上为汇编部分。
13. 初始化malloc,
14. 获取二级image的头,
15. 如果需要解密的话,解密
16. 拷贝二级image到ram
17. 如果该image是压缩的,解压到指定的位置
18. 如果二级image是类似linux这样的操作系统的,分别拷贝kernel和rootdisk到指定的位置。然后跳转到kernel执行。 否则,直接跳转到这个解压后image执行
以上为C语言部分。