什么是Uboot
看到这个标题,以前没接触过Linux驱动的人肯定有一个疑问,什么uboot。在上次的启动流程分析中,我们了解到了BL2的功能是用来做一堆的初始化,然后搬运操作系统到DRAM中进行运行。严格的来说UBOOT就是专业的BL2。
开发板千千万万,所要引导的操作系统也多不可数,总不能在每用一个开发板就下载一个引导程序吧。
因此一个开源的项目bootloader诞生了,使用者能够根据自己的需要配置不一样的系统。那bootloader和u-boot又有什么关系呢,u-boot其实就是bootloader的一个分支。他和bootloader的关系类似与乌班图和linux的关系。
uboot的下载与移植
uboot是开源的,我们可以在网上直接进行下载。
uboot下载网站 链接: https://www.denx.de/wiki/U-Boot/WebHome
uboot的移植一般是较为困难的,将我们一般都是采用裁剪好的uboot来使用。
将u-boot解压安装之后我们先来分析以下u-boot的文件目录
-
arch
架构文件夹,里面放着各种架构文件比如arm。 -
driver
驱动文件夹,一些必要设备的驱动文件 -
net
网卡驱动 -
board
板载文件 -
boards.cfg
记录uboot所支持的开发板 -
examples
事例文件夹 -
fs
支持的文件系统文件夹 -
include
相关的头文件 -
sd_fuse
烧写u-boot的工具
u-boot的编译
正如上文所说,u-boot针对的不是某一方开发板,他面对的是成千上万个开发板。
因此我们在编译u-boot的时候一定要告诉u-boot我们要使用的开发板。比如我们使用的是tiny-4412开发板,那么我应该这样编译
make tiny4412_config -j16
这样u-boot会自行配置成我们开发板所需要的
此时我们的makefile就可以使用了,就能够通过makefile直接对u-boot进行编译
make -j16
u-boot的烧写
我们已经知道u-boot是用来当作bl2来执行的,那么我们是不是将他直接烧录再我们sd卡的相应扇区就可以了?
我们先来查看以下我们生成的u-boot二进制文件的大小。
足足有271k。
这个大小不要说sd卡的第17扇区到第49扇区能不能放下,我们的iram的大小也只有256k的大小,根本无法运行啊。
u-boot的功能有一系列的初始化和搬运系统。其中他的初始化列表里面就有dram,iram虽然不够大,不够用可是我们的dram够啊,我能不能先执行一部分的u-boot,让这部分的boot来初始化我们的dram,初始化后的dram就能够使用了,之后我们将完整板的u-boot在d-ram中来运行,这样是不是就完美的解决了运存不够的问题。
有了思路,那么接下来就可以开始执行了。
我们首先将uboot的前14k制作成bl2。
制作工具mkbl2
将制作好的bl2下载到sd卡的bl2位置也就是第17扇区
之后我们再将我们完整版的u-boot下载到我们第49扇区。
u-boot的使用
u-boot已经安装好了,可是我们如何看到u-boot的界面呢?
开发过stm32的都知道我们在无屏幕下进行系统调试时往往要借用串口调试工具,他能将我们程序中的一些东西显现出来。linux也有这样一个工具。MobaXterm
下载安装mobaxterm后通过数据线链接计算机和开发板。调整相应的波特率,选定相应的串口进行链接此时mobaxterm就会将我们的u-boot界面具象出来。
u-boot的相关指令
- reset
重启指令 - pri
打印相关信息 - set
设置指令,设置u-boot的相关指令 - save
保存设置 - fatinfo
查看分区信息 - fatls
查看当前文件夹目录 - go
跳转到某个地址执行程序 - bootm
跳转到某处运行内核。