草稿式记录,以后整理为一个系列。:)
学习时用的是讯为的4412(SOP)开发板和配套视频。非常感谢?
(1)安装工具(在Ubuntu下面的工具)
1.安装交叉编译工具链 https://www.veryarm.com/arm-none-linux-gnueabi-gcc 在这个里面可以下载一个
2.安装mkimage 输入: sudo apt install u-boot-tools; make_ext4fs 输入:sudo apt install android-tools-fsutils
3.串口助手cutecom 输入 sudo apt-get install cutecom
4. 相关工具需要用的时候再添加
(2)bootloader相关
1. 为什么要有bootloader:有人说是为了加载操作系统内核,可以这么说。但是可以这么想,如果写内核的时候完全可以把这部分代码一起写进内核,还需要吗?那么肯定是因为什么原因才把这层代码分类开的;原因就是现在的设备硬件的各不相同,这层代码需要做的事情应该是对应各不相同的硬件的。那么这层代码就要bootloader,常用的bootloader是u-boot。universal bootloader(通用的启动代码)方便移植平台:)
2.以Exynos 4412 为例子,了解板子的启动流程:
4412 可以选择启动程序介质,有nano flash,SD,eMMC,USB。在上面写了iROM是在启动或者被唤醒的时候跑的第一段程序。
iROM在内部ROM(64KB)里面,作用就是初始化时钟和栈(IRQ中断、SVC超级用户模式、ZI、RW等),从上述存储介质中加载BL1(三星的bootloader,加密的)校验解密后存到内部SRAM中。
BL1的程序再从上述的存储介质中校验加载BL2到SRAM(iRAM)中,(在其他博客可以看见,SRAM就是刚刚设置栈的空间,需要证实),此时转到BL1的程序,从存储介质中校验加载BL2(uboot spl的代码,SPL是Secondary Program Loader的简称)到iRAM,转到BL2代码。
BL2程序初始化SRAM控制器并将完整的uboot程序从存储介质中加载到DRAM中并校验bootloader的完整性,最终uboot加载操作系统到RAM中,启动。
这张图就可以清楚的知道iROM和BL1还有BL2干的事情。
0x2020000 地址是iRAM的起始地址,可以看见iRAM里面到底放了什么。
(持续修改中...2018年10月22晚)