You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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文件,后续设备树验证失败是连锁反应。

具体修复步骤

  1. 检查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
      
  2. 确认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
      
  3. 调整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
      
  4. 验证版本兼容性

    • 确保编译的DTB与kernel8.img基于同一内核分支(当前为my6.6.20),避免版本不兼容导致解析失败。

内容的提问来源于stack exchange,提问作者neuberfran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:23:12