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.
- how to port 2.6.x driver to 4.x --- DTS
- how to port 2.6.x driver to 4.x --关于pinctl 和GPIO
- How to Port rt73 driver to ARM
- How to Port rt73 driver to ARM
- HttpClient 4.x how to use cookies?
- port systemc to mac os x
- How to uninstall CUDA driver and toolkit in Mac OS X?
- ubuntu install NVIDIA driver(Common methods, include how to exit X service)
- How to exe dts package
- How to build CZMQ 4.X in Windows.
- How to install OWLNext 6.1x
- How to use pthread in cocos2d-x
- How to play animations in Cocos2d-x?
- Cocos2d-x How to save ScreenShot ?
- How to Install PyQt4 on OS X
- How to port manufacturer ROM
- How I installed the Windows 7 64x C++ driver/mongoDB to work with Visual Studio 2010
- How to Mac OS X speech to text API
- npm搭建React项目
- sk_buff 学习笔记
- Opencv4Android人脸识别之opencv_contrib编译
- 管道实现进程间通讯 、WaitNamedPipe
- 21. Merge Two Sorted Lists
- how to port 2.6.x driver to 4.x --- DTS
- Nginx搭载负载均衡集群
- UnsatisfiedLinkError解决办法
- java从入门到弃坑第八天
- SQLite批量插入和其他一些使用心得
- Android 中利用XPosed拦截系统消息
- ffmpeg基本用法(转)
- Spring中通配符
- spark--二十种特征变换方法及Spark MLlib调用实例(Scala/Java/python)(一)