打印
[i.MX]

关于dts的理解

[复制链接]
1589|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GhostaR|  楼主 | 2015-11-6 12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
内核版本:Linux 3.14
平台: imx6q-sabresd

问题描述: 对新引入的device tree机制不甚理解。是否可以理解为如果我要加入一个驱动,只需要重新编译dts文件,更新dtb文件即可,无需再重新编译zImage? 不知道这样理解是否正确?
另,对dts的格式也存有疑问,网上说一个dts文件只有一个根节点,但我查看工程中的imx6q-sabresd.dts ,大致如下:
/dts-v1/;

#include "imx6q.dtsi"
#include "imx6qdl-sabresd.dtsi"

/ {
        model = "Freescale i.MX6 Quad SABRE Smart Device Board";
        compatible = "fsl,imx6q-sabresd", "fsl,imx6q";
};

&battery {
        offset-charger = <1900>;
        offset-discharger = <1694>;
        offset-usb-charger = <1685>;
};

&ldb {
        lvds-channel@0 {
                crtc = "ipu2-di0";
        };

        lvds-channel@1 {
                crtc = "ipu2-di1";
        };
};


其中,&battery和&ldb 似乎都没有在根节点里而是自成一个节点,不知道他们是如何联系在一起的呢?
那假如我想加入一个gpio的驱动来驱动一个led灯(GPIO2  ROW5),那我应该怎么修改此文件来加入该驱动呢?

新手,不知道描述清楚没有,望各位大神不吝赐教,谢谢。

相关帖子

沙发
denggww123| | 2015-11-6 17:10 | 只看该作者
在dts文件中增加新的节点即新的驱动,对应的zImage也必须有相应的驱动来匹配。
如果zImage没有把新加的驱动编译进去,只在dts中增加该节点的话,系统起来后该驱动是不会加载的。
如在dts增加一个gpio驱动:
my_gpios{
    compatible = "mygpioname";
    usb-gpios = <&gpio1 10 0>;
    status = "okay";
   };

此时内核中也应该增加一个名为mygpioname的驱动程序,并且将其编译进内核,系统起来后改驱动就能加载了。
驱动里面读取usb-gpios属性并获取其值,就可以对改gpio进行控制了。

使用特权

评论回复
板凳
史迪威将军| | 2015-11-6 21:05 | 只看该作者
不太懂这方面的知识,帮楼主顶一下

使用特权

评论回复
地板
舒斯特尔| | 2015-11-8 20:48 | 只看该作者
如果zImage没有把新加的驱动编译进去,只在dts中增加该节点的话,系统起来后该驱动是不会加载的。

使用特权

评论回复
5
GhostaR|  楼主 | 2015-11-9 16:52 | 只看该作者
能否提供一个简单无实际功能的例子,谢了。新手望见谅。

使用特权

评论回复
6
mini1986| | 2015-11-12 09:25 | 只看该作者
dtb文件就相当于是驱动配置文件,但是如果你zImage里面没有相应的驱动程序,zImage肯定要重新编译的......

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝