Linux驱动学习——exynos4412介绍及启动流程

1 exynos4412芯片介绍

1.1 芯片手册

参考《Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf》

1.2 核心框架

基本配置:
4 核心,1.4G 主频 ,内部 ROM:64KB, 内部 RAM 256KB。
高端芯片:
内部ROM、RAM都很小,一般都是通过外扩RAM和FLASH。
框图:
在这里插入图片描述

1.3 芯片内部空间布局(Memory Map)

在这里插入图片描述
以上是这个芯片的内部ROM和RAM地址空间。
在这里插入图片描述
以上是指外扩内存的地址空间,这个芯片最大只能扩展到3G。
其中0x0206_0000~0x1400_0000是各种外设寄存器占用的空间。

1.3 GPIO介绍

参考芯片手册第6章:
Exynos4412拥有304个多功能输入输出口,和164个存储器引脚。相关寄存器说明参考手册。

2 exynos4412的启动流程

2.1 启动方式

启动方式:NandFlash、SD、MMC、eMMC、USB Device。
参考资料《SEC_Exynos4412_Users+Manual_Ver.1.00.00》:
在这里插入图片描述

2.2 启动流程

2.2.1 启动流程分析

参考资料:
《Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf》。
(1)IROM CODE
Figure 2-1 shows the booting sequence in iROM. First, iROM provides the basic environments for executing the arm codes. Second, the secure BL1 is downloaded from the booting devices: SD/MMC, eMMC4.3, eMMC4.4, and NAND. Next step, iROM checks the integrity of the downloaded BL1.
在这里插入图片描述
在这里插入图片描述
如上图所示,复位执行iROM程序,iROM主要工作:关开门狗,关中断和MMU,关D-cache,I-cache,失效TLB表和cache,让CORE1进入空闲,初始化栈,初始化Zi/RW段(指代码中没有显示初始化的全局变量和显示初始化的全局变量),注册函数指针,设置时钟,判断启动方式,从对应启动设备中加载BL1到SRAM中,然后对BL1进行校验和检测,加密校验,解密处理,最后跳转到BL1代码执行。
注意:IROM是固化在片内的一段代码,用户不能修改。

(2)BL1 CODE
在这里插入图片描述
在这里插入图片描述
BL1:BL1的工作:重新初始化IRQ,SVC模式的栈,判断启动设备,然后从对应的启动设备中加载BL2到SRAM中,然后判断是否启用了安全模式,如果是,则进行对BL2的校验,校验成功则跳转到BL2代码中执行。
注意:BL1是和平台无关的代码,由三星提供,属于芯片级的代码。

(3)BL2 CODE
在这里插入图片描述
在这里插入图片描述
BL2:重新初始化IRQ,SVC模式的栈,设置时钟,初始化外扩的DRAM,判断启动设备,然后从启动设备中读取OS或者FW,拷贝到DRAM中,然后判断是否启动安全模式,如果是,则对BL2进行校验,校验通过则跳转到OS或者FW代码中执行。
注意:BL2是平台相关的部分代码,由开发平台厂商自己编写(如tiny4412开发板的BL2是友善公司自己编写的,和其他厂商用CPU的开发板的BL2不一样)。

启动顺序:
①. 上电复位 CPU 从 iROM 中执行程序:iROM 是一个固化在芯片内部的很小,用户不能修改,iROM是很简单的程序用于 SOC 基本参数。
②. iROM 程序运行起来后读取 OM 引脚状态,知道启动方式,然后根据启动方式去初始化对应的启动设备控制器,完成设备设备控制器初始化,就可以从设备中读取数据
③. iROM 程序读取启动设备中的 BL1 代码到内部 iRAM 中,并且运行 BL1 中的程序。
④. BL1 程序运行起来后,从启动设备中读取 BL2 代码(16K 以内,Tiny4412 是读取 14K)到 iRAM 中,并且执行 BL2 程序。
⑤. BL2 程序运行后,初始化 DRAM 控制器,让外扩的 DDR3 内存芯片可以工作起来,然后把启动设备中的完整的用户程序复制到 DDR3 中,然后跳转到 DDR3 中运行完成的程序。(如果 BL2 是完整应用程序的一部分,则跳转到 DDR3 中运行时候不会重复前面已经运行过的代码,如初始化 DRAM,搬运数据等工作不会重新执行)

流程简单总结:
①IROM从启动设备中加载BL1到SRAM;
②BL1运行后,从启动设备中加载BL2到SRAM;
③BL2运行后,从启动设备加载OS或者FW到外扩的DDR3(DRAM)中。

2.2.2 启动流程示例

(1) SD卡启动的Superboot4412.bin 烧写系统到eMMC,其运行过程如下:
说明:Superboot4412.bin包含了BL1、BL2、Superboot4412.bin本身的核心功能(核心功能就是从SD卡中读取配置文件,根据配置文件信息读取对应的系统文件到DDR3中,然后把DDR3的数据下载到eMMC中)
流程:
iROM加载其中的BL1到SRAM中 —> 执行BL1 —> 加载其中的BL2 —> BL2初始化DRAM控制器,让外扩DDR3可以工作 —> 把其中的核心功能代码搬运到DDR3中—> 跳转到DDR3中运行 —> 从SD卡中读取配置文件 —> 根据配置文件信息加载对应的系统文件映像到DDR3中,然后把已经加载到DDR3中的系统映像写入开发板上的eMMC 存储芯片中。
(2)eMMC卡启动的Superboot4412.bin 引导系统
说明:Superboot4412.bin包含了BL1、BL2、Superboot4412.bin本身的核心功能(核心功能是加载操作系统到DDR3,然后启动操作系统)
流程:
iROM加载eMMC的BL1到SRAM中 —> 执行BL1 —> 加载eMMC的BL2 到SRAM中—> BL2初始化DRAM控制器,让外扩DDR3可以工作 —> 把其中的核心功能代码搬运到DDR3中—> 跳转到DDR3中运行 —>加载Linux操作系统到DDR3中 —> 运行操作系统,此时Superboot4412.bin的生命周期结束,CPU主控权交给OS。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值