linux设备树(1)理论部分
设备树(device tree)是一种描述硬件的数据结构,linux和硬件交互的文件,由节点和其对应属性构成,就是一个硬件描述树,然后BootLoader把他传递给内核,内核给他们分配资源
DTS,DTC,DTB
- dts是ascii文件格式的设备树描述
对应文件的位置信息
-
dtb是二进制文件,linux内核解析
-
dtc是dts编译成dtb的工具
设备树文件的编译
makefile
文件
设备树文件
-
dtsi文件
-
每个soc为了适配不同的cpu,有共同部分,其中共同部分被同意放到.dtsi文件
语法类似c
-
-
这文件主要用于描述soc内部的外设信息,比如cpu的架构,主频,寄存器地址范围
-
设备树架构
-
用的是树状结构描述设备信息(类似于urdf)
-
每个设备树文件都有一个根节点
-
节点之间形成嵌套关系(父子)
-
每个属性用键值对来描述
-
-
-
结构
-
/{ node1{ key = value; ... } node3 { ... } }
-
节点名
<name>
[@adress]name是节点名字,adress是对应的物理地址
-
引用
引用一个节点的时候,我们需要去写完整的节点路径,就实现了函数调用的效果。相同节点的不同属性合并,相同属性被重写
-
keyv
属性名称 对应功能 举例 compatible 可以用来查找节点,也可以通过节点名称或者路径去寻找指定的节点 campatible = “davicom” address 引出对应的io口信息
#address-cells,用于描述子节点“reg”用于描述首地址的cell的数量
#size-cells,用于描述节点属性的地址表中描述地址长的cell数量#address-cells = <2>;#size-cells = <1> interrupts 中断请求
每当某个设备触发了中断信号的时候,系统需要给其对应的信号
常用属性
* irrerrupt-controller 中断控制器
* inerrupt-cells 描述子节点继承了父节点的哪个值
* interrupt-parent 所属的中断控制器,自动依附于父节点reg 表示节点地址资源的,其实资源以及大小 ranges 切换总线子和总线本身的地址,前后顺序分别是(子总线地址,父总线地址,大小)
中断域
外设在不断增加,中断系统不断进行更代,所以提出了中断控制器级联的概念,在kernel的不断开发,中断域概念被开发者研究出来
即当内核注册中断控制器的时候,内核会为该中断控制器申请一块可以用的中断域。
当硬件产生中断之后,内核可以根据中断域映射到软件中断号,从而进行对应的中断处理。
-
线性映射
可以用于硬件中断最大数量固定,并且数值不大,可以选择线性映射
-
树映射
硬件中断号可能很大
-
不映射
中断号就是linux的中断号
-