第六章 linux-设备树一
第六章 linux-设备树一
文章目录
前言
设备树是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设备节点,每个节点都通过一些属性信息来描述节点信息,属性就是键—值对。节点是由一堆的属性组成,节点都是具体的设备,不同的设备需要的属性不同,用户可以自定义属性。除了用户自定义属性,有很多属性是标准属性, Linux 下的很多外设驱动都会使用这些标准属性。
一、compatible 属性
compatible 属性也叫做“兼容性”属性,这是非常重要的一个属性! compatible 属性的值是一个字符串列表, compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序, compatible 属性的值格式如下所示:
compatible = "manufacturer,model";
其中 manufacturer 表示厂商, model 一般是模块对应的驱动名字。一般驱动程序文件都会有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,如果设
备节点的 compatible 属性值和 OF 匹配表中的任何一个值相等,那么就表示设备可以使用这个
驱动。
设备树内容:
pinctrl_key: keygrp {
fsl,pins = <
MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0xF080 /* KEY0 */
>;
};
gpio_keys_imxu6ll {
compatible = "atkalpha-key";
gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_key>;
};
获取属性:
static const struct of_device_id gpio_key_tree[] = {
{ .compatible = "atkalpha-key" },
{ },
};
/*
*数组 gpio_key_tree就是这个驱动文件的匹配表,此匹配表只
* 有一个匹配值“atkalpha-key”。如果在设备树中有哪个节点
* 的 compatible 属性值与此相等,那么这个节点就会使用此驱动文件。
*/
/* 1. 定义platform_driver */
static struct platform_driver gpio_key_driver = {
.probe = gpio_key_probe,
.remove = gpio_key_remove,
.driver = {
.name = "imx6ull_gpio_key",
.of_match_table = gpio_key_tree,
},
};
二、model 属性
model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的,比如:
model = "atkalpha-key";
三、status 属性
status 属性值也是字符串,字符串是设备的状态信息,不同值对应的属性:
“okay”
表明设备是可操作的。
“disabled”
表明设备当前是不可操作的,但是在未来可以变为可操作的,比如热插拔设备插入以后。至于 disabled 的具体含义还要看设备的绑定文档。
“fail”
表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可
操作。
“fail-sss”
含义和“fail”相同,后面的 sss 部分是检测到的错误内容。
四、reg,#address-cells 和#size-cells 属性
这两个属性的值都是无符号 32 位整形, #address-cells 和#size-cells 这两个属性可以用在任何拥有子节点的设备中,用于描述子节点的地址信息。 #address-cells 属性值决定了子节点 reg 属性中地址信息所占用的字长(32 位), #size-cells 属性值决定了子节点 reg 属性中长度信息所占的字长(32 位)。 #address-cells 和#size-cells 表明了子节点应该如何编写 reg 属性值,一般 reg 属性都是和地址有关的内容,和地址相关的信息有两种:起始地址和地址长度, reg 属性的格式一为:
reg = <address1 length1 address2 length2 address3 length3……>
每个“address length”组合表示一个地址范围,其中 address 是起始地址, length 是地址长度, #address-cells 表明 address 这个数据所占用的字长, #size-cells 表明 length 这个数据所占用的字长,
五、ranges 属性
ranges属性值可以为空或者按照(child-bus-address,parent-bus-address,length)格式编写的数字矩阵,
ranges = <child-bus-address parent-bus-address length>
ranges 是一个地址映射/转换表, ranges 属性每个项目由子地址、父地址和地址空间长度这三部分组成:
child-bus-address:子总线地址空间的物理地址,由父节点的#address-cells 确定此物理地址所占用的字长。
parent-bus-address: 父总线地址空间的物理地址,同样由父节点的#address-cells 确定此物理地址所占用的字长。
length: 子地址空间的长度,由父节点的#size-cells 确定此地址长度所占用的字长。
相关文章
- Linux crontab 命令格式与详细例子
- linux驱动开发--字符设备:简单的file_operations示例
- linux驱动开发--字符设备:静态分配设备号
- Linux Platform devices 平台设备驱动
- Linux 设备总线驱动模型
- 《网蜂A8实战演练》——8.Linux USB 主机控制器和设备驱动
- linux 混杂设备驱动之adc驱动
- linux lcd设备驱动剖析一
- Linux平台总线驱动设备模型
- linux命令学习——file
- Linux中什么是块设备 及 lsblk命令的使用
- X64 Linux无法从本地字符界面登陆解决
- 流媒体04:VLC2.2.1的Linux编译及调试
- linux更新系统时间
- Linux 硬盘设备以及df du命令
- Linux 创建和删除目录命令mkdir、rmdir
- 深入浅出linux驱动设备程序
- Linux(1)——在Linux下安装Nodejs(详细教程,包会),并成功创建一个简单的服务器
- Linux下的无名管道
- 【错误记录】编译 Linux 内核报错 ( Unable to find the ncurses package. )
- 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )
- Linux I2C设备驱动编写(二)
- ARM Linux 3.x的设备树(Device Tree)
- 嵌入式linux开发,PPP简介与内核配置
- vscode +Jupyter+子系统 python实战 windows系统下运行python写代码 windows子系统 window下Linux系统搭建
- linux设备节点侦测——基于inotify
- Linux上安装MGLtools并将pdb文件转为pdbqt文件
- Linux下查看输入设备、获取输入事件的详细方法
- Linux读写I2C设备I2C_RDWR用法