imx7自定义设备树

9 篇文章 0 订阅

背景:根据自己需求更改官方提供设备树。

设备树目录:内核源码文件内arch/arm/boot/dts/

  1. 复制一份源dts。cp arch/arm/boot/dts/imx7d-colibri-eval-v3.dts arch/arm/boot/dts/imx7d-colibri-eval-my-carrier.dts
  2. 扩展Makefile,加入对新dts的编译支持。vi arch/arm/boot/dts/Makefile。
  3. dts修改完成后,使用make dtbs生成新的imx7d-colibri-eval-my-carrier.dtb文件,以供内核加载。
dtb-$(CONFIG_SOC_IMX7D) += \
       imx7d-cl-som-imx7.dtb \
       imx7d-colibri-aster.dtb \
       imx7d-colibri-emmc-aster.dtb \
       imx7d-colibri-emmc-eval-v3.dtb \
       imx7d-colibri-eval-v3.dtb \
       imx7d-nitrogen7.dtb \
       imx7d-sbc-imx7.dtb \
       imx7s-colibri-aster.dtb \
       imx7s-colibri-eval-v3.dtb \
       imx7s-warp.dtb \
       imx7d-colibri-eval-my-carrier.dtb

覆盖属性

要覆盖属性,需要使用&字符和标签来引用该节点。较晚的设备树条目将覆盖较早的条目(条目的顺序顺序很重要,因此包含顺序很重要)。通常,较高的层(例如,载板设备树)会覆盖较低的层(例如,SoC设备树),因为较高的层一开始就包括较低的层。

例如,对于能够用作设备或主机(双角色)的USB控制器,可以使用dr_mode属性显式覆盖默认模式:

&usbdev0{
    dr_mode = "host";
};

激活/停用设备

设备的重要属性是状态属性。它允许激活/停用设备。SoC级设备树中指定了许多设备,但是默认情况下它们被禁用。通过引用基本节点(使用&字符和标签),可以通过覆盖status属性的任何层来启用设备。

&uart4{
    status = "okay";
};

覆盖节点

整个节点可以通过简单地重新定义它们来覆盖。与覆盖属性一样,后面的定义会覆盖前面的定义。

例如,通过简单地在设备树中重新定义Vybrids UART2(UART_B)的引脚配置来覆盖uart2grp节点(此pinctrl规范已在imx7d-colibri.dtsi中定义,但具有CTS / RTS引脚)

&iomuxc {

        pinctrl_uart2: uart2grp {
            fsl,pins = <
                MX7D_PAD_GPIO1_IO09__GPIO1_IO9 0x74
                MX7D_PAD_GPIO1_IO09__GPIO1_IO9 0x14
            >;
        };
...
};

删除属性或节点

也可以使用/ delete-property // delete-node /删除属性,甚至删除节点。以下示例删除载板级设备树imx6qdl-colibri.dtsi中定义的fsl,uart-has-rtscts属性:

&uart1 {
    /delete-property/fsl,uart-has-rtscts;
};

删除节点,则使用名称。

/delete-node/backlight;

别名

设备树允许使用别名重新排列某些设备类型。例如,这对于RTC很有用,因为第一个RTC设备被用作系统的主要时间源。应将主要时间源分配给rtc0别名(在本示例中,我们将snvsrtc分配为主要RTC,即Vybrids内部RTC):

    aliases {
        rtc0 = &snvsrtc;
        rtc1 = &rtc;
    };

引用节点

如果需要其他设备的资源,则使用引用来连接两个设备。通常,它用于为设备分配资源,例如中断,时钟,GPIO或PWM通道。根据所引用的设备,需要一定数量的参数(单元格)。该数量在父设备的-cells属性中定义。

通用输入输出

GPIO规范需要引用GPIO节点和一个或多个单元(参数)。单元格的数量取决于驱动程序。它可以从设备树绑定文档中获得,也可以通过查看GPIO控制器节点获得(输出GPIO的设备标有该gpio-controller属性)。该#gpio-cells属性定义了预期的单元数量。例如,GPIO控制器在imx7d.dtsi中定义如下:

gpio1: gpio@4004a000 {                                                                                              
    compatible = "fsl,imx7d-gpio";                                                                              
    reg = <0x4004a000 0x1000 0x400ff040 0x40>; 
    gpio-controller;
    #gpio-cells = <2>;
...

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值