Exynos4412启动介绍:BL1是8k还是15k

1. 两种大小的BL1是怎么回事

关于4412的BL1,有说8k的,也有说15k的,到底哪一个是对的呢?

这要追溯一下4412的版本,Exynos4412一共有两个版本,一个是Exynos 4412,另一个是Exynos 4412 Prime。网上大多数文章都是基于8k来介绍BL1的。我只在关于Exynos4412 SoC的启动分析 | 点滴汇聚 (chasinglulu.github.io)Exynos4412 的启动过程详解(四)看到过关于Exynos 4412 Prime的介绍,但是没到找到对应的官方资料。两者的主要差异就在于BL1的大小。Exynos 4412 Prime可以支持15k的BL1,也向后兼容,支持8k的BL1。

desc8ksize15ksize
ProductID, iROM version, function pointer0x0202_00000x0202_0000
iROM stack0x0202_01001.75K0x0202_01001.75K
iROM ZI/RW0x0202_08003KiB0x0202_08003K
BL10x0202_14008K0x0202_140015K
BL2+padding0x0202_340016K0x0202_500016K
free space0x0202_74000x0202_9000
END0x0206_00000x0206_0000

在这里插入图片描述

在这里插入图片描述

1.1. 维基百科给出的介绍

这里摘抄一下维基百科介绍:

2011年推出的Exynos 4210才是Exynos系列的第一款产品,它之前被人熟知的名字是Orion(猎户座)。Exynos 4210采用45nm制程,拥有两枚主频为1.2 GHz的Cortex-A9通用处理核心,拥有32/32 KB I/D Cache, 1 MB L2 Cache,并且集成ARM Mali-400 MP图形处理核心。在视频方面,Exynos 4210支持单路WXGA和双路WSVGA视频输出,支持HDMI v1.3a高清标准,可以拍摄1080p、30fps标准高清视频;Exynos 4210提供了6.4GB/s的内存带宽,支持LPDDR2/DDR2/DDR3内存。代表产品有三星Galaxy Tab 7.7、Galaxy S II(i9100)、Galaxy Note魅族MX等。
2011年9月发布的Exynos 4212在Exynos 4210的基础上再加改进:首先制程变为32nm,比起之前的45nm能够节省超过50%的能源。而且虽然同样为Cortex-A9架构,但Exynos 4212主频升至1.5GHz,比起4210更为强劲,3D性能约为后者的2倍,可用在手机平板电脑上。
2012年初,三星正式推出了自家的首款四核移动处理器Exynos 4412。这款新Exynos四核处理器,拥有32nm HKMG(高K金属栅极技术)制程,支持双通道LPDDR2 1066。新的32nm HKMG技术可以帮助降低功耗,按照官方的说法,和其前代比会减低20% 的功耗。三星Exynos 4412四核处理器仍然集成Mali-400MP图形处理器,但三星公司已将这颗图形处理器主频由此前的266MHz提升至400MHz,新闻稿指出会比现有的双核机型整体性能提升60%,图像处理提升 50%。2012年5月,首款采用Exynos 4412处理器的智能手机三星Galaxy S III正式上市,以及于6月上市的魅族MX四核版和12月上市的纽曼N2。

SoCCPUGPU内存技术供货时间应用设备
型号制程指令集架构核心频率 (GHz)
Exynos 4 Dual 45 nm``(Exynos 4210) [[7]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-4212page-7)45 nmARMv7Cortex-A921.2 1.4
Exynos 4 Dual 32 nm``(Exynos 4212) [[7]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-4212page-7)32 nm HKMGCortex-A921.5Mali-400MP4[[10]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-10) (quad-core) @ 400 MHz; 16 GFLOPS
Exynos 4 Quad[[13]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-SE4Quad-13)`` (Exynos 4412) [[14]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-SGSIII-14)32 nm HKMGCortex-A941.4ARM Mali-400MP4[[15]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-4412Manual-15) (quad-core) @ 440 MHz ; 17.6 GFLOPS
Exynos 4 Quad[[13]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-SE4Quad-13)`` (Exynos 4412 Prime) [[14]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-SGSIII-14)32 nm HKMGCortex-A941.6ARM Mali-400MP4[[15]](https://zh.wikipedia.org/zh-cn/%E4%B8%89%E6%98%9FExynos#cite_note-4412Manual-15) (quad-core) @ 533 MHz; 21.32 GFLOPS

2. Exynos4412的启动

关于Exynos4412的启动模式、启动流程、文件布局等,在Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf介绍的很清楚。

关于文件布局,Exynos 4412对BL1进行了限定,如果是使用官方的BL1,则BL2也需要满足指定的要求。如果是自制的BL1,只需要关心BL1的限定即可,BL2可以根据自制的BL1来进行布局。官方给出的布局是BL1+BL1+u-boot+tzsw。

BL1和BL2在存储介质中的block小结。

SD(8k)eMMC(8k)SD(15k)eMMC(15k)
BL11~160~151~300~29
BL217~4816~4731~6230~61

3. 函数介绍

三星提供了一组从外部介质加载数据的函数,可以在BL1或BL2中直接使用,相关介绍在Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf。

看一下文档中提到的注意事项:

  1. 在启动时提供给SDMMC和eMMC的时钟是20Mhz,MPLL是这些时钟的源头。
  2. 如果SDMMC和eMMC被选中为启动设备,那么iROM中SDMMC或eMMC拷贝函数在BL1和BL2阶段是可以使用的。如果你要使用这两函数,那么在使用前请不要修改SDMMC或eMMC的时钟。

另外不要修改SDMMC或eMMC相关的PLL时钟配置。如果你修改了SDMMC或eMMC相关的时钟配置,那么正确的拷贝我们无法保证。

addrname
0x02020030SDMMC_ReadBlocks
0x0202003CLoadBL2FromEmmc43Ch0
0x02020044MSH_ReadFromFIFO_eMMC
0x02020048MSH_EndBootOp_eMMC
0x02020070LoadImageFromUsb

这里特别说明一下MSH_ReadFromFIFO_eMMC和MSH_EndBootOp_eMMC。

MSH_EndBootOp_eMMC是从eMMC中复制数据到指定位置,这个函数首先从eMMC偏移为0的位置读取,再次调用时,会以上一次读取的结尾为偏移再进行读取。

MSH_EndBootOp_eMMC是所有读取动作完成后调用的。Exynos4412要求启动时从eMMC的boot分区读取数据,个人猜测这个函数是用来将eMMC的读写分区切换到userdata的。如果要烧录boot分区,可以用U-Boot的 mmc partconf命令来切换要读写的物理分区或设置eMMC上电后的默认读写分区。

如设置为boot0分区启动:

mmc partconf 0 1 1 1

3.1. SDMMC_ReadBlocks

这个接口功能是从SD或MMC类型设备拷贝数据到目的地址中;

返回1=True,0=False;参数(u32 SrcBlock,u32 NumofSrcBlock,void * DstByte)

SrcBlock:start block number.(0 ~ n)拷贝起始块的编号从0开始

NumofSrcBlock:拷贝块的数目

DstByte:目的地址(System Memory)

3.2. LoadBL2FromEmmc43Ch0

这个接口从emmc 4.3拷贝BL2启动区数据到内部RAM;

返回1=True,0=False;参数(u32 SrcBlock,u32 * DstByte )

0x02020040 Emmc43_EndBootOp_eMMC
这个接口结束emmc 4.3启动模式;

返回和参数都是void

3.3. MSH_ReadFromFIFO_eMMC

这个接口从emmc 4.4拷贝启动区数据到目的地址;

返回1=True,0=False;参数(u32 uNumofBlocks,void * uDstAddr)

uNumofBlocks:传输的总块数,1块=512B

uDstAddr:目的地址(System Memory)

3.4. MSH_EndBootOp_eMMC

这个接口结束emmc 4.4启动模式;

返回和参数都是void,这个函数会等待上面读函数的结束。

3.5. LoadImageFromUsb

这个接口从USB拷贝数据,如果在iROM中枚举成功,这个功能就能用;

返回1=True,0=False;参数void

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值