[摘要]:本文主要介绍了在设备树中删除节点(node)和属性(property)的方法。为了便于理解,笔者先介绍了 dtsi 和 dts 的关系,然后构建了虚拟的需求场景,最终给出示例。
背景知识
设备树文件可以分为 dtsi 和 dts 两种类型。dtsi 类似于 C 语言中的头文件,供其他设备树文件引用,而 dts 则是与嵌入式设备对应,直接用于编译成内核使用的 dtb 文件。
以意法半导体的 STM32MP15x 系列芯片为例:
-
首先,ST 基于基础的 STM32MP151 芯片创建了 stm32mp151.dtsi 文件。在该文件中,使用设备树详细描述了芯片内部的硬件资源。
-
第二,STM32MP153 芯片和 STM32MP151 芯片的硬件资源大部分都相同,只有少量差别。所以,ST 在创建的 stm32mp153.dtsi 中直接通过
#include "stm32mp151.dtsi"
引入了 stm32mp151.dtsi 文件,然后在此基础上根据 STM32MP153 的实际硬件资源对设备树进行少量修改。 -
第三,STM32MP157 芯片和 STM32MP153 芯片的硬件资源大部分都相同,只有少量差别。所以,ST 在创建的 stm32mp157.dtsi 中直接通过
#include "stm32mp153.dtsi"
引入了 stm32mp153.dtsi 文件,然后在此基础上根据 STM32MP157 的实际硬件资源对设备树进行少量修改。 -
第四,ST 基于 STM32MP157 设计了给客户的评估板,于是创建了 stm32mp157a-ed1.dts 文件,并通过
#include "stm32mp157.dtsi"
引入了 STM32MP157 芯片的所有资源信息,然后在此基础上根据评估板的实际硬件资源进行少量修改。 -
最终,我们将 stm32mp157a-ed1.dts 编译成 stm32mp157a-ed1.dtb 文件,供 Linux 内核使用。
从上面的流程我们可以看出,有了 dtsi 文件之后,后面的每一步都只需要基于之前的 dtsi 进行少量修改即可,极大地减少了我们的工作量。
需求场景
假设我们现在基于 STM32MP157 芯片设计了一款自己的开发板,然后创建了 stm32mp157a-myboard.dts,并通过#include "stm32mp157.dtsi"
引入了 STM32MP157 芯片的资源信息。
此时我们发现 stm32mp157.dtsi 中的 gpu 节点和 dsi 节点中的 phy-dsi-suppry 属性用不到,想要删掉,应该怎么做?
有人可能会选择直接修改 stm32mp157.dtsi 文件,把不需要的东西删掉。但是,这可能会导致其他引用 stm32mp157.dtsi 文件的 dts 无法正常工作。
所以,我们现在需求就是:不修改 stm32mp157.dtsi 文件,直接在 stm32mp157a-myboard.dts 文件中删掉 gpu 节点和 dsi 节点中的 phy-dsi-suppry 属性。
删除节点
说明:设备树节点都由 status 属性,在不使用该节点的时候只要将 status 属性配置为 disabled 即可。本节仅仅是为了展示 /delete-node/ 的用法。
-
语法
/delete-node/ node-name; /delete-node/ &label;
-
示例
对于 gpu 节点,它的节点名(node-name)是 gpu@59000000,标签(label)是 gpu。删除该节点的两种方式如下:
/delete-node/ gpu@59000000;
/delete-node/ &gpu;
删除属性
-
语法
/delete-property/ property-name;
-
示例文章来源:https://www.toymoban.com/news/detail-731704.html
说明:该示例仅用于展示 /delete-propery/ 的用法,实际删除 phy-dsi-suppry 之后可能会导致 dsi 硬件不能工作。文章来源地址https://www.toymoban.com/news/detail-731704.html
&dsi { /delete-property/ phy-dsi-suppry; };
到了这里,关于Linux设备树:删除节点和属性的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!