设计和编写设备树绑定的注意事项¶
这是关于绑定设计的一些常见审查反馈项列表。每条规则都有例外,并且绑定有很多灰色地带。
有关补丁的指南,请参阅提交设备树 (DT) 绑定补丁
总体设计¶
**应该** 尝试使绑定完整,即使驱动程序不支持某些功能。例如,如果设备有中断,则应包含 ‘interrupts’ 属性,即使驱动程序仅处于轮询模式。
**不要** 在绑定中引用 Linux 或“设备驱动程序”。绑定应基于硬件的功能,而不是操作系统和驱动程序当前支持的功能。
**应该** 使用与设备类别匹配的节点名称。许多标准名称在 DT 规范中定义。如果没有,请考虑添加它。
**应该** 检查示例是否与文档匹配,尤其是在进行审查更改后。
**不要** 仅仅为了实例化驱动程序而创建节点。多功能设备只有在子节点具有自己的 DT 资源时才需要子节点。单个节点可以是多个提供者(例如,时钟和复位)。
**不要** 单独使用 ‘syscon’ 而不使用特定的兼容字符串。 ‘syscon’ 硬件块应该有一个足够独特的兼容字符串,以推断整个块的寄存器布局(至少)。
属性¶
**应该** 使 ‘compatible’ 属性具体化。**不要** 在兼容字符串中使用通配符。当设备与以前的实现相同或为以前实现的子集时,**应该** 使用回退兼容。如果存在新功能或错误,**应该** 添加新的兼容字符串。
**应该** 在设备特定的属性名称上使用供应商前缀。考虑一下属性是否在同一类别的设备之间通用。检查其他现有绑定是否有类似的设备。
**不要** 重新定义通用属性。只需引用定义并定义特定于设备的约束。
**应该** 对具有科学单位的属性使用通用属性单位后缀。推荐的后缀列在https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/property-units.yaml
**应该** 根据约束定义属性。有多少条目?可能的值是什么?顺序是什么?
典型情况和注意事项¶
Phandle 条目,如时钟/dma/中断/复位,应始终显式排序。如果存在多个 phandle,则应包含 {clock,dma,interrupt,reset}-names。使用时,这两个字段都需要相同的约束(例如,项目列表)。
对于 {clock,dma,interrupt,reset}-names 中使用的名称,不要添加任何后缀,例如: “tx” 而不是 “txirq”(用于中断)。
没有模式类型的属性(例如,没有标准后缀或未由模式定义)需要类型,即使这是一个枚举。
如果模式包含其他模式(例如 /schemas/i2c/i2c-controller.yaml),则使用 “unevaluatedProperties:false”。在其他情况下,通常使用 “additionalProperties:false”。
对于较大设备的子块/组件(例如,SoC 块),应使用基于设备的兼容(例如,基于 SoC 的兼容),而不是该组件的自定义版本控制。例如,使用 “vendor,soc1234-i2c” 而不是 “vendor,i2c-v2”。
“syscon” 不是通用属性。使用供应商和类型,例如 “vendor,power-manager-syscon”。
板/SoC .dts 文件¶
**应该** 将所有 MMIO 设备放在总线节点下,而不是在顶层。
**应该** 使用非空的 ‘ranges’ 来限制子总线/设备的大小。64 位平台不需要所有设备都具有 64 位地址和大小。