设备树文本文件(.dts)的编写顺序是否完整?
例如,如果从文件顶部取一个节点并将其移到底部,它是否会改变硬件检测,IRQ配置等等的顺序?
答案 0 :(得分:1)
设备树文本文件(.dtx)的编写顺序是否完整?
.dts 和 .dtsi 源文件的答案为"取决于"。
设备树具有结构,因此重新排列节点可能会也可能不会改变系统硬件配置。
总体而言,设备树具有诸如(Device Tree for Dummies的幻灯片23)
之类的结构/ {
aliases { ... };
cpus { ... };
apb@80000000 {
apbh@80000000 {
/* Some devices */
};
apbx@80040000 {
/* Some devices */
};
};
ahb@80080000 {
/* Some devices */
};
};
设备将由节点描述 连接到特定总线的设备节点(例如,apbh @ 80000000)可以通过设备地址以数字方式排序,或者按设备名称按字母顺序排序。节点(在总线内)的这种排序并不重要 但是如果"你从文件顶部取一个节点并将其移到底部" 并将节点重新分配到另一个总线,那么显然你会定义一个不同的配置(可能不正确)。
设备树源文本的文件结构由 .dts 文件(用于电路板)和可选的 .dtsi 文件组成。理想情况下,SoC的 .dtsi 文件应该是通用的,并且可以包含在使用该SoC的每个 .dts 电路板文件中。
SoC的 .dtsi 文件通常由供应商提供,并且应该具有所有芯片设备的定义。将定义和启用基本设备(例如,电源管理,DMA控制器)。但是,非必需的可选外围设备和/或I / O连接到多路复用引脚的外围设备将被禁用。
apbh@80000000 {
[...]
hsadc: hsadc@80002000 {
reg = <0x80002000 0x2000>;
[...]
status = "disabled";
};
[...]
};
如果您想在电路板上使用可选外围设备,则不应仅为您的电路板修改或自定义SoC .dtsi 文件。
相反,您应该在顶级电路板文件(包括SoC .dtsi 文件)中扩充该设备的节点,并重新声明设备的状态。
#include "my_soc.dtsi"
/ {
apb@80000000 {
apbh@80000000 {
hsadc: hsadc@80002000 {
status = "okay";
};
[...]
};
};
};
要获得正确的配置,具有status = "okay"
的此节点必须位于通用节点之后(包含在 .dtsi 中),以便status = "disabled"
可以覆盖。
很明显,这是位置依赖的另一种情况。
我的意思是,例如,如果你从文件顶部取一个节点并将其移到底部,它会改变硬件检测,irq配置或其他什么顺序吗?
设备树仅用于定义系统硬件的配置。设备驱动程序的执行顺序由驱动程序的构建方式控制,即 initcall 宏。请参阅init function invocation of drivers compiled into kernel和What is the difference between module_init and subsys_initcall while initializing the driver?
设备驱动程序对资源的获取受该驱动程序的控制,而不是由设备树属性引导,这些属性仅由驱动程序读取。