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
Hello!
Good cheer to all on this beautiful day!!!!!
Good luck 🙂