树莓派3B+ U-Boot TFTP启动缺bootz命令,求最新Buildroot/U-Boot教程
解决树莓派3B+ U-Boot无
bootz命令的TFTP启动问题 刚碰到过类似的场景,给你几个实用的解决方向,帮你搞定这个问题:
一、先搞懂为什么没有bootz命令
U-Boot的bootz命令是需要单独启用的,你的默认配置里大概率没开CONFIG_CMD_BOOTZ这个编译选项——树莓派的U-Boot默认配置有时候会因为架构适配或者功能裁剪,关闭这个命令。
二、重新编译U-Boot启用bootz
这是最直接的解决方法,步骤很清晰:
- 进入你的U-Boot源码目录,先加载树莓派3B+的默认配置:
make rpi_3_b_plus_defconfig - 打开图形配置菜单,启用
bootz命令:make menuconfig - 在菜单路径
Command line interface > Boot commands下,找到并勾选CONFIG_CMD_BOOTZ选项;嫌麻烦的话,也可以直接编辑.config文件,添加一行CONFIG_CMD_BOOTZ=y。 - 重新编译U-Boot(用多线程加速):
make -j$(nproc) - 把编译好的
u-boot.bin替换到树莓派的启动分区,重启进入U-Boot,就能看到bootz命令了。
三、不用重新编译:用booti命令替代
如果你暂时不想折腾编译,其实booti命令完全可以用来启动ARM64架构的zImage(树莓派3B+是ARM64),用法和bootz几乎一致:
假设你已经通过TFTP把zImage加载到内存地址0x80000,设备树文件加载到0x1000000,直接执行:
booti 0x80000 - 0x1000000
这里的-代表没有ramdisk,如果有ramdisk的话,把-换成ramdisk所在的内存地址就行。
四、适配Buildroot+U-Boot的最新配置
如果你用Buildroot构建整个嵌入式系统,直接在Buildroot里配置U-Boot就行:
- 打开Buildroot的配置菜单:
make menuconfig - 进入
Bootloaders > U-Boot,确认选中了树莓派3B+的U-Boot配置(rpi_3_b_plus_defconfig)。 - 点击
U-Boot configuration进入子菜单,同样找到并开启CONFIG_CMD_BOOTZ选项。 - 重新构建Buildroot,它会自动编译带
bootz命令的U-Boot镜像。
另外提一句:U-Boot 2021.01之后的新版本对树莓派的支持更完善,如果你升级到2023.x或2024.x版本的U-Boot,默认配置可能已经自带bootz命令,兼容性也会更好,可以试试。
内容的提问来源于stack exchange,提问作者brane
相关产品推荐
相关产品推荐

