ARM专题:S5PV210的BL0解读【Cortex-A8系利】

1、BL0解释

BL0全名1st boot loader,也就是引导装载程序,是直接固化内部ROM上的一小段程序,在上电的时候会默认去执行

注意:上述中的ROM是IROM,只有64KB,本质其实是NorFlash,也只有只读存储器中的数据掉电之后是不会消失的,如果用RAM肯定是不行的,用普通的ROM也是不行的,因为NorFLASH可以和CPU直接总线式相连接,CPU上电之后可以直接读取,所以一般可以用来做启动介质。(电脑的BIOS其实就是一块NorFLASH)

BL0执行的时候,会进行一系列的操作,之后BL0从系统指定的外部存储器件中加载第二个引导程序BL1到内部的RAM(ISRAM),这个外部存储器可以是NAND、SD/MMC、OneNand与USB,同时BL0也会对BL1进行安全检验。

--------------------------------------------------------------------------------------------------------------------------/

2、BL0做了以下的一些事情

(根据IROM手册2.2参考,iROM(BL0)启动序列如下,序列:有先后顺序)
01 禁用看门狗计时器
02 初始化指令缓存cache
03 初始化区域
04 初始化区域
05 初始化块设备复制函数
06 初始化锁相环并设置系统时钟
07 将BL1复制到内部SRAM区域
08 验证BL1的校验和,如果校验和失败,iROM将尝试第二次引导(去SD/MMC通道2)
09 检查它是否处于安全启动模式,如果安全密钥值是用S5PV210编写的,那么它就是secure-boot模式。如果是安全启动模式,请验证BL1的完整性。
10 跳转到BL1的起始地址

一些备注(根据学习补充)

01 CPU设计的时候看门狗默认是打开的,其实打开并没有什么不好的,如果系统死机或者跑飞的时候,看门狗计时器相应的执行程序也无法执行,这时系统就会复位(这个喂看门狗的程序其实也是默认的,执行的时候会自动去喂,如果跑飞了就不会去喂看门狗了),避免安全问题发生。其实这个设计是不错的,但是缺点在于我们CPU启动的时候,系统还没去启动,在系统没有启动之前,看门狗计时器会去计时,喂看门口的程序也没有默认的去执行(必须系统启动后才执行),这样,如果不自己写喂看门狗程序的话,系统有可能在没有启动成功前,就被看门狗复位了。因此,BL0在一开始才会默认先关闭了这个看门狗,先执行启动代码后,再自己手动的去启动看门狗。

02 初始化指令缓存(instrument-cache),cache是高速缓冲存储器,是位于CPU与“内存”之间的临时存储器,容量较内存相对小,但交换速度很快。缓存中的数据是内存中的一部分,但这一部分是短时间内CPU即将访问的,当CPU调用大量数据的时候,就可避开内存直接从缓存中调用,从而加快读取的速度。这个在CPU和内存之间交换数据十分重要,在BL0中也进行了初始化。

03 初始化了栈区域,这里的栈区域其实物理内存,因为操作系统还没有跑起来,栈内存在初始化后其实是自动管理的,局部变量和函数的存放位置,需要时声明定义使用,使用完后自动释放。

04 初始化了堆区域,这里的堆区域也是物理内存,和栈不相同的是,堆中的内存需要手使用malloc来申请,用完之后需要通过free函数进行内存释放,这段期间就是malloc的生命周期,用完一定要记得释放,否则很容易造成内存泄漏,总结就是,自己需要在某个区间内管理和使用需要的变量,就是用堆内存。

05 块设备复制函数,这个还没学到,查了一下,讲的是Linux驱动的,,这个离我有些远,还需要努力【这东西还没办法解决,23333】

06 锁相环的初始化,这个就特别重要了,之前学STM32的时候可以知道,是用来倍频的,V210中只有24MHz的外部晶体/振荡器可用,需要达到更高的频率得用到这,之后系统时钟和SOC的时钟的产生就是靠其。

07 将BL1复制到内部的SRAM区域,也就是ISRAM(有96KB),注意B1是放在外部的存储设备中的,第一次的引导设备是去SD/MMC通道0,这里默认就是iNAND,注意按照这里是先复制了,之后再去检验校验和

08 检验BL1的校验和,这里面也有一大堆东西,根据我们的启动方式的不同会有些许不同。例如,如果我们是SD卡启动的话,烧录到SD卡的镜像文件(.bin文件,位于2通道,在破坏了iNand的第一个扇区的前提下,如果没破坏同理)实际上包括两个部分,一个是BL1代码的16字校验头,一个是实际的bin镜像部分,校验的时候,就会先计算实际镜像的校验和checknum,再和校验头里面的checknum进行比对,如果一样则校验成功,否则失败。又如,如果是USB启动的话,其实这个校验和的过程可有可无,启动的时候会直接忽略掉这个校验和的过程。其实,之所以在iNand或者SD卡启动的时候有这个校验和的过程,是为了避免外部存储设备在写入的时候可能会发生一些未知的错误,有这个校验会提高一些保障。

--------------------------------------------------------------------------------------------------------------------------/

版本注明

2019年08月20日 Version0.0 初始版本
2019年08月24日 Version1.0 补充了初始化栈堆的东西,块设备需要过一段时间了

--------------------------------------------------------------------------------------------------------------------------/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不懂啊阿田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值