bootrom是什么?

        其实像arm32的单片机是不需要bootrom,通过拨码开关,去找到该在那种介质上启动;不同的启动模式对应的不同的启动pc地址,比如stm32:会在0x00000000处取出栈指针MSP的初始值(存储的是栈顶地址__initial_sp);会在0x00000004处取出程序指针PC的初始值(存储的是首条指令Reset_Handler的地址);如下图对应不同启动模式的不同sp,pc值,这个是由硬件决定的,上电后,cpu就会通过总线,去到对应地址去取指令,译码,并执行

bootrom是什么?_第1张图片

1.从内部flash启动:使用jtag和swd模式下载程序,不需要用到bootloader.

2.从系统存储器启动(ISP):使用串口下载程序,由于串口不能直接将程序下载到flash,需要使用bootloader来引导程序下载至flash,再配置成1启动方式。

3.内存(SRAM)启动:一般用于程序调试

         但是对于一般的arm64处理器来说,要运行大型系统,就需要bootrom来引导系统启动了:简单来说,处理器上电后,就会根据程序计数器(pc)去取第一条指令,译码,然后执行;当然这个包含第一条指令的程序,我们一般叫做bootcode;这个bootcode被放在通常叫做bootRom的地方,那么bootRom肯定得是nor flash;因为至少要满足两个条件:掉电不丢失,也就是rom属性;还有就是能直接执行(除非处理器能够在上电后:直接将代码复制到不需要初始化的sram中去执行);下面就是一幅启动过程的流程图,很简单易懂

bootrom是什么?_第2张图片

        bootrom就会去启动bootloader来启动系统了,那么这个bootloader在rockchip系统中使用uboot,或者像高通会有自己的aboot;uboot的话可以通过宏来编成更小的spl作为二级boot来启动功能更齐全的完整uboot;下面看一张rk3399的启动流程图;可以看出厂商提供了两套启动方案,一套是不开源的二级boot,也即提供的miniloader固件;一套是开源的spl,这个肯定就需要自己拉厂商bsp的uboot来修改编译

bootrom是什么?_第3张图片

        所以总结下,bootrom就是处理器上电后,最先启动的一段代码,可根据不同的启动模式(硬件拨码)去不同的存储设备取bootlaoder,并执行bootloader来做后续的启动系统的工作

你可能感兴趣的:(Linux内核之启动流程,单片机,stm32,嵌入式硬件)