通常对于手臂系统来说,设备树向内核(Linux)提供硬件信息。这些设备树以 dts(设备树源)文件的形式存在,被编译并加载到内核中。问题是我无权访问这样的dts
文件,甚至无法访问文件dtb
。
我可以访问/sys
并/proc
在机器上,我想问这是否允许我“猜测正确的值”以在 dts 中使用?
如果这个问题的答案也取决于是否首先使用设备树接口(即dtb
创建并提供给内核)而不是更多的黑客“我们只是从香草转移并修补内核以解决仅适用于我们内核的设备信息问题”-解决方案?
答案1
/proc/device-tree
或者/sys/firmware/devicetree/base
/proc/device-tree
/sys/firmware/devicetree/base
是和 的符号链接内核文档说用户态应该坚持/proc/device-tree
:
用户空间不得直接使用 /sys/firmware/devicetree/base 路径,而应遵循 /proc/device-tree 符号链接。绝对路径将来可能会改变,但符号链接是稳定的ABI。
然后您可以从文件访问 dts 属性:
hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency
整数的输出格式是二进制的,因此hexdump
是必需的。
dtc -I fs
从文件系统获取完整的设备树:
sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base
将 dts 输出到 stdout。
也可以看看:如何列出内核设备树| Unix 和 Linux 堆栈交换
dtc
在构建根目录中
Buildroot 有一个BR2_PACKAGE_DTC=y
配置可以放入dtc
根文件系统中。
QEMU-machine dumpdtb
如果您在 QEMU 中运行 Linux,如果您没有使用 显式指定-dtb
,QEMU 会自动生成 DTB,因此它也可以直接使用以下命令转储它:
qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb
如所述:https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html
测试用这个 QEMU + Buildroot 设置在 Linux 内核 v4.19 arm64 上。
答案2
我不确定我的理解是否正确。
如果您所在的系统使用 dtb 启动,则您的设备树应该可以在 debugfs 内访问。
您还可以尝试 Pantelis Antoniou 的 dtc 工具,它们包括从 blob 打印 dts 的 fdtdump 和 fdtget。
如果您根本没有设备树并且没有从 dtb 启动,那么您必须自己检查机器代码并将所有设备特定属性和节点添加到您的 dts。没有为此类引导生成“合成”设备树。起点可以是类似的机器或父机器,然后按您的方式逐个系统地工作。