U-Boot编译

一、引言

U-Boot是Das U-Boot的简写,全称 Universal Boot Loader,是遵循GPL条款的从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的 开放源码项目。
U-boot,是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,目前,U-Boot不仅支持Linux系统的引导,还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android等多种嵌入式操作系统,典型启动界面如下:

二、环境准备

1、源码

https://ftp.denx.de/pub/u-boot/

下载解压后,目录如下

2、工具链

ubuntu系统可以使用apt工具安装arm、mips、aarch64等的交叉编译工具链

# arm
sudo apt install gcc-arm-linux-gnueabi
# mips
sudo apt install gcc-mips-linux-gnu
# aarch64
sudo apt install gcc-aarch64-linux-gnu

也可以用buildroot自动生成,可以参考之前的文章《使用buildroot制作交叉编译工具链》

除此之外,还可以下载已经制作好的工具链,比如 https://toolchains.bootlin.com/,这个网站已经编译好了多种CPU架构的工具链。

三、编译

准备好了工具链就可以进行编译了,U-Boot支持内置配置和make menuconfig自主配置的编译方式。

1、使用内置配置编译方式

内置配置是针对开发板进行开发的配置。进入U-Boot目录,打开终端,输入ll configs/,查看支持的cpu型号的配置文件

这里以编译arm的vexpress、a9架构的u-boot为例,选择vexpress_ca9x4_defconfig,命令如下

make vexpress_ca9x4_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- all -j4

编译后生成了很多文件,u-boot是elf执行程序,u-boot.bin是可以刷入开发板的格式。

2、使用自主配置编译方式

如果cpu配置不在内置配置目录,可以自主编译,首先清除之前编译的内容

make distclean

进入U-Boot目录,打开终端,输入make menuconfig打开编译菜单

设置架构,选择ARM architecture

设置ARM架构参数,进入Target Select目标选择

这里选择vexpress_ca9x4

其他的参数如支持的命令、文件系统等,可以按需要进行选择,最后点击Save保存

编译方法同内置编译方法,设置编译链gcc名称如arm-linux-gnueabi-gcc,就写CROSS_COMPILE=arm-linux-gnueabi-,接着也加入-j4四线程编译,如果有错误先排错,之后结果同内置编译方法一样。

make CROSS_COMPILE=arm-linux-gnueabi- all -j4

四、测试

如果有开发板则刷入u-boot.bin进行测试,这里使用qemu模拟启动u-boot程序(有可能运行不了)

sudo apt install qemu-system
qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic

运行后截图,也能够输入命令,具体可以参考之前的文章《U-BOOT命令示例》

五、参考文档

https://blog.csdn.net/robin__su/article/details/132509344

https://blog.csdn.net/qq_21438461/article/details/125681972

https://zhuanlan.zhihu.com/p/676252968

一条评论

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注