当前位置: 首页 > 科技观察

说说Linux运行时设备树

时间:2023-03-19 17:27:11 科技观察

查看根文件系统中的设备树是一个很好的调试方法。因为很多时候会出现你修改了dts文件,编译了新的dtb,但是之前的dtb还是下载到了板子里,所以检查板子里真实有效的devicetree配置信息很重要。1.设备树原始dtb格式在如下目录,fdt就是我们的设备树*.dtb文件/sys/firmware/fdt//通过命令hexdump-C/sys/可以查看原始dtb文件执行以下命令打开firmware/fdt是16进制方式,如图:这样很难看清真正的配置,可以把fdt弄出来,放到ubuntu里,用那个DTC工具自带Linux源码反编译,查看真实配置。反编译命令为/script/dtc/dtc-Idtb-Odts-oxxx.dtsxxx.dtbDTS为设备树源代码文件,DTB为编译DTS后得到的二进制文件。把.c文件编译成.o需要gcc编译器,那么把.dts编译成.dtb需要什么工具呢?你需要使用DTC工具!反编译也是这个工具,反编译后可以看到很容易查看树的设备,字符串被还原,数字变成十六进制格式。u-boot启动内核时,会将dtb文件的内存地址传递给内核,保留其占用的内存;因此,内核启动后,我们访问内存获取原始dtb。2.设备树目录结构的dtb格式/sys/firmware/devicetree是目录结构表示的dtb文件。根节点对应基目录,每个节点对应一个目录,每个属性对应一个文件:这里可以看到你配置的设备树节点信息,字符串使用cat,数字使用xxd和hexdump命令:3.内核中存在的所有platform_device/sys/devices/platform。注册在c文件中。对于设备树中的platform_device,可以进入/sys/devices/platform//of_node查看其设备树属性。对于带有of_node属性的platform_device,证明是从dtb派生的。注意:/proc/device-tree是一个链接文件,指向/sys/firmware/devicetree/base以上是Linux原生节点,我们可以使用。如果你使用的芯片是某个厂商的,这个厂商在定制的时候会增加一些调试节点,你可以在IC厂商添加的调试节点中方便的查看设备树信息。重要补充:Linux中常用的文件系统有3种:procfs、sysfs、debugfsprocfs:这个文件系统主要用来反馈内核信息,包括系统中所有的中断和进程信息,可以在这里查看。Mountedin/proc/...sysfs:这个文件系统主要是和驱动相关的,会反馈所有的驱动信息,并以目录的形式显示出来。Mountedat/sys/...debugfs:文件系统挂载在/sys/kernel/debug/...,主要用于调试。