设备树详讲

一. DTS 语法

1.1. dts 头文件

1.1.1. 可以使用#include来引用

1.2. 关于/dts-v1/;

1.2.1. 用于dts的版本信息,一般使用/dts-v1/版本

1.3. 设备节点

1.3.1. 分析下图节点

<1>. “/”是跟节点,每个设备树只有一个根节点

<2>.设备树中节点命名格式如下 :

[email protected]
                    有时我们看到的是:label: [email protected];引入 label 的目的就是为了方便访问节点 比如通过&cpu0 就可以访问“[email protected]”这个节点,上图的chosen,memory都属于label。
             <3>. 每个节点都有不同属性,不同的属性又有不同的内容,属性都是键值对,值可以为空或任意的字节流。设备树源码中常用的几种数据形式:字符串,u32,数组

1.3.2. 标准属性

1.3.2.1. compatible 属性

compatible 属性也叫做“兼容性”属性,这是非常重要的一个属性! compatible 属性的值是 一个字符串列表, compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序 ,compatible 属性的值格式 :"manufacturer,model" ,例如:

compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";   //此compatible是有两个属性,用分号隔开

PS:根节点“/” 下的compatible 属性 用于查看是否支持此设备 ,取代设备ID。在没有使用设备树以前, uboot 会向 Linux 内核传递一个叫做 machine id 的值, machine id
也就是设备 ID

1.3.2.2. model属性

model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的,例如:model = "wm8960-audio";
           1.3.2.3. status属性

status 属性看名字就知道是和设备状态有关的, status 属性值也是字符串,字符串是设备的状态信息,可选的状态如下

1.3.2.4. #address-cells和#size-cells属性

这两个属性的值都是无符号 32 位整形, #address-cells 和#size-cells 这两个属性可以用在 任何拥有子节点的设备中,用于描述子节点的地址信息,直接上示例

/ {
    #address-cells = <0x2>; // 在root node下使用2个u32来代表address。
    #size-cells = <0x1>; // 在root node下使用1个u32来代表size。
    ...
    ...
    memory { // memory device
        ...
        reg = <0x90000000 00000000 0x800000>;
            // 0x90000000 00000000 是存取memory的address
            // 0x800000 是memory的size。
        ...
    };
    ...
    ...
}

1.3.2.5. reg属性

reg 属性前面已经提到过了, reg 属性的值一般是(address, length)对。 reg 属性一般用于描述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息

1.3.2.6. device_type属性

device_type 属性值为字符串, IEEE 1275 会用到此属性,用于描述设备的 FCode,但是设备树没有 FCode,所以此属性也被抛弃了。此属性只能用于 cpu 节点或者 memory 节点。imx6ull.dtsi 的 cpu0 节点用到了此属性

1.3.3. 向节点追加或修改

1.3.3.1. 先看一下 I2C1 接口对应的节点,打开文件 imx6ull.dtsi 文件,找到如下所示内容:

如果我们要添加直接的具体设备(mag311)以及修改参数,我们可以定义自己的dts文件,只要文件中#include “imx6ull.dtsi ”,

1.4. 文件系统中查看设备树属性

原文地址:https://www.cnblogs.com/linux-37ge/p/12617004.html

时间: 2024-08-01 20:02:39

设备树详讲的相关文章

Linux设备树语法详解

Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写.引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码.比如在ARM Linux内,一个.dts(device tree source)文件对应一个ARM的machine,一般放置在内核的

Linux设备树语法详解【转】

本文转载自:http://www.cnblogs.com/xiaojiang1025/p/6131381.html 概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写.引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码.比如在AR

我眼中的Linux设备树(四 中断)

四 中断 中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设备的中断源称之为中断控制器中对应中断的子中断.一般情况中断产生设备数量要多于中断控制器,多个中断产生设备的中断都由一个中断控制器处理,这种多对一的关系也很像一个树形结构,所以在设备树中,中断也被描述成树,叫中断树.以下表述的时候为了明确是在说中断树,在父节点和子节点前边我们都加上“中断”二字,是为

基于tiny4412的Linux内核移植 -- 设备树的展开

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

Linux内核 设备树操作常用API【转】

本文转载自:http://www.cnblogs.com/xiaojiang1025/p/6368260.html Linux设备树语法详解一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在"include/of.h"中声明. device_node 内核中用下面的这个结构描述设备树中的一个节点,后面的API都需要一个device_node对象作为参数传入. //include/of.h 46 struct device_node { 47 con

我眼中的Linux设备树(二 基础规范概述)

二 基础规范概述 DTS(Device tree syntax,另一种说法是Device tree source)是设备树源文件,为了方便阅读及修改,采用文本格式.DTC(Device tree compiler)是一个小工具,负责将DTS转换成DTB(Device tree blob).DTB是DTS的二进制形式,供机器使用.使用中,我们首先根据硬件修改DTS文件,然后在编译的时候通过DTC工具将DTS文件转换成DTB文件,然后将DTB文件烧写到机器上(如emmc,磁盘等存储介质).系统启动时

imx6设备树pinctrl解析【转】

转自:http://blog.csdn.net/michaelcao1980/article/details/50730421 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下. 1.普通设置 在配置串口时,pinctrl的配置信息如下所示: &uart2 { pinctrl-names = ; ; //........ }; 这

线段树详解 (原理,实现与应用)

线段树详解 By 岩之痕 目录: 一:综述 二:原理 三:递归实现 四:非递归原理 五:非递归实现 六:线段树解题模型 七:扫描线 八:可持久化 (主席树) 九:练习题 一:综述 假设有编号从1到n的n个点,每个点都存了一些信息,用[L,R]表示下标从L到R的这些点. 线段树的用处就是,对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是O(log2(n)). 线段树的原理,就是,将[1,n]分解成若干特定的子区间(数量不超过4*n),然后,将每个区间[L,R]都分解为 少量特定的子区

设备树机制

转自:http://blog.csdn.net/machiner1/article/details/47805069,转载仅供个人参考. ------------------Based on linux 3.10.24 source code 参考/documentation/devicetree/Booting-without-of.txt文档 目录 1. 设备树(Device  Tree)基本概念及作用 2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DTB