为树莓派4B编译uboot


1.编译环境

  • OS
    Ubuntu 20.04
  • uboot源码
    https://github.com/u-boot/u-boot.git

2.安装交叉编译工具链以及相关库

sudo apt install gcc-aarch64-linux-gnu make bison flex libssl-dev

3.构建树莓派4的make配置并编译

export CROSS_COMPILE=aarch64-linux-gnu-
make distclean
make rpi_4_defconfig
make -j

如果编译过程没有报错,则会在根目录下生成u-boot.bin文件。如有报错,搜索错误代码解决。

4.拷贝文件,上机测试

  1. 需要将vFAT格式的SD卡,推荐使用树莓派官方的镜像制作工具,执行擦除操作即可,比较方便。
  2. 修改config.txt文件
    如果你给树莓派安装过官方系统的话,config.txt文件就在官方镜像的boot分区下,使用任意编辑器在其中加入这行文字保存即可。
kernel=u-boot.bin

如果需要用串口查看效果的话再加入下面这一行:

enable_uart=1
  1. 将启动u-boot需要的文件放入SD卡根目录
    这些文件在官方镜像的boot分区下都能找到,直接复制即可,唯一需要注意的是别漏了u-boot.bin
bcm2711-rpi-4-b.dtb
bootcode.bin
config.txt
fixup4.dat
start4.elf
u-boot.bin

官方镜像boot分区内的文件如图所示。

4. 板子插入SD卡,上电测试。
屏幕看到以下图像即成功启动uboot

启动成功时串口输出如下

U-Boot 2022.04-rc3-00046-g0444cbbe77 (Mar 06 2022 - 03:43:01 -0800)

DRAM:  7.1 GiB
RPI 4 Model B (0xd03114)
Core:  202 devices, 13 uclasses, devicetree: board
MMC:   mmcnr@7e300000: 1, mmc@7e340000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1...
In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   eth0: ethernet@7d580000
PCIe BRCM: link up, 5.0 Gbps x1 (SSC)
starting USB...
Bus xhci_pci: Register 5000420 NbrPorts 5
Starting the controller
USB XHCI 1.00
scanning bus xhci_pci for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
U-Boot>

至此大功告成。


因笔者能力经验有限,文中所述可能存在错误,欢迎各位读者指正。


参考:

  1. 在树莓派4(Raspberry Pi 4 B)上运行u-boot - zhangpf的文章 - 知乎
    https://zhuanlan.zhihu.com/p/92689086
  2. https://www.beyondlogic.org/compiling-u-boot-with-device-tree-support-for-the-raspberry-pi/
  3. 树莓派4B,uboot启动Raspberry Pi OS - 嵌入式干饭人的文章 - 知乎
    https://zhuanlan.zhihu.com/p/365748456

– – – – – –
原创不易,转载请注明出处。