在Linux dtsi文件中删除一个Node
介绍DTS(Device Tree Source)文件是对嵌入式设备硬件信息的描述。由于一个SoC可能对应多个Machine(一个SoC可以对应多个产品和电路板),势必这些.dts文件需包含许多共同的部分,根据软件设计中“抽象”的思想。Linux把SoC公用的部分或者多个machine共同的部分一般提炼为.dtsi,类似于C语言的头文件。笔者目前在做的项目对此深有体会,使用一种SoC开发2款产品
介绍
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)