Exynos4412启动--BootLoader(待续)

iROM:64K片内ROM,初始化基本系统的功能(ROM中的代码运行需要一定sram),如:堆栈、时钟、加载BL1到SRAM。

BL1存储在启动设备上,BL1初始化系统时钟,DRAM控制器、加载OS到DRAM。(由三星提供)(初始化SOC,芯片级别)

BL2:初始化平台(开发板级别),不由三星提供。

 

 

BootLoader需要完成以下功能:

初始化RAM:因为 Linux 内核一般都会在 RAM 中运行,所以在调用 Linux 内核之前 bootloader 必须设置和初始化 RAM,为调用 Linux内核做好准备。初始化 RAM 的任务包括设置 CPU 的控制寄存器参数,以便能正常使用 RAM 以及检测RAM 大小等。

初始化串口:一般的 bootloader 都会在执行过程中初始化一个串口做为调试端口。

检测处理器类型:并保存在寄存器r1中,提供给内核。

设置Linux启动参数:将参数保存在内存中,并以列表的形式顺序存储,存储地址保存在R2中。

调用Linux内核镜像:跳转到Linux内核的第一条代码之前必须满足以下条件: CUP的寄存器必须满足以下条件:r0=0,r1=处理器类型,r2=标记列表在 RAM中的地址。

Bootloader分为两个部分,第一部分是汇编代码且不做压缩,第二部分是C代码且有压缩的。Bootloader开始执行时,第一部分汇编代码先负责初始化CPU、PLL、DDR、Cache等硬件,让CPU和内存能够稳定运行,然后解压第二部分的Image,并拷贝到到内存执行。第二部分C代码完成串口、flash、网口等驱动的加载,并构建一个shell环境来接受用户输入。注意,在整个Bootloader运行其间CPU的MMU是没有被初始化的,所有的地址访问都是采用物理地址直接访问的。
 

SD卡启动:

SD中内容和文件布局:

内部SRAM的地址映射和存储内容:

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

 

参考:https://blog.csdn.net/weiganyi/article/details/11561859

https://blog.csdn.net/zqixiao_09/article/details/50792380

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值