1.板子的bootloader == PC机的BIOS;
2.在系统执行 bootloader 的过程中,
必须完成如下的几个重大任务:
1) 初始化 SDRAM ,建立堆栈环境,为跳转到 C 语言代码的入口做好准备。
2) 初始化 UART ,建立目标板和调试主机之间的通信。
3) 实现一个基于串口输入的命令解释器,提供一些基本的用户命令。
其实 bootloader 初始化的任务还有很多,但我觉得这三个任务是比较重大的。
这里结合 lumit4510 的代码,我给出了一个经过简化的 bootloader ( l-boot ) ,
只包含了 startup.s 和 main.c 两个程序,一个是汇编代码,一个是 C 语言入口。
可以很直观的看出,系统运行到 C 语言之前,需要经过哪些必要的初始化步骤。
ResetEntry
|
++++ SYS_RST_HANDLER
|
++++ InitSystem
|
++++ InitMemory
|
++++++++++++++++++++
|
++++ Copy ROM to RAM
|
++++ Set up SVC stack //设置特权堆栈
|
++++ Remap Memory //映射内存地址
|
++++ Goto main ( in main.c )