浅谈UBOOT

来源:互联网 发布:赚淘宝运费险犯法吗 编辑:程序博客网 时间:2024/06/08 13:39

这里写图片描述
如图,是4412开发板手册上的图。
板子一上电,首先执行的IROM中的程序,然后执行BL1。

那么BL1 是在什么地方存储呢?
答:只能在NAND, SD/MMC,eMMC,USB这四个地方。

也就是说IROM启动后,会去寻找BL1,也就是bootloader1,BL1执行完成后去找BL2。然后是UBOOT,再就是linux内核

IROM—>BL1—>BL2—>uboot—>linux

还有一个问题,就是BL1在哪里运行呢?(对于我们初学者来说,它是可有可无的 直接IROM—>BL2—>uboot—>linux)

答:在IRAM中运行,这个时候DDR3还没有被初始化,而我们应该要知道IRAM是上电就可以使用的
补充:IRAM 就是芯片内部的RAM,不用初始化就可以使用,但是很贵,所以很小,不能把操作系统装进来,要分段启动。因此出现了BL1,BL2。BL1的大小是定死的,因ROM的程序已经写死了。一般是8K或者15K。

关于BL2:
BL2是UBOOT的一部分,就是UBOOT前面的一小段程序,也就是前14K,这14K也是要在IRAM里运行的。也就是说,BL1,BL2都是在IRAM中运行。

有人会问为什么需要BL1?
答: 完全是出于安全的考虑,bootloader在系统启动的最前面运行,如果bootloader被攻破的话,危险级别几乎都会是致命。在上电启动执行IROM程序以后,加载BL1的时候,要对BL1进行多种安全检验,防止BL1是假的。然后BL1会对BL2进行各种检验。具体的话就暂时不深究,知道有这玩意就行吧,它主要是用公钥以及签名文件来进行校验这里写图片描述
这就是BL1,BL2和UBOOT在eMMC中的分布

注意: uboot是要做补齐的,就是不祈祷328k,所以你不管怎么编译它的大小都是不变的。

接下来关于uboot,它是一个bootloader即引导装载程序(除了uboot,还有RedBoot,Etherboot等等)

那么UBOOT和linux操作系统有什么区别呢?
答: uboot是最大的裸机程序,但是它却没有多任务运行的机制不能实现任务调度等操作系统应用功能。虽然说有协议栈,有文件系统,但是没有若任务运行的内核。(协议栈就是TCP/IP的协议栈,在uboot的源码里有,在一个 NET的文件夹)

其次uboot支持很多的处理器,和很多不同的开发板,在board中有好板子相关的代码,drivers中里就是一些驱动了。这里写图片描述
另外uboot运行的时候该选择哪一个处理器呢?毕竟它能支持那么多,在CPU目录中有一个u-boot.lds 文件,它!就是编译连接脚本。

截取几句话:
{
cpu/arm_cortexa9/start.o (.text)
cpu/arm_cortexa9/s5pc210/cpu_init.o (.text)
board/samsung/smdkc210/lowlevel_init.o (.text)
common/ace_sha1.o (.text)
*(.text)
}
这里面其实执行的是几个汇编文件。
也就是先执行文件 start.s ,注意start.o是源文件start.s生成的
然后再执行cpu_init.s
cpu_init.s 这个文件里的汇编,主要功能就是初始化DDR内存
也就是设置DDR的参数,让DDR3能工作起来
这三个代码跑好,就跳到C中执行了,具体怎么跳的,在start.s中最后有写到,这里就不列出来了。

0 0