Armadilloフォーラム

at-dt-Webを使ったdtb作成について

sumi.t

2020年10月8日 17時02分

at-dt-Webを使ってCOM11の設定を変更したのですが、作成した
『armadillo-640-at-dtweb.dtb』を使用し『Device Tree Blob』
を書き換えると、以下で起動が止まってしまいます。

=================================================================================
=> boot
7058896 bytes read in 214 ms (31.5 MiB/s)
27748 bytes read in 54 ms (501 KiB/s)
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux-4.14-at24
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 7058832 Bytes = 6.7 MiB
Load Address: 82000000
Entry Point: 82000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Loading Kernel Image ... OK
Loading Device Tree to 9eef9000, end 9ef02c63 ... OK

Starting kernel ...

=================================================================================

原因切り分けのため、『10.2.1. 手順:Linux カーネルをビルド』の手順のみ
を実施後、『20.3.3. Device Tree をカスタマイズ』に沿って何も変更せずに
作成した、『armadillo-640-at-dtweb.dtb』を使っても同じ結果でした。
※『armadillo-640.dtb』を使用した場合は、起動できることは確認しております。

at-dt-Web使用する際に、カーネルコンフィギュレーションで有効にしておかな
ければならない機能や、dts側の変更などはございますでしょうか?

〇 使用環境
・linux-v4.14-at24.tar.gz
・initramfs_a600-2.0.0.cpio.gz
・ATDE:atde7-i386-20200226
・at-dtweb : 2.2.0
 
以上、お手数ですがよろしくお願い申し上げます。

コメント

at_akihito.irie

2020年10月8日 18時40分

入江です。

UART1(CON9: 3, 5ピン)の追加をお忘れではないでしょうか。
以下のリンク先の手順に従ってUART1とお客様の変更を追加していただき、生
成されたarmadillo-640-at-dtweb.dtbを用いて動作確認していただけます
でしょうか。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

> 入江です。
>
> UART1(CON9: 3, 5ピン)の追加をお忘れではないでしょうか。
> 以下のリンク先の手順に従ってUART1とお客様の変更を追加していただき、生
> 成されたarmadillo-640-at-dtweb.dtbを用いて動作確認していただけます
> でしょうか。
> https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
>

ありがとうございます。アドバイス頂いた内容で動作いたしました。
UART1(CON9: 3, 5ピン)の設定が必須になるということですね。

あと、追加で教えていただきたいのですが、Armadillo440の後継に
640を検討しており、LCDについては既存のものをそのまま使用した
いと考えております。

LCDの解像度設定などが必要なため、440では下記を参考に設定を追加
したのですが、640で参考になるサイトなどございますでしょうか?
〇 440で参考とさせていただいたサイト
 https://armadillo.atmark-techno.com/forum/armadillo/2921

at_akihito.irie

2020年10月9日 15時43分

入江です。

1点確認させてください。
CON11(LCDインターフェース)をat-dtwebで設定されたとのことですが、
現在at-dtwebにて対応しているLCDは以下の2つのみです。
- GT800X480A-1013P
- FG040360DSSWBG03

これ以外のLCDをArmadillo-640でお使いになりたいということでしょうか?

> 入江です。
>
> 1点確認させてください。
> CON11(LCDインターフェース)をat-dtwebで設定されたとのことですが、
> 現在at-dtwebにて対応しているLCDは以下の2つのみです。
> - GT800X480A-1013P
> - FG040360DSSWBG03
>
> これ以外のLCDをArmadillo-640でお使いになりたいということでしょうか?
>
>

はいその通りです。
LCDはオプトエレクトロニクス製の『TCG070WVLPAAFA-AA00』を使用いたします。

440では、下記ファイルの直接編集でLCDの設定(解像度やリフレッシュレート)を追加しておりました。
〇 linux-2.6.26-atXX/drivers/video/mxc/mxcfb_modedb.c

at-dtwebでの設定が難しいようでしたら、440のように直接ファイルを編集する方法でも構いませんので、
設定方法などの手順をご教授願えると助かります。

入江です。

Armadillo-640ではLCDの設定はDeviceTreeに記述するようになっています。
また、at-dtwebではご提示のLCDは対応していないため、お客様の方でdtsファ
イルを直接編集していただく必要があります。

linux-4.14-atのソースコード内、
arch/arm/boot/dts/armadillo-640-lcd70ext-l00.dtsiにて、Armadillo-640で
標準でご使用頂けるLCDであるGT800X480A-1013Pの設定を行っていますので、
そちらを参考に設定していただくとお分かりになりやすいかと存じます。

また、linux-4.14-atのソースコード内にDeviceTreeのドキュメントもござい
ますので、併せてご参照ください。
ディスプレイタイミングのドキュメントは以下にございます。
Documentation/devicetree/bindings/display/panel/display-timing.txt

ご教授頂いた資料を参考に、LCDの表示が可能になりました。
ありがとうございます。

追加の質問となってしまい申し訳ありませんが、LCDからのイベント取得
についても教えてください。

440で使用していたLCDはタッチパネルで、キャリブレーションに下記
アプリを使用しておりました。
https://armadillo.atmark-techno.com/howto/calibrate-a400-touchscreen

640でも同様にLCDからのイベント取得と、キャリブレーション
を実施したいのですが、参考になるサイトや開示が可能なアプリ
ケーションなどございませんでしょうか?

入江です。

まずイベントの取得についてですが、添付のdtsiファイルをご確認ください。
このファイルは、at-dtwebで「OPTION BOARD -> LCD43EXT-L01」をアサインし
て生成したdtsiです。
このdtsi中の

	 pinctrl_tsc: tscgrp {
		fsl,pins = <
			MX6UL_PAD_GPIO1_IO01__GPIO1_IO01	0xb0		// CON11_37
			MX6UL_PAD_GPIO1_IO02__GPIO1_IO02	0xb0		// CON11_36
			MX6UL_PAD_GPIO1_IO03__GPIO1_IO03	0xb0		// CON11_35
			MX6UL_PAD_GPIO1_IO04__GPIO1_IO04	0xb0		// CON11_34
		>;
	 };
&tsc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_tsc>;
	xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
	status = "okay";
};

をお客様のdtsに組み込むことでイベントの取得が可能かと存じます。

動作確認の際は、

[armadillo]# evtest /dev/input/event0

で可能です(/dev/input/eventの後の数値は変わる場合があります)。

キャリブレーションについては、tslibがstretchでは標準で提供されていない
ため、Armadillo-440と同様の方法でキャリブレーションを行うことはできま
せん。
Armadillo-640でできるその他のキャリブレーションの方法は、お客様がご使
用になるGUIツールキット等のGUIアプリケーションの動作環境によって様々で
す。
例えば、X Window System上でGUIアプリケーションを動作させる場合は、
xinput_calibrator等を用いてX Window System側でキャリブレーションを行う
ことで実現可能です。

ファイル ファイルの説明
armadillo-640-expansion-interface.dtsi_.txt システムの都合上.dtsiファイルが添付できないためリネームしています。

ご教授頂いた内容を試しておりますが、上手くいかない状況です。

質問1: DTBの作成方法について
 at-dtWebを使用できないとのことから、以下の手順でを編集しDTBを作成しています。
 ご教授頂いた手順を実施するにあたり、DTBの作成は下記手順で問題ないでしょうか?
  
 ① 『armadillo-640-lcd70ext-l00.dtsi』を編集する
   
 ② ATDE7で下記コマンドを実行し、DTB作成
  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
 
 ③ 作成したDTBでarmadillo640の/mnt/boot/a640.dtbを書き換え
 
 ④ armadillo640を再起動
 
 LEDの表示だけであればこちらの内容で動作をしております。
 
  
質問2: ご教授頂いたコード編集について
『armadillo-640-lcd70ext-l00.dtsi』に追加する場合、 単にコードを追記するだけで
宜しいでしょうか?

 コードを追記しても、
  evtest /dev/input/event0
 でハードスイッチの操作は取得できますが、タッチイベントが取れませんでした。

質問3: at-dtwebを使ったDTB作成について
 『armadillo-640-expansion-interface.dtsi』を添付頂きましたが、
 at-dtwebで「OPTION BOARD -> LCD43EXT-L01」をアサインしDTBを作成したもの
 は試しておりますが、バックライト制御ができないため使用しておりません。
 
 質問1で作成したDTBだと
   echo 0 > /sys/class/backlight/backlight-display/bl_power ← バックライトON
   echo 1 > /sys/class/backlight/backlight-display/bl_power ← バックライトOFF
 こちらでバックライトの制御ができております。
 
 ただ、「OPTION BOARD -> LCD43EXT-L01」をアサインしたDTBを使用すると、
 上記コマンドでバックライトが変化しておりません。
 ※ 『backlight-display』の箇所はexXXXとなるので変更し確認しております
 
 at-dtwebで「OPTION BOARD -> LCD43EXT-L01」をアサインするだけでは
 設定が不足しているのでしょうか?

ファイル ファイルの説明
armadillo-640-lcd70ext-l00.dtsi_修正後.txt
armadillo-640-lcd70ext-l00.dtsi_修正前.txt

入江です。

> 質問1: DTBの作成方法について
お客様がご提示の手順で問題ございません。

> 質問2: ご教授頂いたコード編集について
> 『armadillo-640-lcd70ext-l00.dtsi』に追加する場合、 単にコードを追記するだけで
> 宜しいでしょうか?
追記するだけでは正しく動作しません。

タッチイベントを取得するには、前の回答の通り

	 pinctrl_tsc: tscgrp {
		fsl,pins = <
			MX6UL_PAD_GPIO1_IO01__GPIO1_IO01	0xb0		// CON11_37
			MX6UL_PAD_GPIO1_IO02__GPIO1_IO02	0xb0		// CON11_36
			MX6UL_PAD_GPIO1_IO03__GPIO1_IO03	0xb0		// CON11_35
			MX6UL_PAD_GPIO1_IO04__GPIO1_IO04	0xb0		// CON11_34
		>;
	 };

などを追記する必要がありますが、armadillo-640-lcd70ext-l00.dtsiには

	pinctrl_lcd70ext_l00hog: lcd70ext_l00hoggrp {
		fsl,pins = <
			MX6UL_PAD_GPIO1_IO04__GPIO1_IO04      0x1b0b0
			MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18      0x1b0b0
			MX6UL_PAD_GPIO1_IO03__GPIO1_IO03      0x130b0 /* 18BIT_ENABLE */
		>;
	};

が記述されており、GPIO1_IO04などのピンの設定が複数箇所でされています。
これでは期待した動作はしませんので、各ピンの設定が重複しないように記述
を消さなければならない箇所もあります。

その他お使いのLCDにおいては使用方法が違うピンなどもあるはずですので、
既存のdtsiファイルを参考に、新たに専用のdtsiファイルを作成して頂く方が
簡単かつ内容に過不足のないdtsが作成できるのでおすすめです。
その場合は、armadillo-640.dtsの最初で、

#include "armadillo-640-lcd70ext-l00.dtsi"

を新たに作成したdtsiファイルをインクルードするように変更することを忘れ
ないようお気をつけください。

>  at-dtwebで「OPTION BOARD -> LCD43EXT-L01」をアサインするだけでは
>  設定が不足しているのでしょうか?

こちらについては確認させていただきたいのですが、現在以下に示す状況であ
るということでしょうか?
1. at-dtwebで「OPTIONBOARD->LCD43EXT-L01」をアサインして生成された
armadillo-640-at-dtweb.dtbをArmadilloに適用した際にバックライトの設
定ができない
2. 添付いただいた「armadillo-640-lcd70ext-l00.dtsi_修正後.txt」と同等
の内容であるdtsiを用いてビルドしたarmadillo-640.dtbをArmadilloに適
用した際にはバックライトの設定が可能

以上、よろしくお願いいたします。

取り急ぎ、確認事項について回答させていただきます。

> >  at-dtwebで「OPTION BOARD -> LCD43EXT-L01」をアサインするだけでは
> >  設定が不足しているのでしょうか?
>
> こちらについては確認させていただきたいのですが、現在以下に示す状況であ
> るということでしょうか?
> 1. at-dtwebで「OPTIONBOARD->LCD43EXT-L01」をアサインして生成された
> armadillo-640-at-dtweb.dtbをArmadilloに適用した際にバックライトの設
> 定ができない
> 2. 添付いただいた「armadillo-640-lcd70ext-l00.dtsi_修正後.txt」と同等
> の内容であるdtsiを用いてビルドしたarmadillo-640.dtbをArmadilloに適
> 用した際にはバックライトの設定が可能
>
⇒ ご記載いただいた通りです。
  at-dtWebに『LCD43EXT-L01』という設定がございましたので、当初はこちらを
 流用すれば、弊社向けのDTBが作成できると考えておりましたが、実機に適用した
 際にバックライトON/OFF制御を実施しても変化が見られなかったため、質問1の
 方法を取っておりました。

 念のためですが、at-dtWebで「OPTIONBOARD->LCD43EXT-L01」のアサインで作成
 したdtsiのLCD設定を一部弊社向けに変更する場合、
 ① at-dtWebで「OPTIONBOARD->LCD43EXT-L01」をアサイン
 ② Saveを押下
 ③ /linux-v4.14-at24/arch/arm/boot/dtsの『armadillo-640-expansion-interface.dtsi』を編集
   LCD設定を一部弊社用に変更したいため
 ④ at-dtWebで/linux-v4.14-at24を再表示
 ⑤ 何も変更せずにSaveを押下
   armadillo-640-at-dtweb.dtbが再作成される

 Save時に実施しているコマンド詳細が分からなかったため、このような手順
 で作成しておりました。
 手順に間違いや問題などがございましたら、合わせてご指摘いただけると助かります。

入江です。

>  Save時に実施しているコマンド詳細が分からなかったため、このような手順
>  で作成しておりました。
>  手順に間違いや問題などがございましたら、合わせてご指摘いただけると助かります。
お客様のご提示の手順では、貴社用のLCD設定が反映されません。

at-dtwebはarmadillo-640-expansion-interface.dtsiの雛形を持っており、そ
の雛形をもとにユーザーの設定に応じたdtsiを生成してそれを既存の
armadillo-640-expansion-interface.dtsiに「上書き」しています。
そのため、お客様が追加でarmadillo-640-expansion-interface.dtsiに修正を
行っても、at-dtwebからビルドした場合は変更が反映されません。

つきましては、以下の手順をお試しください。
1. at-dtwebで「OPTIONBOARD->LCD43EXT-L01」(と必要ならばUART1)をアサインしてSave
2. armadillo-640-expansion-interface.dtsiを修正
3. ATDE上で以下を実行しビルド

[ATDE]$ ls
initramfs_a600-[version].cpio.gz linux-v4.14-at[version]
[ATDE]$ cd linux-v4.14-at[version]
[ATDE ~/linux-v4.14-at[version]]$ rm arch/arm/boot/dts/armadillo-640-at-dtweb.dtb //念の為削除
[ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640-at-dtweb.dtb
[ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-640-at-dtweb.dtb
arch/arm/boot/dts/armadillo-640-at-dtweb.dtb //dtbが生成されていることを確認

4. 生成されたarmadillo-640-at-dtweb.dtbをArmadilloに適用して動作確認

以上、よろしくお願いいたします。

返信が遅くなり申し訳ありません。
LCDのクロック周波数と解像度の変更だけでは設定が足りなかっ
たようで、
『armadillo-640-lcd70ext-l00.dtsi』を参考に、
『armadillo-640-expansion-interface.dtsi』に以下
の変更を加えることで解決いたしました。

-----------------------------------------------------------
ext_backlight_display: ext-backlight-display {
compatible = "pwm-backlight";
pwms = <&pwm5 0 5000000 PWM_POLARITY_INVERTED>;
brightness-levels = <0 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255>;
default-brightness-level = <128>;
status = "okay";
};
-----------------------------------------------------------

タッチイベントも取得できております。

以上、色々とご対応頂きありがとうございました。