Linux 设备树是一个关键的系统组件,在嵌入式设备中扮演着至关重要的角色。然而,对于初学者来说,设备树的概念和用法可能十分晦涩难懂。本文将为您详细介绍 Linux 设备树的原理以及如何在实践中使用它。
在根文件系统中查看设备树,是一种不错的调试手段。因为很多时候会出现你修改了 dts 文件,并且也编译了新的 dtb,但是下载到板子上的还是以前的 dtb,因此查看板子中真实生效的设备树配置信息是很重要的。
1、设备树原始 dtb 格式
在如下目录,fdt 就是我们的 设备树*.dtb文件
/sys/firmware/fdt //原始dtb文件
执行以下指令可看
hexdump -C /sys/firmware/fdt
这个命令打开后是十六进制模式,如图:
这样是很难看到真实配置的,可以把 fdt 弄出来,放到 ubuntu 中,使用 Linux 源码自带的 DTC 工具反编译,查看真实的配置。反编译命令为:
/script/dtc/dtc -I dtb -O dts -o xxx.dts xxx.dtb
DTS 是设备树源码文件,DTB 是将 DTS 编译以后得到的二进制文件。将 .c 文件编译为 .o 需要用到 gcc 编译器,那么将.dts 编译为.dtb 需要什么工具呢?需要用到 DTC 工具!反编译也是这个工具,反编译后可以看到方便查看的设备树,字符串会恢复,数字会变成十六进制格式。
在 u-boot 启动内核时,会将 dtb 文件的内存地址传递给内核,并将其所占内存保留;因此,我们在内核启动后,访问该内存,获得原始的 dtb。
2、设备树目录结构 dtb 格式
/sys/firmware/devicetree
以目录结构程现的 dtb 文件, 根节点对应 base 目录, 每一个节点对应一个目录, 每一个属性对应一个文件:
在这里你就可以看到你配置的设备树节点信息,字符串使用 cat,数字使用 xxd 、hexdump 命令:
3、内核中现存的所有 platform_device
/sys/devices/platform
系统中所有的 platform_device, 有来自设备树的, 也有来有 .c 文件中注册的。
对于来自设备树的 platform_device,可以进入 /sys/devices/platform//of_node 查看它的设备树属性。
对于有 of_node 属性的 platform_device,证明其来源于 dtb。
note:/proc/device-tree 是链接文件, 指向 /sys/firmware/devicetree/base
以上是 Linux 原生的节点,可以供我们使用。如果你用的芯片是某个厂家,这个厂家客制化的时候会增加一些调试节点,你可以很方便的在 IC 厂商增加的调试节点中查看设备树信息。
重要补充:
Linux 常用的文件系统有三个:procfs、sysfs、debugfs
procfs:该文件系统主要用来反馈内核的信息,包括系统中所有的中断、进程信息都可以在这里查看。挂载在 /proc/…
sysfs:该文件系统主要是和驱动强相关,会反馈所有的驱动信息,以目录形式显示。挂载在 /sys/…
debugfs:该文件系统挂载在 /sys/kernel/debug/… ,主要用来 debug。
Linux 设备树的底层原理和应用方法都需要我们认真学习和深入探究。在实际嵌入式系统开发过程中,熟练掌握设备树相关知识和技巧,能够极大地提升我们的工作效率和系统性能。本文总结了 Linux 设备树的基本概念、语法、编译和使用方法,同时提供了一些实际案例来展示如何在实践中使用设备树。希望本文能够帮助您更好地理解和运用 Linux 设备树技术。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !