树莓派4B(8GB)Debian12 64位更换bcm2711-rpi-4-b.dtb后U-Boot启动失败求助
树莓派4B更换DTB文件后U-Boot启动失败问题
系统环境信息
neuberfran@raspberrypi:~$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 12 (bookworm) Release: 12 Codename: bookworm neuberfran@raspberrypi:~$ arch aarch64 neuberfran@raspberrypi:~$ uname -a Linux raspberrypi 6.6.20+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.20-1+rpt1 (2024-03-07) aarch64 GNU/Linux neuberfran@raspberrypi:~$ uname -m aarch64 U-Boot> printenv bootcmd bootcmd=fatload mmc 0 ${kernel_addr_r} kernel8.img;fatload mmc 0 ${fdt_addr} ${fdtfile}; booti ${kernel_addr_r} - ${fdt_addr}
操作步骤
使用搭载Debian 12的树莓派4B,尝试更换bcm2711-rpi-4-b.dtb文件,执行的命令如下:
mkdir rasp_arm64 cd rasp_arm64/ git clone --depth=1 https://github.com/raspberrypi/linux sudo apt-get install qemu-system-arm sudo apt-get install lzop sudo apt-get install gcc-aarch64-linux-gnu cd linux/ make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- mrproper make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs ls -lha arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb -rw-rw-r-- 1 neuuberfran neuuberfran 55K Jul 12 13:02 arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb
config.txt配置内容:
enable_uart=1 kernel=u-boot.bin arm_64bit=1
当前Git分支:
git branch master * my6.6.20
启动报错信息
U-Boot启动阶段出现如下错误:
2024.04-rc4-0004 0-gbd0aedde3e-dirty (Mar 23 2024 - 10:37:01 -0300) DRAM: 948 MiB (effective 7.9 GiB) RPI 4 Model B (0xd03115) Core: 210 devices, 15 uclasses, devicetree: board MMC: mmcnr@7e300000: 1, mmc@7e340000: 0 Loading Environment from FAT... OK In: serial,usbkbd Out: serial,vidconsole Err: serial,vidconsole Net: eth0: ethernet@7d580000 starting USB... No working controllers found Hit any key to stop autoboot: 0 9259827 bytes read in 413 ms (21.4 MiB/s) Failed to load 'broadcom/bcm2711-rpi-4-b.dtb' Uncompressing Kernel Image to 0 Moving Image from 0x80000 to 0x200000, end=1b60000 ERROR: Did not find a cmdline Flattened Device Tree Could not find a valid device tree
问题分析与修复方案
核心问题定位
报错Failed to load 'broadcom/bcm2711-rpi-4-b.dtb'是根源——U-Boot找不到指定路径下的DTB文件,后续设备树验证失败是连锁反应。
具体修复步骤
检查DTB文件路径与环境变量
- 先查看U-Boot中
fdtfile变量的值:U-Boot> printenv fdtfile - 如果输出是
broadcom/bcm2711-rpi-4-b.dtb,需要在SD卡的FAT分区根目录创建broadcom文件夹,将编译好的DTB文件复制进去;如果想直接放在根目录,修改fdtfile变量:U-Boot> setenv fdtfile bcm2711-rpi-4-b.dtb U-Boot> saveenv
- 先查看U-Boot中
确认DTB文件完整性与权限
- 复制DTB到SD卡后,用
md5sum对比本地编译文件和SD卡上的文件,确保传输无损坏:# 本地编译文件校验 md5sum arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb # SD卡挂载目录校验 md5sum /path/to/sdcard/fat/bcm2711-rpi-4-b.dtb - 确保文件权限为可读:
chmod 644 /path/to/sdcard/fat/bcm2711-rpi-4-b.dtb
- 复制DTB到SD卡后,用
调整U-Boot启动命令(可选)
- 若不想修改环境变量,直接修改
bootcmd中的DTB路径:U-Boot> setenv bootcmd 'fatload mmc 0 ${kernel_addr_r} kernel8.img;fatload mmc 0 ${fdt_addr} bcm2711-rpi-4-b.dtb; booti ${kernel_addr_r} - ${fdt_addr}' U-Boot> saveenv
- 若不想修改环境变量,直接修改
验证版本兼容性
- 确保编译的DTB与
kernel8.img基于同一内核分支(当前为my6.6.20),避免版本不兼容导致解析失败。
- 确保编译的DTB与
内容的提问来源于stack exchange,提问作者neuberfran
相关产品推荐
相关产品推荐

