| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 42.设备树---DTS的语法 -> 正文阅读 |
|
[系统运维]42.设备树---DTS的语法 |
?Device Tree Usage - 摩斯电码 - 博客园 设备树dts/dtsi格式_孤独行者的专栏-CSDN博客_dts格式 [DTS]设备树语法_嵌入式软件开发交流-CSDN博客_dts设备树语法 目录 2.属性值?[properties definitions]? “&” 引用节点(比如这个设备树include了其他的设备树文件,其他设备树文件里有个ABC节点,&ABC就可以引用这个节点并添加新的属性了) 仿照别人的自己写写改改加深印象 ?DTS文件和DTSI文件dts文件是用户编写的,一个*.dts文件对应一个ARM的machine。一般放置在内核的"arch/arm/boot/dts/"目录内,比如exynos4412参考板的板级设备树文件就是"arch/arm/boot/dts/exynos4412-origen.dts"。 一个dts文件对应一个ARM的machine,但一个soc可能有多个不同电路板,这些电路板有很多类似的部分,导致dts文件会有很多共同的部分,导致有不少冗余代码,设备树将这些共同部分保存在*.dtsi文件中,供不同的dts使用。dtsi文件的使用方法,类似于C语言的头文件,在dts文件中使用include包含 *.dtsi文件即可。如:
使用dts文件时,就会把包含的dtsi文件内容进行展开。 dts和dtsi的语法规则一样。 一.设备树的布局与节点的基本语法
上面代表代表一个节点,一个节点由节点名称、节点属性以及子节点三部分组成,以大括号{}为一段,[]表示可写可不写。子节点语法跟父节点一样,子节点里可以有自己的子节点,层层嵌套。 设备树的跟是从"/"开始,/{};代表根节点root,一个设备树仅有一个根节点,根节点下可有多个节点。如:
一般根节点描述板子,第一层节点可以描述控制器,如片选、nand_flash控制器,第二层可描述控制器上具体的设备。 二.节点的元素介绍1.节点名node-name[@unit-address]node-name是必须的,最长可以是31个字符长度node-name可重复 @unit-address是设备地址,在同级中必须是唯一,用以区分相同node-name的两个设备,比如有两块内存
特殊的节点名:有一些节点名用于特殊的用途,比如: chosen节点,不表示一个设备,仅用来出出传递参数给内核,其parent node必须是名字是“/”的根节点。
其效果等同于跟u-boot中设置的bootargs作用一样 memory device node描述物理内存的分布,是所有设备树必备的节点,其device_type必须等于memory,reg定义起始地址和长度。
?/cpus /cpus节点下面有1个或多个cpu子节点,cpu子节点用reg属性来表明自己是那个cpu。cpus的格式是固定的。
2.属性值?[properties definitions]?2.1属性值的表示方式:第一种:字符串,如?device_type = "memory"; compatible = "yic,smdkv210", "samsung,s5pv210"; 第二种:32位无符号整型,整形用<>表示,如?reg = <0x30000000 0x20000000>; 第三种:字节数据,十六进表示1byte,制用[]表示,address = [00 00 de ad be ef]; 其中00必须是两个0 2.2特殊的属性值model 设备制造商的描述,如果有2款板子配置基本一致, 它们的compatible是一样的那么就通过model来分辨这2款板子.这个板子是什么 compatible属性用于平台的匹配,用来指定内核中哪个machine_desc可以支持本设备,是用来查找节点的方法之一,另外还可以通过节点名或节点路径查找指定节点。所以值内的字符串必须跟驱动内定义的名字一摸一样。 reg ???????????? 注:“cells”是由尖括号分隔的32位无符号整数:cell-property = <0xbeef 123 0xabcd1234> #address-cells ? 在它的子节点的reg属性中, 使用多少个u32整数来描述地址(address) 有了这两个属性,子节点中的"reg"就可以描述一块连续的地址区域。 每个可寻址的设备有一个reg属性,即以下面形式表示的元组列表: reg = <address1 length1 [address2 length2] [address3 length3] ... >? interrupts 中断,以后再写。 3.label?方式---引用
“&” 引用节点(比如这个设备树include了其他的设备树文件,其他设备树文件里有个ABC节点,&ABC就可以引用这个节点并添加新的属性了) 4.覆盖规则:同一层次的节点,后面出现的会覆盖前面的节点的内容。如include了dtsi文件,不想进入dtsi里修改,则可在dts文件内对节点进行新值的定义,就会覆盖掉dtsi内同级别节点内的对应的属性值
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 7:41:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |