Linux设备树:删除节点和属性的方法

[摘要]:本文主要介绍了在设备树中删除节点(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;
    
  • 示例

    说明:该示例仅用于展示 /delete-propery/ 的用法,实际删除 phy-dsi-suppry 之后可能会导致 dsi 硬件不能工作。

    &dsi {
    	/delete-property/ phy-dsi-suppry; 
    };
    
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux设备树(Device Tree)是一种描述硬件设备布局和配置的数据结构,用于在Linux内核中动态管理和配置硬件设备的驱动程序。它提供了一个统一的方法来表示嵌入式系统中的硬件组件,包括处理器、外设、总线、中断控制器等。 深入理解Linux设备树是很有必要的,因为它是嵌入式系统开发中的重要工具。首先,设备树的概念是为了解决硬件平台多样性而引入的。在传统的内核开发中,驱动程序需要直接依赖具体的硬件地址和寄存器等信息。而设备树将这些信息从内核中分离出来,使得驱动程序可以更加通用和可移植。 其次,设备树的组织结构是由树状层次结构构成的,每个节点表示一个硬件设备或者一个硬件组件。通过使用设备树,我们可以清晰地查看硬件系统的拓扑结构,从而更好地了解每个硬件组件之间的关系。这为开发人员在驱动程序中配置和操作设备提供了便利。 另外,设备树还具有描述硬件设备属性的功能。每个设备节点都可以附加属性,包括设备的ID、中断控制器、寄存器地址等。通过这些属性,驱动程序可以根据设备树的描述动态地注册和配置硬件设备,而不需要在驱动程序中硬编码具体的硬件信息。 最后,设备树的编写和更新是由开发人员来完成的。在设备树中,我们可以定义新的硬件设备节点,修改或删除原有的节点,以及添加和修改设备的属性。这为嵌入式系统的硬件配置和调试提供了强大的灵活性和可维护性。 综上所述,深入理解Linux设备树对于嵌入式系统开发者而言至关重要。它是驱动程序和硬件设备之间的桥梁,提供了一种灵活的硬件配置和管理方式。通过学习和掌握设备树的原理和使用方法,我们可以更好地开发和调试嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值