是否可以使用正在运行的内核的/ sys获取设备树的信息?


20

通常对于手臂系统,设备树将硬件信息提供给内核(Linux)。这些设备树作为dts(设备树源)文件存在,这些文件已编译并加载到内核中。问题是我无权访问此类dts文件,甚至无法访问dtb文件。

我有机会获得/sys/proc机器,我想问问,让我来“猜测正确的价值观”在DTS中使用?

如果这个问题的答案还取决于是否首先使用了设备树接口(即a dtb已创建并提供给内核),而不是更多的黑客攻击,那么潜在的答案可能会进一步突出方面。并修补内核,以便仅针对我们的内核“解决方案”解决设备信息问题?


您有权访问启动映像吗?您可以从那里提取设备树。我能帮上忙。
phk

Answers:


27

/proc/device-tree 要么 /sys/firmware/devicetree/base

我认为两者都是别名,/sys/firmware/devicetree/base可能是在驯服之后的更好选择/proc

然后,您可以从文件访问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中

Buildroot有一个BR2_PACKAGE_DTC=y配置可放入dtc根文件系统中。

量化宽松 -machine dumpdtb

如果您在QEMU中运行Linux,则如果未使用显式提供DTB,则QEMU会自动生成DTB -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所述

在Linux内核v4.19 arm64上使用此QEMU + Buildroot安装程序进行了测试。


4

我不确定我是否正确理解您。

如果您使用的是使用dtb引导的系统,则应在debugfs中访问设备树。

您也可以尝试Pantelis Antoniou的dtc工具,其中包括fdtdump和fdtget,它们可以从blob中打印dts。

如果您根本没有设备树,也没有从dtb引导启动,那么您必须亲自检查机器代码,并将所有设备特定的属性和节点添加到dts中。没有为此类引导生成“合成”设备树。起点将是一台相似的机器或父计算机,然后逐个系统地工作。


谢谢,澄清一下。有一个机会,dtb可以通过通过debugfs是可访问但将依靠CONFIG_DEBUG_FS.config即使组仍然在单纯心血来潮,他们实际上使用的dtb,开始时,我看这份材料?因此,由于运气不好,他们都没有使用设备树接口的某种直接内核修补程序,对吗?因此,这将意味着万不得已的机器代码,因为它们违反了GPLv2并关闭了内核的源代码,对吗?
人类与和平

是的,前两个是。最后,IANAL,但是机器arch / ??? / mach-??? / board-???。c将包含较旧内核中的机器所存在的特殊设备。这应该由GPL承保,并且必须收费。单个设备驱动程序可能是封闭源代码,在那儿没有违规行为。
FRob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.