imx7自定義設備樹

背景:根據自己需求更改官方提供設備樹。

設備樹目錄:內核源碼文件內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>;
...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章