前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 设备树详解-基本数据格式《Rice linux 学习开发》

linux 设备树详解-基本数据格式《Rice linux 学习开发》

作者头像
Rice加饭
发布2022-05-09 21:19:37
5730
发布2022-05-09 21:19:37
举报
文章被收录于专栏:Rice嵌入式Rice嵌入式

对于linux3.0之后,linux内核支持了设备树“这个家伙”,刚接触Device Tree的人,一开始会比较迷茫,不知道怎么用,他究竟有多强大。作者刚接触的时候也是一样,在我之前的一篇文章《linux 设备树与驱动的关系》中,将早先时候的设备模块与现在的设备树的区别进行了比较。作者在这里也说说我在学习一点小经验:

1.了解设备树的用意。

2.多看别人优秀的代码,看看别人的设备树和驱动是如何匹配的。

3.动手写一些驱动+设备树。实现一些功能。

《基本数据格式》

设备树是一个包含节点和属性的简单树状结构。属性就是键-值对,而节点可以同时包含属性和子节点。例如,以下就是一个 .dts 格式的简单树:

代码语言:javascript
复制
/ {
    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";

内容参考资料书写。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档