实战指南hardware-interfaces
只读检查 Raspberry Pi 运行时设备树
从 /proc/device-tree 只读查看板卡型号、compatible 和节点结构,不修改启动配置。
只读确认内核本次启动实际收到的设备树,查看板卡型号、兼容字符串和顶层节点,不写入 DTB、overlay 或任何启动配置。
- Raspberry Pi 已启动 Linux,并有普通用户 Shell。
- 系统挂载了 procfs,且
/proc/device-tree可读。 - 本指南不要求
sudo,也不会编辑/boot/config.txt、/boot/firmware/config.txt或 EEPROM。
-
确认运行时设备树存在,并解析实际目录:
Terminal window if [[ -e /proc/device-tree ]]; thenDT_ROOT="$(readlink -f /proc/device-tree)"test -d "$DT_ROOT" && printf 'DT root: %s\n' "$DT_ROOT"elseprintf '%s\n' '当前系统未提供 /proc/device-tree' >&2fi只有命令成功输出
DT root后才继续;路径不存在时停止本指南,不要在当前交互式 Shell 中执行exit。 -
字符串属性以空字符结尾,读取时去掉空字符并补换行:
Terminal window tr -d '\000' < "$DT_ROOT/model"printf '\n'tr '\000' '\n' < "$DT_ROOT/compatible" -
只列出两层节点,避免一次输出整个树:
Terminal window find "$DT_ROOT" -maxdepth 2 -type d -print | sort | sed -n '1,80p' -
数值属性不是文本,使用十六进制查看原始字节:
Terminal window od -An -tx1 -v "$DT_ROOT/#address-cells"od -An -tx1 -v "$DT_ROOT/#size-cells"
model输出应与实际 Raspberry Pi 型号一致。compatible通常输出从具体到通用的多个字符串。- 顶层通常包含
chosen、cpus、memory或soc等节点,但具体名称取决于设备树版本和板卡。 #address-cells与#size-cells的原始值是大端 32 位 cell,不能按普通十进制文本读取。
所有命令都只读,没有系统变更。可清除本次 Shell 变量:
unset DT_ROOT| 现象 | 检查 | 处理 |
|---|---|---|
| 路径不存在 | test -e /proc/device-tree |
确认运行的是支持设备树的目标内核,并检查 procfs 是否挂载。 |
| 字符串挤在提示符前 | 是否直接使用了 cat |
用 tr 去除空字符,再显式输出换行。 |
| 属性看起来是乱码 | 属性是否为 cell、字节数组或 phandle | 使用 od 查看原始字节,并按对应 binding 解码。 |
| 节点与 DTS 不一致 | 是否启用了 overlay | 运行时树可能已由固件或引导加载器合并和修正,应以本次启动结果为准。 |
- 概念:设备树、嵌入式 Linux 启动链
- 命令:cat、sed