设备树快速入门【转】

转自:http://www.pianshen.com/article/274236825/;jsessionid=D90FC6B215155680E0B89A6D060892D4

A devicetree is a data structure for describing hardware.

一个用于描述硬件的数据结构。

https://www.devicetree.org/

基本概念

Dtsi——类似于c语言的头文件

Dts——类似于c语言的源文件

Dtb——类似于c语言的编译产物、二进制文件

使用device tree,用户需要了解自己的硬件配置和系统运行参数,并把这些信息组织成device tree source file。DT是描述系统中的硬件信息,那些可以被动态探测到的硬件设备不需要描述。通过dtc(device tree compiler),可以将dts变成适合机器处理的dtb(device tree blob)。

Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。

设备树主要有三个作用:

1、识别平台单板 2、运行参数配置 3、设备构建

语法

1、设备树语法格式

DT的基本单元是node(节点),这些node被组织成树状结构。每个node包含了若干个property/value,描述node的一些特性。一个设备树只能有一个root node(根节点),其名字必须是‘/’。引用设备树某个节点,可以使用全路径,也可以使用句柄等方式。

一个Node被定义为如下形式:

[label:] node-name[@unit-address] {

[properties [= value] ]

[child nodes]

}

A.[]——表示可选项

B.label:——标签,方便dts文件的引用,通过符号‘&’进行引用

C.node-name——节点名字

D.@unit-addresss——如果node没有reg属性,不需要该选项;如果有就必须和reg第 一个地址相等(The unit-address must match the first address specified in the

reg property of the node——摘自Devicetree Specification Release v0.2,章节2.2.1 Node Names)。Unit-address具体格式和设备挂在哪个bus上相关。比如:对于cpu, 其unit-address就是从0开始编址;如果是串口控制器,其就是寄存器地址。

E.property——设备属性

非标准的属性名字应该以该公司或者组织名称开头,比如:fsl,channel-fifo-len=<?>; zrevmm,vdev = "proxy";

也定义了一些标准的属性:“compatible”,“model”,"device_type"都是用来表示 节点基本信息的,compatible = "virtio,mmio";

F.= value——属性的定义是多种多样的,可以是空值、整型或者字符串。

G.child nodes——和Node格式一样

2、常见属性实例

“compatible”属性是用来匹配驱动的,他的类型是字符串数组,每个字符串表示一种设备的类型,从具体到一般。举个例子就比较清楚了,比如某个串口控制器节点的属性”compatible = “fsl,mpc8641-uart”, “ns16550"“。第一个字符串“fsl,mpc8641-uart”前边部分是厂商(推测是frescale),后边部分是控制器具体型号,这个形式也是规范建议的标准写法。第二个字符串ns16550表示一类符合同一标准的串口控制器,比第一个字符串表示的范围更大。内核匹配驱动时首先看是否有匹配第一个字符串的驱动,如果没有的话再匹配第二个(如果有更多的,依次类推,所以优先匹配前边的)。

"model"属性用来表示设备的型号,用字符串表示,不像"compatible"用多个字符串,只需一个就够了。

"device_type"属性用来表示设备类型,用字符串表示。

@后地址和reg后第一个地址关系说明。它两数值必须得一致。

下面举一个实例节点分析:

对应的dts源码

/{

cpus{

cpu@0{

};

cpu@1{

};

};

memory@0{

};

uart@fe001000{

};

ethernet@fe002000{

};

ethernet@fe003000{

};

};

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/jqh_111/article/details/83212323

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏趣谈前端

基于nodeJS从0到1实现一个CMS全栈项目的服务端启动细节

我们可以去redis官网下载redis安装程序,我主要介绍window和 linux系统下的安装,如果你是其他系统,可以去官网查看相关资料。

9130
来自专栏WalkingCloud

CentOS6中RHCS集群的简单实践

先搭建三台如下CentOS6.9的虚拟主机节点,已配置好双机互信,参考之前文章高可用集群Heartbeat配置实践

9430
来自专栏web秀

JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!

在单线程环境中编程的缺陷以及如何解决这些缺陷来构建健壮的JavaScript UI。按照惯例,在本文的最后,分享5个如何使用async/ wait编写更简洁代码...

7420
来自专栏包子铺里聊IT

Baozi Training Leetcode solution 199:Binary Tree Right Side View

Leetcode solution 199:Binary Tree Right Side View

9130
来自专栏咖啡拿铁

异步技巧之CompletableFuture

在上面的注释中我们能知道Future用来代表异步的结果,并且提供了检查计算完成,等待完成,检索结果完成等方法。简而言之就是提供一个异步运算结果的一个建模。它可以...

10240
来自专栏美团技术团队

JVM CPU Profiler技术原理及源码深度解析

研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈。Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的J...

13620
来自专栏WalkingCloud

CentOS6下配置基于CHAP认证的iSCSI网络存储服务

之前有简单介绍过iscsi网络存储的基本配置CentOS配置iSCSI网络存储服务,下面再详细介绍iSCSI服务端与客户端的常用命令tgtadm和iscsiad...

13720
来自专栏咖啡拿铁

并行化-你的高并发大杀器

想必热爱游戏的同学小时候,都幻想过要是自己要是能像鸣人那样会多重影分身之术,就能一边打游戏一边上课了,可惜漫画就是漫画,现实中并没有这个技术,你要么只有老老实实...

12410
来自专栏前端迷

Babel 的工作原理以及怎么写一个 Babel 插件

在前端圈子里,对于 Babel,大家肯定都比较熟悉了。如果哪天少了它,对于前端工程师来说肯定是个噩梦。Babel 的工作原理是怎样的可能了解的人就不太多了。

18530
来自专栏前端小课堂

前端面试题

2年工作经验出去接受社会的毒打,参与的前端社招的公司和题目的记录如下,后续可能还会有增加,先暂时记录这么多:

12620

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励