跳转到内容
实战指南hardware-interfaces

只读检查 Raspberry Pi 运行时设备树

从 /proc/device-tree 只读查看板卡型号、compatible 和节点结构,不修改启动配置。

状态
已审阅
难度
进阶
风险
只读 / 低风险
平台
linux · raspberry-pi · raspberry-pi-os

只读确认内核本次启动实际收到的设备树,查看板卡型号、兼容字符串和顶层节点,不写入 DTB、overlay 或任何启动配置。

  • Raspberry Pi 已启动 Linux,并有普通用户 Shell。
  • 系统挂载了 procfs,且 /proc/device-tree 可读。
  • 本指南不要求 sudo,也不会编辑 /boot/config.txt/boot/firmware/config.txt 或 EEPROM。
  1. 确认运行时设备树存在,并解析实际目录:

    Terminal window
    if [[ -e /proc/device-tree ]]; then
    DT_ROOT="$(readlink -f /proc/device-tree)"
    test -d "$DT_ROOT" && printf 'DT root: %s\n' "$DT_ROOT"
    else
    printf '%s\n' '当前系统未提供 /proc/device-tree' >&2
    fi

    只有命令成功输出 DT root 后才继续;路径不存在时停止本指南,不要在当前交互式 Shell 中执行 exit

  2. 字符串属性以空字符结尾,读取时去掉空字符并补换行:

    Terminal window
    tr -d '\000' < "$DT_ROOT/model"
    printf '\n'
    tr '\000' '\n' < "$DT_ROOT/compatible"
  3. 只列出两层节点,避免一次输出整个树:

    Terminal window
    find "$DT_ROOT" -maxdepth 2 -type d -print | sort | sed -n '1,80p'
  4. 数值属性不是文本,使用十六进制查看原始字节:

    Terminal window
    od -An -tx1 -v "$DT_ROOT/#address-cells"
    od -An -tx1 -v "$DT_ROOT/#size-cells"
  • model 输出应与实际 Raspberry Pi 型号一致。
  • compatible 通常输出从具体到通用的多个字符串。
  • 顶层通常包含 chosencpusmemorysoc 等节点,但具体名称取决于设备树版本和板卡。
  • #address-cells#size-cells 的原始值是大端 32 位 cell,不能按普通十进制文本读取。

所有命令都只读,没有系统变更。可清除本次 Shell 变量:

Terminal window
unset DT_ROOT
现象 检查 处理
路径不存在 test -e /proc/device-tree 确认运行的是支持设备树的目标内核,并检查 procfs 是否挂载。
字符串挤在提示符前 是否直接使用了 cat tr 去除空字符,再显式输出换行。
属性看起来是乱码 属性是否为 cell、字节数组或 phandle 使用 od 查看原始字节,并按对应 binding 解码。
节点与 DTS 不一致 是否启用了 overlay 运行时树可能已由固件或引导加载器合并和修正,应以本次启动结果为准。