技術文章

當前頁面: 首頁 >技術文章 >DeviceTreeOverlay使用

DeviceTreeOverlay使用

供稿:韜睿(上海)計算機科技有限公司 2020/10/15 10:37:57

0 人氣:16

  • 關鍵詞: iMX8 devicetree ARM
  • 摘要:目前較新的 Linux 內核都支持 Device Tree 來管理外設,這對嵌入式設備來説顯得尤為重要。通過單獨的 Device Tree 文件,可以有效減少因外設更改而重新編譯 Linux 內核的工作量。而隨着 SoC 的複雜程度與日俱增,Device Tree 本身也開始變得複雜。Device Tree Overlays (DTO)則提供一種簡潔的方式來更改 Device Tree 。下面我們將在 Apalis iMX8QM 計算機模塊上介紹如何針對 Toradex Linux BSP v5.0 配置 Device Tree Overlays。

By Toradex 胡珊逢

1). 簡介

目前較新的 Linux 內核都支持  Device Tree 來管理外設,這對嵌入式設備來説顯得尤為重要。通過單獨的 Device Tree  文件,可以有效減少因外設更改而重新編譯 Linux 內核的工作量。而隨着 SoC 的複雜程度與日俱增,Device Tree  本身也開始變得複雜。Device Tree Overlays DTO)則提供一種簡潔的方式來更改 Device Tree 。下面我們將在  Apalis iMX8QM 計算機模塊上介紹如何針對 Toradex Linux BSP v5.0 配置 Device Tree Overlays

 

本文就基於NXP最新的iMX8 SoC(基於Cortex-A72+A53Coretex-M4架構)ARM平台介紹如何配置 Device Tree Overlays。演示平台來自於Toradex 基於iMX8QMApalis iMX8QM ARM嵌入式模塊平台。

 

 

2). 測試流程

首先我們需要下載所需的編譯工具和 Linux 內核源碼,具體的方法參考我們開發者中心的網頁,如果想要在 Windows 上使用 WSL 進行編譯,也可以閲讀該博文

使用 git 下載 Linux 內核源碼

--------------------------

git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/linux-toradex.git

--------------------------

 

我們還提供了適用於一些外設如 LVDS 顯示屏、電容觸摸屏控制器等現成 Device Tree Overlays 文件,這可以作為學習 Device Tree Overlays 的開始。

--------------------------

git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/device-tree-overlays.git

--------------------------

 

Device Tree Overlay 的使用分為三個步驟,編寫 Device Tree Overlay 文件 dts,將 dts 文件編譯生成 dtbo 文件,部署 dtbo 文件。我們將用 Apalis iMX8QM 的一個 SD 接口為例,將 SD_DATA0  SD_DATA1 配置 GPIO

 

首先根據 Apalis iMX8QM datasheet 確定使用的引腳,MXM3_186  MXM3_188,其對應的 GPIO  LSIO.GPIO5.IO26  LSIO.GPIO5.IO27

                                              image001.png

 

然後開始編譯 test_overlay.dts 文件。

--------------------------

/dts-v1/;

/plugin/;

/ {

compatible = "toradex,apalis-imx8";

};

--------------------------

 

compatible 屬性指定該device tree overlay 文件適用的硬件,對應於 imx8qm-apalis-eval.dts 

 

在默認配置中 MXM3_186  MXM3_188 用於 4-bit SD 通道,因此需要將該功能禁用。在  device tree 中,該 4-bit SD 通道對應的名字為  usdhc3

--------------------------

&usdhc3 {

         status = "disabled";

};

--------------------------

 

 iMX8QM  iomuxc 單元管理引腳複用的配置。Apalis iMX8QM 默認配置中已經有GPIO,但是部分被用於其他設備如風扇電源控制等。我們這裏增加兩個新的 GPIO pinctrl_gpio9  pinctrl_gpio10。在 test_overlay.dts 增加,這裏的iomuxc/pinctrl-0 屬性將會覆蓋原來的配置。

--------------------------

image002.png

--------------------------

 

接下來需要把 MXM3_186  MXM3_188 配置為 GPIO 模式。在上面我們已經知道 MXM3_186  MXM3_188對應的 GPIO  LSIO.GPIO5.IO26  LSIO.GPIO5.IO27Ball name   USDHC2_DATA0  USDHC2_DATA1。根據這個寫信息,在 pads-imx8qm.h 中找對引腳對應的表示名稱,IMX8QM_USDHC2_DATA0_LSIO_GPIO5_IO26  IMX8QM_USDHC2_DATA1_LSIO_GPIO5_IO27。在 test_overlay.dts  iomuxc 節點中添加

--------------------------

image003.png

--------------------------

 

至此,test_overlay.dts 文件已經完成,完整文件可以從這裏下載。將 test_overlay.dts 複製到剛才下載的 device-tree-overlays/ overlays 目錄下。

--------------------------

$ tree -L 2

.

├── device-tree-overlays

   └── overlays

└── linux-toradex

--------------------------

 

然後執行下面兩條命令生成  test_overlay.dtbo文件。這裏使用 -I  -i 參數指定 Linux 內核源碼相關目錄。

--------------------------

cpp -nostdinc -I ../../linux-toradex/arch/arm64/boot/dts/freescale -I ../../linux-toradex/include -undef -x assembler-with-cpp test_overlay.dts test_overlay.dts.preprocessed

 

dtc -@ -Hepapr -I dts -O dtb -i ../../linux-toradex/arch/arm64/boot/dts/freescale/ -o test_overlay.dtbo test_overlay.dts.preprocessed

--------------------------

 

最後需要把 test_overlay.dtbo 部署到 Apalis iMX8QM。將該文件複製到 /media/mmcblk0p1/overlays 目錄中,然後修改 /media/mmcblk0p1/overlays.txt 文件。執行 reboot 命令重啓系統。

--------------------------

fdt_overlays=overlays/test_overlay.dtbo

--------------------------

 

啓動後可以在串口日誌中發現 overlays/test_overlay.dtbo 被讀取並應用到系統。

--------------------------

## Executing script at 83100000

102464 bytes read in 19 ms (5.1 MiB/s)

Loading hdp firmware from 0x000000009c000000 offset 0x0000000000002000

Loading hdp firmware Complete

162517 bytes read in 23 ms (6.7 MiB/s)

40 bytes read in 16 ms (2 KiB/s)

Applying Overlay: overlays/test_overlay.dtbo

272 bytes read in 29 ms (8.8 KiB/s)

9805442 bytes read in 316 ms (29.6 MiB/s)

Uncompressed size: 23144960 = 0x1612A00

## Flattened Device Tree blob at 83000000

   Booting using the fdt blob at 0x83000000

   Loading Device Tree to 00000000fd603000, end 00000000fd64dfff ... OK

--------------------------

 

進入系統後可以對這兩個引腳進行操作。在 Linux 系統中會使用對應的 GPIO 編號來訪問引腳,對應的關係可以參考這裏LSIO.GPIO05.IO26MXM3_186)和 LSIO.GPIO05.IO27MXM3_188)分別對應 346  347。然後執行下面將其配置為輸出模式。

--------------------------

root@apalis-imx8:~# echo 346 > /sys/class/gpio/export

root@apalis-imx8:~# echo 347 > /sys/class/gpio/export

root@apalis-imx8:~# echo "out" > /sys/class/gpio/gpio346/direction

root@apalis-imx8:~# echo "out" > /sys/class/gpio/gpio347/direction

 

root@apalis-imx8:~# cat /sys/kernel/debug/gpio

gpio-346 (MXM3_186            |sysfs               ) out lo

gpio-347 (MXM3_188            |sysfs               ) out lo

--------------------------

 

以下命令可以在對應引腳上設置高/低電平。

--------------------------

root@apalis-imx8:~# echo 1 > /sys/class/gpio/gpio346/value

root@apalis-imx8:~# echo 1 > /sys/class/gpio/gpio347/value

root@apalis-imx8:~# echo 0 > /sys/class/gpio/gpio346/value

root@apalis-imx8:~# echo 0 > /sys/class/gpio/gpio347/value

--------------------------

 

Device tree  Linux 內核的重要文件,如果配置不當有可能導致系統啓動失敗。一旦出現這種情況,可以將 Apalis iMX8QM  USB OTG 連接到電腦,然後在 U-boot 中執行下面命令後會將 Apalis iMX8QM 啓動文件掛載到電腦,刪除 overlays.txt 文件中配置的參數。保存後可以使用默認的 device tree 啓動系統。

--------------------------

ums 0 mmc 0

--------------------------

 

 

4). 總結

Device tree 可以使用户以較少配置更改來使用新的外設,避免編譯整個 device tree

 

 

 

 

參考:

//developer.toradex.cn/device-tree-overlays-linux#Deploying_a_Device_Tree_Overlay

//developer.toradex.cn/knowledge-base/device-tree-overlays

//developer.toradex.cn/knowledge-base/build-u-boot-and-linux-kernel-from-source-code#Device_Tree_Overlays

//www.raspberrypi.org/documentation/configuration/device-tree.md


審核編輯(王靜)
更多內容請訪問 韜睿(上海)計算機科技有限公司(//c.gongkong.com/?cid=16879)

手機掃描二維碼分享本頁

工控網APP下載安裝

 

我來評價

評價:
一般