how to port 2.6.x driver to 4.x --- DTS

来源:互联网 发布:h5数据可视化 编辑:程序博客网 时间:2024/06/08 00:40

What is DTS?

   DTS is "DeviceTree Source".  它是用于描述设备信息以及设备于总线之间的层级关系,DTS可用于描述绝大多数板级设备的细节,包括CPU、内存、中断、总线以及外设等,与DT相关的Object有dts、dtsi、dtc、dtb、dt.img。它是Ascii文本,一般一个dts文件对应一个Machine,ARM架构下dts文件存放于arch/arm/boot/dts/目录下。


Why do we need it?

   DTS可以让kernel的代码的结构更清晰,去掉更多的不同chip间的代码冗余。更容易的代码维护和升级。本质上,Device Tree改变了原来用hardcode方式将HW 配置信息嵌入到内核代码的方法,改用bootloader传递一个DB的形式。对于基于ARM CPU的嵌入式系统,我们习惯于针对每一个platform进行内核的编译。但是随着ARM在消费类电子上的广泛应用(甚至桌面系统、服务器系统),我们期望ARM能够象X86那样用一个kernel image来支持多个platform。在这种情况下,如果我们认为kernel是一个black box,那么其输入参数应该包括:

1、识别platform的信息

2、runtime的配置参数

3、设备的拓扑结构以及特性

对于嵌入式系统,在系统启动阶段,bootloader会加载内核并将控制权转交给内核,此外,还需要把上述的三个参数信息传递给kernel,以便kernel可以有较大的灵活性。在linux kernel中,Device Tree的设计目标就是如此。

这些都是从官方得到的一些说明。根据自己最近的一个月的实践,我认为DTS 可以帮助我们从软件配置的角度来理解/了解一个产品的硬件模块的链接方式。 对于同一个CPU的平台对应多个系列产品时,我们可以使用 zImage + project.dts 来动态适配它们。接下来我就如何通过DTS配置来适配不同的硬件版来进行说明。


第一步: 需要产品硬件对应的DTS file “xxx.dtsi”

    这一步比较关键,一般是根据主CPU来选择对应的xxx.dtsi. 如我目前是对AT91 SMA9260的一个产品从2.6.x的kernel 升级到4.4.x上。所以我选择的是at91sam9260.dtsi作为我的DTS file的基础来创建我的工程的DTS。


第二步: 根据实际产品的硬件和CPU的datasheet进行DTS的修改

    一般情况,就是在自己的工程DTS里面对应用的xxx.dtsi进行重写(高级吧,有点面向对象的味道。)。




当然对于我们自己的驱动,我们可以通过 module编译的方式实现动态加载或卸载。如果我们有DTS的支持,我们就可以通过配置项目的dts的内容来达到 enable/disabel 一个驱动的功能,我们还可以修改/配置驱动的相关参数/资源。



Note:所有的dts file 的路径: arch\arm\boot\dts

           kernel document:  Documentation/devicetree/bindings. 

0 0
原创粉丝点击