您的位置:首页 > 其它

dts-设备树(Device Tree)

2018-03-24 23:20 218 查看
1. 什么是dts?
在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts

设备树就是由一些属性和节点组成的一种数据结构,属性一般会赋予一些属性值,而节点则可能是是由属性跟其下的子节点构成。

2 . 设备树的格式
kernel/Documentation/devicetree/bindings/mmc  具体的某个子系统的填充格式在内核中都会有对应的说明。

3. 在没有设备树的内核中我们是怎么在进行驱动移植的
例: 移植一个dm9000网卡到s3c2440平台,我们需要做的事情有哪些呢?
首先我们要做的事情是构建一个平台设备 platform_device s3c_device_dm9k 的结构体 ,在结构体中有与驱动匹配的.name ,id, resource,platform_data等,然后平台设备添加到设备的结构提中,再将结构体注册到内核中去。
构建resource :里面是配置的寄存器资源,这里的配置与我们的硬件是相关的。
platform_data: 配置的是网卡的一些特有特性。

添加头文件,控制宏,进入图形化界面配置device。
最后编译检查报错,烧写到开发板中测试功能

4. 在linux3.x以上的内核中使用了设备树后,我们的驱动移植就变得简单多了。

通过内核中的说明文档提供的demo格式,添加我们的硬件参数即可,
添加的目录是在arch/arm/boot/下面,在这个目录下面会有两种文件dts和dtsi,dtsi后缀的文件是把平台的共有特性抽象出来的的文件,dts中则是具体的某个产品文件,我们的修改是在dts中。
Example:
ethernet-phy@0 {
        compatible = = "dm9k";    //匹配内核中Platform_driver

linux,phandle = <2452000>   //起始地址
interrupt-parent = <40000>;   //地址长度
interrupts = <35 1>;         //中断
reg = <0>;                    //寄存器
device_type = "ethernet-phy";    //设备type
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: