历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2018年10月14日 | Exynos4412的启动过程分析

2018-10-14 来源:eefocus

做实验时我们是把 bin 文件烧入SD卡,比如前面做的汇编流水灯实验。

问:是谁把这些指令从 SD 卡读出来执行?

答:是固化在芯片内部ROM上的代码---它被称为iROM ,iROM是厂家事先烧写在芯片上的,无源码。

iROM把启动设备上特定位置处的程序读入片内存 (iRAM) ,并执行它。这个程序被称为 ,并执行它。这个程序被称为 BL1(Bootloader 1) ,BL1 是三星公司提供的,无源码。

BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个被称为 BL2(Bootloader 2) ,是我们编写的源码。

在汇编流水灯程序中我们通过mkbl2工具制作的BL2,当时也做了比较详细的讲解,执行如下命令:

1

./mkbl2 leds_on.bin bl2.bin 14336

 

iROM 、BL1更细致的启动过程如下图所示(摘自Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf):

(1) iROM :下图是 iROM 启动流程图

iRom Booting

iRom Booting

由上图可以看出,首先关闭看门狗,关闭中断及MMU,关闭数据缓存,打开指令缓存,清除TLB,然后将其他核进入IDLE模式,只留CPU0,这里有了第一个跳转分支,IROM判断当前启动模式,是冷启动还是唤醒,如果是唤醒模式,那么就是直接跳转到BL1,在BL1里面我们会再次判断是否是唤醒模式,如果是就直接跳转到唤醒函数,一般都是linux内核的唤醒句柄。当然在裸机里都是冷启动的,休眠唤醒一般是不需要关注的,当然如果你的裸机程序需要支持休眠唤醒,就需要增加相应的代码了。

继续分析,设置IRQ及SVC模式的栈空间,这个时间,栈地址是其内部的一片IRAM,这小片RAM是IROM运行的外部随机存储器,没有这片小内存,IROM是无法运行的。接下了就是初始化IROM里面所使用的各种变量,初始化只读数据段,未初始化数据段清零,导出部分核心函数,这个函数可以在BL1中使用,获取当前复位的状态,设置系统时钟分频,获取OM管脚配置模式,这里可以从多种外设启动,具体启动模式如下表:

OM select boot device

OM select boot device

我们整个裸机教程都是从外部SD卡启动,根据OM启动模式,从SD卡拷贝前8K代码,如果拷贝成功,就验证校验和,BL1的前16个字节就是提供给IROM用来标识BL1相关信息的,具体信息如下(后面的教程我们会自己写一个BL1,现阶段先用三星提供的):

//bl1 header infomation for irom

//

//0x0 - bl1 size

//0x4 - reserved (should be 0)

//0x8 - check sum

//0xc - reserved (should be 0)

.word 0x2000

.word 0x0

.word 0x0

.word 0x0

首先是描述BL1的大小,然后还有一个BL1的校验和,那我们怎么知道BL1的校验和呢,这个是在编译生成最终的二进制文件后,通过mk4412程序制作的

简单地说,iROM就是先设置程序运行环境 (比如关看门狗、关中断、关MMU 、设置栈 、设置栈 、启动 PLL 等 );然后根据OM引脚确定启动设备 (NAND Flash/SD 卡/其他 ),把 BL1 从里面读出存入iRAM;最后启动 BL1 。

(2) BL1 :下图是 BL1 的启动过程

BL1 Booting

BL1 Booting

简单地说,也是设置程序运行环境(初始化中断、设置栈等 );然后从启动设备上把 BL2读入iRAM;最后启动它。

 

有几个问题需要解决:

① 在启动设备上哪个位置存放 BL1、BL2?

② 把BL1 BL2 读到 iRAM哪个位置?

③ BL1 、BL2 大小是多少?

④ 怎么保证 BL1 、BL2 程序的完整性(即读出程序时没有错误 )?

假设启动备为 SD 卡, 如下图所示(这里只分析SD卡启动):

BL1、BL2在SD卡上的存储位置

BL1、BL2在SD卡上的存储位置

BL1、BL2在iRam中的存储位置

BL1、BL2在iRam中的存储位置

BL1 位于SD卡偏移地址 512字节处(即从第一个扇区开始,前面有一个扇区保留,每个扇区512字节,为什么保留第一个扇区,如果有同学对DOS分区表有过研究,就能明白其中的道理了,第一个扇区是分区表的配置区),iROM从这个位置读入8K 字节的数据,存在iRAM地址 0x02021400位置处。 所以 BL1不能大于8K 。

IROM计算校验和且验证通过后并解密BL1成功后就可以跳转到BL1了,至此IROM已执行完备,权限已交由BL1了,补充说明一下,解密BL1是加密模式启动时才需要的,非加密模式启动是无需解密BL1的。

BL2 位于 SD 卡偏移地址 (512 +8K)字节处,BL1从这个位置读入14K 字节的数据,存在iRAM 地址 0x02023400 处。 BL2 不能大于(14K – 4) 字节,最后 4字节用于存放较验码(在汇编流水灯试验中我们用mkbl2工具制作的BL2,其中mkbl2工具最主要的作用就是计算出校验码)。

如果我们的程序大于 (14K – 4) 字节,那么需要截取前面 (14K – 4) 字节用来制作BL2并烧入SD卡偏移地址 (512 +8K) 字节处。当BL2启动后,由它来将存放在SD卡另外位置的、完整程序读入内存。

 

对于其他启动设备,可以参考 《Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf》,下面会附上下载地址。

下载地址


推荐阅读

史海拾趣

AUK Contractors Co Ltd公司的发展小趣事

近年来,电子行业面临着原材料成本上升、环保要求提高等多重挑战。AUK Contractors Co Ltd积极应对这些挑战,通过优化生产流程、采用环保材料等方式降低成本、提高效益。同时,公司还加大了对新能源、智能制造等领域的研发投入,实现了从传统电子制造向高科技领域的转型升级。

AntennaHome公司的发展小趣事

随着公司产品的不断升级和优化,AntennaHome逐渐引起了国际大厂的注意。一家知名通信设备制造商看中了公司产品的技术优势和稳定性能,主动提出合作意向。经过多轮谈判,双方达成了合作协议,AntennaHome的产品开始进入国际市场,公司的业务规模也随之迅速扩大。

EPIC公司的发展小趣事

近年来,随着元宇宙概念的兴起,Epic Games也开始在这一领域进行布局。公司首席执行官Tim Sweeney对元宇宙的发展潜力持乐观态度,并认为这将是未来游戏和社交领域的重要发展方向。为了实现这一愿景,Epic Games不仅在技术上进行了大量投入和研发,还与多个合作伙伴共同推动元宇宙生态的建设和发展。这些举措使得Epic Games在元宇宙领域取得了显著的进展,并有望在未来成为该领域的领军企业之一。

Carlisle Interconnect Technologies公司的发展小趣事

进入21世纪,Carlisle Interconnect Technologies开始了全球化的布局。公司不仅在北美和欧洲设立了多个生产基地和研发中心,还积极开拓亚洲和拉丁美洲等新兴市场。通过全球化的战略布局,公司不仅能够更好地利用全球资源,还能够更深入地了解各地市场需求,进一步推动业务发展。同时,公司还加强了与国际知名企业的合作,共同推动电子行业的发展和进步。

这五个故事只是Carlisle Interconnect Technologies发展历程中的一部分,但它们足以展示公司在电子行业中的创新、进取和不断追求卓越的精神。这些故事也为我们揭示了一个成功企业的发展轨迹:从创业初期的创新与突破,到不断的技术升级和产品多样化,再到全球化的布局与业务拓展,每一步都充满了挑战与机遇。

FILTRONIC公司的发展小趣事

FILTRONIC公司成立于上世纪90年代初,正值通信技术快速发展的时期。公司初创时便聚焦于滤波器技术的研发与生产,针对当时市场对高性能滤波器的迫切需求,FILTRONIC的研发团队通过不断试验与优化,成功开发出了一款具有创新性的高性能滤波器产品。这款滤波器在频率选择性和插入损耗方面表现出色,迅速获得了市场的认可,为FILTRONIC在电子行业中站稳脚跟奠定了坚实的基础。

Dawn Electronics Inc公司的发展小趣事

Dawn Electronics Inc公司成立于上世纪末,当时电子市场竞争激烈,新公司难以立足。公司创始人凭借对技术的热爱和对市场的敏锐洞察,决定专注于研发高性能的定制电子元件。初创期,公司面临着资金紧张、人才短缺的困境,但创始人带领团队日夜兼程,攻克技术难题,终于在市场上推出了具有竞争力的产品,赢得了客户的认可。

问答坊 | AI 解惑

金士顿U盘维修工具

如果朋友们遇到金士顿U盘能识别,不能格式化,容量为0字节.你就用到这软件啦 [ 本帖最后由 西门 于 2009-5-12 00:06 编辑 ]…

查看全部问答>

应届生缺少的仅仅是实习经历吗?[

很多应届生面对走出校门的第一份工作时,心里有些没底和盲目,经历的几次面试之后,往往以失败告终,被拒绝的理由基本上是:没有相关工作经验。     但是又有多少名学生真正的反思过,被拒绝的真正理由是什么呢?在多年的工作中,面试 ...…

查看全部问答>

STM32串口1引脚接在重映射口PB6PB7,是否还能上电ISP下载呢

                                 STM32串口1引脚接在重映射口PB6  PB7 ,是否还能上电ISP下载呢?…

查看全部问答>

求助关于开发工具~

                                 现在准备用stm32的mcu做一个项目,由于刚刚接触,也不知道使用什么编译器,有没有高手提供一下编译器的下载地址~~ ...…

查看全部问答>

自己做个PIC单片机最小系统不好用,请帮忙

我用RD0--RD7口做输出控制8个LED指示灯,我把程序通过买的开发板烧进单片机,然后放在自己做的板子上想看看好使不,但是LED灯却不亮。当我用示波器检查的时候(用带钩的一端夹在RD0口,夹子夹在单片机的Vss口),示波器的图一开始变化,但来基本是 ...…

查看全部问答>

推荐一款低功耗段式液晶屏

看论坛正在做低功耗时钟,我刚好手头有个东西也需要低功耗显示,向大家推荐北京青云的LCM061A段式模块,主要是3.3V下可以工作,典型工作电流看厂家资料说是50ua(无背光),省电模式下《1ua。因为最近正在调试别的部分,实际的功耗还没有实际测试, ...…

查看全部问答>

stm32仿真器在iar编译环境下

使用stm32仿真器在iar编译环境下调试出现stm32:failed to verify @ address 0x08000000...,看了很久,想问一下,有没有朋友遇到过这种情况…

查看全部问答>

华为编程规范 笔记

这些天写程序被老大教训古怪,没见过这样写的。我其实是一个很讲究这些的人,只可惜我的个人编程风格来源于各种我接触的代码,书,因此缺乏一个系统的规范。 国内,我们这一行当,最牛逼的公司应该就是 华为了,而且他们还有一套流传出来的编程规 ...…

查看全部问答>

PCB设计PowerPCB常见问题集

  一. PCB设计PowerPCB如何import Orcad的netlist?   Orcad中的tools->create netlist,other的formatters选取padpcb.dll,再将其后缀名.net改为.asc即可。   三.请问 PCB设计PowerPCB3.6的library如何加载到4.0中?   通过PCB设 ...…

查看全部问答>