这篇只是一个简短的记录,记录一下对Bootloader的一些粗浅认识。
1.Bootloader真正核心的代码不过几百行汇编,完成的工作高度依赖于硬件和将要运行的系统。
a.对于硬件,将硬件置于合适的工作状态;如ARM,关闭看门狗,关闭中断,初始化内存接口等等;
b.检测硬件的类别和数量,保存在合适的位置。为被引导软件服务。
c.搬运代码到合适的地方,并交接控制权。
2.为了调试或者系统升级的方便,Bootloader增加了很多功能。这些功能使bootloader的复杂度大大增加,也使得系统使用更加便利,但不是核心代码。
a.如通讯类的,串口通讯,网络通讯;
b.如工具类的,格式化Flash,烧写Flash,校验烧写的代码,硬件检测和控制等。
3.BootLoader稳定性可靠性要求颇高,无外乎采用一些较为保守的策略,求稳求可靠。性能次之。
a.很多外设工作都采用查询方式,而非中断方式。如UART采用查询的方式;
b. 硬件工作在基本模式,而非扩展模式。如CPU的速度一般设置为可靠的工作速度,而非最大速度;
c.选用简单的编程模型和事务处理模型。
4.Bootloader和硬件高度相关,一个系统平台和另外一个系统平台差异很大。这里主要指Bootloader完成的核心任务。所以,理解Bootloader需要从硬件出发,理解最本质最核心的东西。至于Bootloader扩展功能,如网络通讯等,并不是核心的东西。那部分只要驱动移植, 就很容易从一个平台移植到另外一个平台。