在Linux dtsi文件中删除一个Node

介绍

DTS(Device Tree Source)文件是对嵌入式设备硬件信息的描述。
由于一个SoC可能对应多个Machine(一个SoC可以对应多个产品和电路板),势必这些.dts文件需包含许多共同的部分,根据软件设计中“抽象”的思想。Linux把SoC公用的部分或者多个machine共同的部分一般提炼为.dtsi,类似于C语言的头文件。

笔者目前在做的项目对此深有体会,使用一种SoC开发2款产品,每款产品的硬件设计相似,但又有不同;甚至每款产品硬件的不同版本也有差异。这种情况下使用dtsi文件就非常方便了,把相同的部分提取出来,不同的部分彼此划分成独立的文件,非常易于维护。

dtsi在实际应用中有另一种常见的应用场合。嵌入式开发中,通常会得到SoC厂商的EVB板,以及EVB板配套的BSP,用于开发。而实际的产品中,硬件与EVB的硬件是不同的,但会参考EVB的设计,有一定的相似度;BSP方面通常是根据EVB板的BSP进行修改,定制成实际产品的BSP。EVB板的BSP往往会把dts共同的部分提取成dtsi,定制工作就是加入实际产品的dts,并根据实际情况修改dtsi中的配置。

本文主要介绍一下如何在dts中删除一个节点(Node)。

删除Node

删除节点的语法如下:
/delete-node/ 节点名;

以一个例子介绍如何删除设备节点。

EVB板中的内存配置是2GB:DDR0 1GB + DDR1 1GB
xxxx.dtsi,

    memory_DDR0@80000000 {
        device_type = "memory";
        reg = <0 0x80000000 0 0x40000000>;
    };

    memory_DDR1@c0000000 {
        device_type = "memory";
        reg = <0 0xc0000000 0 0x40000000>;
    };

而实际产品是1GB的内存配置,所以需要删除DDR1的1GB,只保留DDR0上的1GB
在dts文件中包含dtsi文件

xxxx-custom.dts

#include "xxxx.dtsi"

/ {
    /delete-node/ memory_DDR1@c0000000;
};

注意:如果节点中有地址信息,也需要加上。(本例中的@c0000000)

参考资料

DTS修改 http://blog.csdn.net/bob_fly1984/article/details/51672994
Device Tree Customization http://developer.toradex.cn/device-tree-customization
ARM Linux 3.x的设备树(Device Tree) http://blog.csdn.net/21cnbao/article/details/8457546

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值