Blog:
Yocto Projectでデバイスツリーオーバーレイのカスタマイズ

Monday, January 16, 2023
Yocto
Yocto

デバイスツリーオーバーレイのカスタマイズ

(この記事は、この他の記事の続きです)

実行環境

本マニュアルの実行環境は下記です。

仮想化ソフト:VMWARE Player v15.5.7
Host OS: Windows 10 21H2
Guest OS: Ubuntu Desktop 20.04LTS 64bit(英語版)
BSP:v5.7
CPUモジュール:Verdin-iMX8M Plus Quad 4GB Wi-Fi / Bluetooth IT V1.1A
キャリアボード:Verdin開発ボードRev 1.1C + アクセサリーキット
ディスプレイ:10.1インチディスプレイ1.0A 静電式タッチパネル付き+ DSI to LVDSアダプタ1.1

本文

Verdin開発ボードにVerdin DSI to LVDS Adapterと10.1インチLCD(LT170410)を接続して表示するためのカスタムを行います。

カスタムを行う前に予備知識としてToradexが用意しているデバイスツリーオーバーレイについて説明します。

デバイスツリーにはデバイスツリーオーバーレイという仕組みがあり、ブートローダーから指定されたデバイスツリーを読み込み後、デバイスツリーオーバーレイファイルを読み込み部分的にデバイスツリーを上書きして設定などを変更することができます。Linux起動中に/boot/overlays.txtを参照すると適用されているデバイスツリーオーバーレイが確認できます。
デフォルトではnativeのHDMIを使用するように下記のようになっています。

fdt_overlays=verdin-imx8mp_native-hdmi_overlay.dtbo verdin-imx8mp_lt8912_overlay.dtbo

上記はVerdin DSI to HDMI Adapterを動かすためのデバイスツリー

verdin-imx8mp_native-hdmi_overlay.dtbo
verdin-imx8mp_lt8912_overlay.dtbo

の2つ適用されています。
これをVerdin DSI to LVDS Adapterと10.1インチLCD(LT170410)を動かすデバイスツリーに変更します。
/boot/overlays.txtを下記に書き換えて再起動するとLCDが表示されるようになります。

fdt_overlays=touch-atmel-mxt_overlay.dtbo verdin-imx8mp_sn65dsi84-lt170410_overlay.dtbo verdin-imx8mp_sn65dsi84_overlay.dtbo

Verdin DSI to LVDS Adapter以外にもいくつかデバイスツリーオーバーレイファイルが用意されています。
何を指定すればよいかは下記に情報があります。

https://developer-archives.toradex.com/knowledge-base/setting-up-recommended-displays-with-torizon#Find_the_Correspondent_Device_Tree_Overlays

設定したデバイスツリーには下記3つが適用されています。

touch-atmel-mxt_overlay.dtbo
verdin-imx8mp_sn65dsi84-lt170410_overlay.dtbo
verdin-imx8mp_sn65dsi84_overlay.dtbo

拡張子dtboはテキストベースの拡張子dtsファイルをコンパイルしてバイナリ化されたファイルです。
dtsファイルを参照することによりどんな設定がされているかを確認できます。
デバイスツリーオーバーレイはdevice-tree-overlaysのレシピで作成されています。
devshellでコンパイル前のdtsファイルを確認することができます。

[Ubuntu]$ bitbake -c devshell device-tree-overlays

devshellで開いた後、ファイルを確認すると拡張子dtsのファイルがいくつかあります。



各々のファイルを確認します。

[Ubuntu]$ gedit touch-atmel-mxt_overlay.dts

8~9行目はDTS記述バージョンの指定とベースのデバイスツリーを参照するための記述です。
11~14行目までは対応するハードウェアの指定です。
このファイルの設定部分は16~18行目部分のみです。Atmel製のタッチパネルコントローラを有効に設定しています。



[Ubuntu]$ gedit verdin-imx8mp_sn65dsi84-lt170410_overlay.dts

このファイルの設定部分は16~44目です。
MIPI-DSIをLVDSに変換するIC(SN65DSI84)の設定と10.1インチLCD(LT170410)の設定を行っています。
別のLCDを使用する場合、LCDに応じて設定を変更してください。



[Ubuntu]$ gedit verdin-imx8mp_sn65dsi84_overlay.dts

このファイルの設定部分は15~61目です。
必要な機能の有効化とMIPI-DSIの設定を行っています。



本来はLCDの設定を変えたりMIPI to LVDSを別のIC用に修正するような変更を行いますが
本マニュアルでは変更する意味はありませんがタッチパネルを無効にする修正を行います。
修正内容には意味はありませんがdevice-tree-overlaysの修正例として参考にしてください。

パッチファイルの作成

[Ubuntu]$ quilt new touch-disable.patch

下記ファイルにtouch-atmel-mxt_overlay.dtsとverdin-imx8mp_sn65dsi84_overlay.dtsの設定を追記します。

[Ubuntu]$ EDITOR=gedit quilt edit ./touch-atmel-mxt_overlay.dts

タッチパネルを無効にします。

status = "okay";
->
status = "disable";



修正内容に対するパッチを作成します。

[Ubuntu]$ quilt refresh

touch-disable.patchというファイル名でパッチファイルが出力されます。

パッチを置くディレクトリを作成します。

[Ubuntu]$ mkdir /work/oe-core/layers/meta-toradex-nxp/recipes-kernel/linux/device-tree-overlays

パッチファイルをレシピに反映するために移動します。

[Ubuntu]$ mv ./patches/touch-disable.patch /work/oe-core/layers/meta-toradex-nxp/recipes-kernel/linux/device-tree-overlays/

bbapendファイルを作成します。

[Ubuntu]$ gedit /work/oe-core/layers/meta-toradex-nxp/recipes-kernel/linux/device-tree-overlays_git.bbappend


SRC_URI_append_verdin-imx8mp = " file://touch-disable.patch"



イメージの作成

[Ubuntu]$ bitbake -c cleansstate device-tree-overlays && bitbake tdx-reference-multimedia-image

出力されたファイルからOSイメージを作成してモジュールに書き込みます。

[Ubuntu]$ cd /work/oe-core/image/
[Ubuntu]$ sudo tar -xf ../build/deploy/images/apalis-imx8/Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_.tar

OSの書き込み方法に関してはTEZIのマニュアルをご参照ください。

Linux起動後/boot/overlay.txtを書き換えます。

fdt_overlays=verdin-imx8mp_native-hdmi_overlay.dtbo verdin-imx8mp_lt8912_overlay.dtbo
->
fdt_overlays=fdt_overlays=touch-atmel-mxt_overlay.dtbo verdin-imx8mp_sn65dsi84-lt170410_overlay.dtbo verdin-imx8mp_sn65dsi84_overlay.dtbo

再起動後タッチパネルが効かないことを確認できます。

Authors:
桐川篤史
・岡本無線電機
ガルシアアルバロ・Toradex(トラデックス)
Share this on:

Leave a comment

Please login to leave a comment!
Have a Question?