当前位置: 首页 > news >正文

设备树文件中的设备节点

一.  简介

前面几篇文章学习了 关于设备树文件的编译,设备树文件的调用。

本文开始学习 设备树文件的语法。具体学习设备节点与标准属性。

二.  设备树文件之设备节点与标准属性

1.   设备节点

设备树 是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设备节点,每个节点都通过一些属性信息来描述节点信息,属性就是 键—值对。以下是从 imx6ull.dtsi 文件中缩减出来的设备树文件内容:
/ {aliases {can0 = &flexcan1;};cpus {#address-cells = <1>;#size-cells = <0>;cpu0: cpu@0 {compatible = "arm,cortex-a7";device_type = "cpu";reg = <0>;};};intc: interrupt-controller@00a01000 {compatible = "arm,cortex-a7-gic";#interrupt-cells = <3>;interrupt-controller;reg = <0x00a01000 0x1000>,<0x00a02000 0x100>;};
}

可以看出,1 行,“/” 是根节点,每个设备树文件只有一个根节点。细心的同学应该会发现,imx6ull.dtsi imx6ull-alientek-emmc.dts 这两个文件都有一个 “/” 根节点,这样不会出错吗?不会的,因为 这两个“/”根节点的内容会合并成一个根节点。

2 6 17 行, aliases cpus intc 是三个子节点,在设备树中节点命名格式如下:
node-name@unit-address
其中 “ node-name ” 是节点名字,为 ASCII 字符串,节点名字应该能够清晰的描述出节点的 功能,比如,“ uart1 ”就表示这个节点是 UART1 外设。“ unit-address ”一般表示设备的地址或寄 存器首地址,如果某个节点没有地址或者寄存器的话,“ unit-address ”可以不要,例如 “ cpu@0 ”、
interrupt-controller@00a01000 ”。
在上面的设备节点中, 我们看到的节点命名却如下所示:
cpu0:cpu@0
上述命令并不是 “ node-name@unit-address ” 这样的格式,而是用“:”隔开成了两部分,这里的 “:” 前面的是节点标签 (label) ,“:”后面的才是节点名字,格式如下所示:
label: node-name@unit-address

引入 label 的目的就是为了方便访问节点,可以直接通过 &label 来访问这个节点,例如,通过 &cpu0 就可以访问 “ cpu@0 ” 这个节点,而不需要输入完整的节点名字。

10 行,cpu0 也是一个节点,只是 cpu0 cpus 的子节点。

2.  设备树中常见的击中数据形式

每个节点都有不同属性,不同的属性又有不同的内容,属性都是键值对,值可以为空或任 意的字节流。设备树源码中常用的几种数据形式如下所示:
①、字符串
compatible = "arm,cortex-a7";
上述代码设置 compatible 属性的值为字符串“ arm,cortex-a7 ”。
②、32 位无符号整数
reg = <0>;
上述代码设置 reg 属性的值为 0 reg 的值也可以设置为一组值,比如:
reg = <0 0x123456 100>;
③、字符串列表
属性值也可以为字符串列表,字符串和字符串之间采用“ , ”隔开,如下所示:
compatible = "fsl,imx6ull-gpmi-nand", "fsl, imx6ul-gpmi-nand";
上述代码设置属性 compatible 的值为“ fsl,imx6ull-gpmi-nand ”和“ fsl, imx6ul-gpmi-nand ”。

http://www.lryc.cn/news/276265.html

相关文章:

  • 文件管理工具.netcore资源文件管理
  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
  • vue3 内置组件
  • MFC如何动态创建button按钮并添加点击事件
  • Qt - QML框架
  • Python+Flask+MySQL的图书馆管理系统【附源码,运行简单】
  • Module-Federation[微前端]
  • Spring 动态数据源事务处理
  • WSL2-Ubuntu22.04子系统图形化界面搭建与远程桌面连接
  • 【sklearn练习】model常用属性和功能
  • IO类day01
  • 软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告
  • 适用于任何公司的网络安全架构
  • Excel:通过excel将表数据批量转换成SQL语句
  • Android linphone-android sdk设置语音编码问题
  • Hyperledger Fabric Orderer 配置解析
  • 苹果电脑交互式原型设计软件Axure RP 9 mac特色介绍
  • Java 判断实体类对象的全部属性是否空
  • Vue3-44-Pinia- 安装步骤
  • L1-005 考试座位号(Java)
  • HDFS概述
  • Hive 的 安装与部署
  • 【HBase】——优化
  • 什么是跨域以及怎么处理跨域问题
  • 【Linux Shell】11. 输入/输出 重定向
  • 数据库-简单表的操作And查看表的结构
  • <设计模式修炼>模板方法模式的使用场景和注意事项学习
  • android 分享文件
  • UE5 C++(十一)— 碰撞检测
  • 时序数据库InfluxDB、TimeScaleDB简介