.dtsi .dts dtc dtb 是什么
1.基础
- .dts: device tree source
- .dtsi: device tree source include
- .dts比作源文件,.dtsi比作头文件。
- dtc是linux源码 /scripts/dtc 目录下的工具,它把.dts编译成 .dtb。
- .dtb是.dts被DTC编译后的二进制格式的DeviceTree描述,可由Linux内核解析,bootloader在引导kernel的过程中,会先读取该.dtb到内存。
2.dts书写规范
http://blog.csdn.net/lichengtongxiazai/article/details/38941997
3.dts基本元素
- 节点,
- compatible
- reg,
- ranges,
- 中断控制器等
3.1节点
.dts(或者其include的.dtsi)基本元素为结点和属性。举例说明节点的概念:
/ {
node1 {
a-string-property = "A string";
a-string-list-property = "first string", "second string";
a-byte-data-property = [0x01 0x23 0x34 0x56];
child-node1 {
first-child-property;
second-child-property = <>;
a-string-property = "Hello, world";
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = < >; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
1个root结点"/";root结点下面含一系列子结点,本例中为"node1"和 "node2";
结点"node1"下又含有一系列子结点,本例中为"child-node1"和 "child-node2";
各结点都有一系列属性。这些属性可能为空,如"an-empty-property";可能为字符串,如"a-string-property";可能为字符串数组,如"a-string-list-property";可能为Cells(由u32整数组成),如"second-child-property",可能为二进制数,如"a-byte-data-property"。
子结点的命名遵循的组织形式为:<name>[@<unit-address>],<>中的内容是必选项,[]中的则为可选项。name是一个ASCII字符串,用于描述结点对应的设备类型,如3comEthernet适配器对应的结点name宜为ethernet,而不是3com509。如果一个结点描述的设备有地址,则应该给出@unit-address。多个相同类型设备结点的name可以一样,只要unit-address不同即可。设备的unit-address地址也经常在其对应结点的reg属性中给出。
3.2 compatible
在.dts文件的每个设备,都有一个compatible属性,compatible属性用户驱动和设备的绑定。compatible属性是一个字符串的列表,列表中的第一个字符串表征了结点代表的确切设备,形式为"<manufacturer>,<model>",其后的字符串表征可兼容的其他设备。可以说前面的是特指,后面的则涵盖更广的范围。
举例说明:FreescaleMPC8349 SoC含一个串口设备,它实现了国家半导体(NationalSemiconductor)的ns16550寄存器接口。则MPC8349串口设备的compatible属性为compatible= "fsl,mpc8349-uart","ns16550"。其中,fsl,mpc8349-uart指代了确切的设备,ns16550代表该设备与NationalSemiconductor 的16550UART保持了寄存器兼容。
3.3 reg
可寻址的设备使用如下信息来在DeviceTree中编码地址信息:
reg
#address-cells
#size-cells
其中reg的组织形式为reg= <address1 length1 [address2 length2] [address3 length3] ...>,其中的每一组addresslength表明了设备使用的一个地址范围。address为1个或多个32位的整型(即cell),而length则为cell的列表或者为空(若#size-cells= 0)。address和 length字段是可变长的,父结点的#address-cells和#size-cells分别决定了子结点的reg属性的address和length字段的长度。
3.4 ranges
ranges是地址转换表,其中的每个项目是一个子地址、父地址以及在子地址空间的大小的映射。映射表中的子地址、父地址分别采用子地址空间的#address-cells和父地址空间的#address-cells大小。举例如下:
ranges = < 0x10100000 0x10000 // Chipselect 1, Ethernet
0x10160000 0x10000 // Chipselect 2, i2c controller
0x30000000 0x1000000>; // Chipselect 3, NOR Flash
对于本例而言,子地址空间的#address-cells为2,父地址空间的#address-cells值为1,因此00 0x101000000x10000的前2个cell为external-bus后片选0上偏移0,第3个cell表示external-bus后片选0上偏移0的地址空间被映射到CPU的0x10100000位置,第4个cell表示映射的大小为0x10000。ranges的后面2个项目的含义可以类推。
3.5 中断控制器
DeviceTree中还可以中断连接信息,对于中断控制器而言,它提供如下属性:interrupt-controller– 这个属性为空,中断控制器应该加上此属性表明自己的身份;#interrupt-cells– 与#address-cells和#size-cells相似,它表明连接此中断控制器的设备的interrupts属性的cell大小。
在整个DeviceTree中,与中断相关的属性还包括:interrupt-parent– 设备结点透过它来指定它所依附的中断控制器的phandle,当结点没有指定interrupt-parent时,则从父级结点继承。
interrupts–用到了中断的设备结点透过它指定中断号、触发方法等,具体这个属性含有多少个cell,由它依附的中断控制器结点的#interrupt-cells属性决定。而具体每个cell又是什么含义,一般由驱动的实现决定,而且也会在DeviceTree的binding文档中说明。值得注意的是,一个设备还可能用到多个中断号。除了中断以外,在ARMLinux中clock、GPIO、pinmux都可以透过.dts中的结点和属性进行描述。
3.6 Dts需注意的地方
dts除了以上规则外,也可以自己加一些自定义的属性和子节点,但是一定要符合以下的几个规则:
- 新的设备属性一定要以厂家名字做前缀,这样就可以避免他们会和当前的标准属性存在命名冲突问题;
- 新加的属性具体含义以及子节点必须加以文档描述,这样设备驱动开发者就知道怎么解释这些数据了。描述文档中必须特别说明compatible的value的意义,应该有什么属性,可以有哪个(些)子节点,以及这代表了什么设备。每个独立的compatible都应该由单独的解释。
- 新添加的这些要发送到devicetree-discuss@lists.ozlabs.org邮件列表中进行review,并且检查是否会在将来引发其他的问题。
在一个树状结构的devicetree中,如何引用一个node呢?要想唯一指定一个node必须使用fullpath,例如/node-name-1/node-name-2/node-name-N。
属性(property)值标识了设备的特性,它的值(value)是多种多样的:
- 可能是空,也就是没有值的定义。例如上图中的64-bit,这个属性没有赋值。
- 可能是一个u32、u64的数值(值得一提的是cell这个术语,在DeviceTree表示32bit的信息单位)。例如#address-cells= <1> 。当然,可能是一个数组。例如<0x000000000x00000000 0x00000000 0x20000000>
- 可能是一个字符串。例如device_type= "memory" ,当然也可能是一个stringlist。例如"PowerPC,970"
在描述DeviceTree的结构时,那些可以动态探测到的设备是不需要描述的,例如USBdevice。不过对于SOC上的usbhost controller,它是无法动态识别的,需要在devicetree中描述。同样的道理,在computersystem中,PCIdevice可以被动态探测到,不需要在devicetree中描述,但是PCIbridge如果不能被探测,那么就需要描述之。
.dtsi .dts dtc dtb 是什么的更多相关文章
- dts、dtb编译
设备树(Device Tree)包括DTC(device tree compiler),DTS(device tree source和DTB(device tree blob). dtc编译器能够把 ...
- TX2 dts、dtb编译与反编译
设备树(Device Tree)包括DTC(device tree compiler),DTS(device tree source和DTB(device tree blob). dtc编译器能够把 ...
- 2、设备树的规范(dts和dtb格式)
第01节_DTS格式(1) 语法:Devicetree node格式:[label:] node-name[@unit-address] { [properties definitions] ...
- 《linux设备驱动开发详解》笔记——18 ARM linux设备树
18.1 设备树的起源 linux 2.6及之前,大量板级信息被硬编码到内核里,十分庞大,大量冗余代码: linux 2.6之前,引入了设备树: 设备树源于OpenFirmware,描述硬件的数据结构 ...
- 如何将dtb反编译成dts
点击打开链接 由于device tree会将一个node的信息分布在各个文件里,查看起来很不方便,比如如下例子,ldb在三个文件中都有配置: imx6qdl-sabresd.dtsi: [plain] ...
- dtb和dtc文件浅析
目录 dtb和dtc文件浅析 工具集 dts格式 dtb头部结构 dtb标识符 分析具体的文件 title: dtb和dtc文件浅析 date: 2019/4/25 20:09:38 toc: tru ...
- [device tree] How to decompile a compiled .dtb (device tree blog) into .dts (device tree source).
$ ./out/target/product/project_name/obj/KERNEL_OBJ/scripts/dtc/dtc -I dtb -O dts -o decompiled.dts ~ ...
- linux下如何将dts转换成dtb?
答: 使用dtc工具,如: <kernel source code dir>/scripts/dtc/dtc -I dts -O dtb -o <dtb filename> & ...
- device tree DTB DTC 相互转换
DTB --> DTS ./dtc -I dtb -O dts *.dtb -o *.dts DTS -> DTB ./dtc -I dts -O dtb -o test.dtb test ...
随机推荐
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- Oracle --获取绑定变量的值.
SELECT * FROM DBA_HIST_SQLBIND WHERE SNAP_ID>67073 AND SNAP_ID<=67079 AND SQL_ID='3DR3410F086P ...
- ios通知机制
- onload事件-----addLoadEvent函数
在给网页加一些特效时经常要在<body>中加入“onload”事件,即在网页加载完后执行某事件,例如:<body onload=”alert(‘欢迎光临!')”,但这样做有个大的缺陷 ...
- 更改android AVD模拟器创建路径位置的方法
打开:计算机-->系统属性-->环境变量—>在“系统变量”那选择“新建”-->变量名为 "ANDROID_SDK_HOME” (注意,必须为这个名字!),然后把变量值 ...
- Spting--DI/IOC
DI/IOC <bean> 代表由容器构建的对象(通过反射构建,且类必须有无参的构造方法) 公共属性 id="唯一的id" 在容器中是唯一的 name="类 ...
- form表单编码方式设置为multipart/form-data,后台参数出现乱码情况
一般在上传图片过程中,form中的编码方式一般采用multipart/form-data方式编码,但是后台这取参数时,可能会出现乱码情况:这里后台要采用转换编码方式: 页面: 后台:获取表单元素时,
- OpenCV Haartraining
opencv_haartraining.exe -data xml -vec pos.vec -bg neg/neg.txt -w 20 -h 20 -mem 144 opencv_haartrain ...
- 存储过程中的output跟return区别及实例说明
存储过程return,表示该存储过程执行到当当前return位置,不再向下执行: 存储过程写法:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER ...
- js 复选框 全选都选 如果某一个子复选框没选中 则全选按钮不选中
<!DOCTYPE HTML> <html> <head> <meta charset=UTF-8> <title>js 复选框 全选都选 ...