对于linux3.0之后,linux内核支持了设备树“这个家伙”,刚接触Device Tree的人,一开始会比较迷茫,不知道怎么用,他究竟有多强大。作者刚接触的时候也是一样,在我之前的一篇文章《linux 设备树与驱动的关系》中,将早先时候的设备模块与现在的设备树的区别进行了比较。作者在这里也说说我在学习一点小经验:
1.了解设备树的用意。
2.多看别人优秀的代码,看看别人的设备树和驱动是如何匹配的。
3.动手写一些驱动+设备树。实现一些功能。
《基本数据格式》
设备树是一个包含节点和属性的简单树状结构。属性就是键-值对,而节点可以同时包含属性和子节点。例如,以下就是一个 .dts 格式的简单树:
/ {
node1 {
a-string-property = "A string";
a-string-list-property = "first string", "second string";
a-byte-data-property = [0x01 0x23 0x34 0x56];
child-node1 {
first-child-property;
second-child-property = <1>;
a-string-property = "Hello, world";
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
这棵树显然是没什么用的,因为它并没有描述任何东西,但它确实体现了节点的一些属性:
1. 一个单独的根节点:“/”
2. 两个子节点:“node1”和“node2”
3. 两个 node1 的子节点:“child-node1”和“child-node2”
4. 一堆分散在树里的属性
属性是简单的键-值对,它的值可以为空或者包含一个任意字节流。虽然数据类型并没有编码进数据结构,但在设备树源文件中仍有几个基本的数据表示形式:
1.文本字符串(无结束符)可以用双引号表示:
string-property = "a string"
2. ‘Cells’是 32 位无符号整数,用尖括号限定:
cell-property = <0xbeef 123 0xabcd1234>
3. 二进制数据用方括号限定:
binary-property = [0x01 0x23 0x45 0x67];
4. 不同表示形式的数据可以使用逗号连在一起:
mixed-property = "a string", [0x010x23 0x45 0x67], <0x12345678>;
5.逗号也可用于创建字符串列表:
string-list = "red fish", "bluefish";
内容参考资料书写。
本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!