Armadilloフォーラム

ブートローダーでの起動画面表示について

nic-segawa

2018年6月20日 19時01分

お世話になっております。

Armadillo起動中に任意の画像を表示させようとしています。
Linux起動中の起動中画面はカーネルを変更することで任意の画像に変えることができました。
しかし、ブートローダー動作中の画面変更がうまく行っていません。
以下の投稿を参照しています。

https://armadillo.atmark-techno.com/forum/armadillo/598

現状、ブートローダー起動中は画面が真っ白となっているので、投稿内の「ブートローダーで、LCDコントローラーを初期化」ができていないのだと考えています。ブートローダーでのLCD制御方法を変更するにはどうすれば良いでしょうか?
LCDは開発キットに付属しているものとは違うものを使用しています。

よろしくお願い致します。

コメント

> 以下の投稿を参照しています。
>
> https://armadillo.atmark-techno.com/forum/armadillo/598
>
> 現状、ブートローダー起動中は画面が真っ白となっているので、投稿内の「ブートローダーで、LCDコントローラーを初期化」ができていないのだと考えています。ブートローダーでのLCD制御方法を変更するにはどうすれば良いでしょうか?
> LCDは開発キットに付属しているものとは違うものを使用しています。
>
> よろしくお願い致します。

このURLのパッチを当てたのだと思います。
http://lists.atmark-techno.com/pipermail/armadillo/attachments/20130313…

LCDパネルの要求する信号タイミングが付属のLCDと異なるのであれば、
クロックやブランク区間を指定するレジスタに異なる値を設定する必要があります。

Linux側で、LCDに表示を行うため変更したkernelのソースコードの差分、configを
教えてもらえると、bootloader向けのパッチではどこを変えるか、参考情報を出せる
と思います。

ご回答ありがとうございます。

Linuxはlinux-2.6.26-at26を使用しております。
Linux側では液晶を表示させるために/drivers/video/mxc/mxcfb_modedb.cファイル内の以下の2カ所を変更しております。

123行目
変更前:"FG040360DSSWBG03", 60, 480, 272, 110229 ,35, 5, 6, 8, 5, 2,
変更後:"FG040360DSSWBG03", 60, 480, 272, 111111, 43, 8, 12, 4, 1, 1,

212行目
変更前:.disp_iface = MXCFB_DISP_OE_ACT_HIGH | MXCFB_DISP_CLK_INVERT,
変更後:.disp_iface = MXCFB_DISP_OE_ACT_HIGH,

よろしくお願い致します。

お世話になっております。

試しに開発キットにattachment.patchを適用したブートローダーを書き込んで起動させてみましたが、ロゴは表示されませんでした。
パッチファイル以外で必要な修正箇所がありましたら教えて頂けますでしょうか?
よろしくお願い致します。

その変更だけで動作するのであれば、下記がattachment.patchとの差分になります。

--- a/src/target/armadillo4x0/mx25_lcdc.c
+++ b/src/target/armadillo4x0/mx25_lcdc.c
@@ -94,9 +94,9 @@ void lcdc_init(void)
        write32(0x53fbc00c, 0x00000000);
        write32(0x53fbc010, 0x010100ff);
        write32(0x53fbc014, 0x00000000);
-       write32(0x53fbc018, 0xfae08b8c);
-       write32(0x53fbc01c, 0x10000420);
-       write32(0x53fbc020, 0x08000806);
+       write32(0x53fbc018, 0xfac08b8c);
+       write32(0x53fbc01c, 0x00000728);
+       write32(0x53fbc020, 0x0400040C);
        write32(0x53fbc024, 0x00000000);
        write32(0x53fbc028, 0x00120300);
        write32(0x53fbc02c, 0x00000000);

また、液晶モデル開発セットに標準搭載の液晶を接続しているのであれば、
hermit-at v2.4.0 に対して attachment.patch を変更無しで適用するとTux(Linuxのペンギン)の
ロゴがbootloaderの入力待ち状態で表示されることが確認できました。
もし、この条件の下でロゴが表示されないようであれば、ソースコードへのパッチ適用、
ビルド、書き込みまでの操作内容を教えてください。

動作確認用に、液晶モデル開発セット向け(attatchment.patchそのまま適用)のロゴの出るbootloaderのバイナリと、
このレスに記載したnic-sagawa樣のLCD向けの設定に変更してビルドしたバイナリを添付しておきました。

ファイル ファイルの説明
loarder-a4x0-2.4.0-stdlcd_logo.bin A440液晶モデル開発セット向けロゴ出力サンプルイメージ
loarder-a4x0-2.4.0-modlcd_logo.bin A440 液晶変更版ロゴ出力サンプルイメージ

ご丁寧な回答誠にありがとうございます。

添付頂いたブートローダーを書き込んで試してみましたが、開発セット、LCD変更版共にロゴが表示されませんでした。
開発セットの場合、以下のような動作となっております。

1. 1秒程度白く表示される
2. カーネルとユーザーランドの展開中は黒い画面となる
3. 展開終了後に1秒程度白く表示される
4. Linux起動中以降はロゴが表示される

2.の所でロゴが表示されてほしいのですが、うまくいっていません。
at_ohsawa様の使用されている液晶と私の所有している開発キットの液晶が異っていることは有り得るでしょうか?
私の開発キットの液晶は取説等から確認する限りFG040360DSSWBG03となっています。
もしくは何か他の原因は考えられますでしょうか?

お手数をお掛け致しますが、よろしくお願い致します。

> at_ohsawa様の使用されている液晶と私の所有している開発キットの液晶が異っていることは有り得るでしょうか?
> 私の開発キットの液晶は取説等から確認する限りFG040360DSSWBG03となっています。

問題ありません。何度かリビジョン変更はしていますが、このパッチで表示できないような
仕様の変更は、発売以来ありません。

> もしくは何か他の原因は考えられますでしょうか?

ブートローダーのイメージが書き込まれていないことが考えられます。

ArmadilloのJP2をショートした状態で、電源を入れたときにシリアルコンソールに
出力されるbootloaderのビルド日時とバージョン表記を確認してください。

先の私の添付したバイナリの場合は、下記のようになります。

- loarder-a4x0-2.4.0-stdlcd_logo.bin の場合

Hermit-At v2.4.0-dirty (armadillo4x0) compiled at 15:56:32, Jul 04 2018

- loarder-a4x0-2.4.0-modlcd_logo.bin の場合

Hermit-At v2.4.0.1.g3497 (armadillo4x0) compiled at 17:40:30, Jul 04 2018

ご回答ありがとうございます。

loarder-a4x0-2.4.0-modlcd_logo.bin の場合はバージョン表記は一致しておりました。
しかし、こちらを書き込んでも液晶画面が白表示のままとなっています。

loarder-a4x0-2.4.0-stdlcd_logo.bin の場合のバージョンは以下のようになっていました。

Hermit-At v2.4.0-ga11d (armadillo4x0) compiled at 17:39:12, Jul 04 2018

ブートローダーの書き込みにはHermit-At Win v2.4.0を使用しております。
何か変更が必要な点はありますでしょうか?

よろしくお願い致します。

> loarder-a4x0-2.4.0-stdlcd_logo.bin の場合のバージョンは以下のようになっていました。
>
> Hermit-At v2.4.0-ga11d (armadillo4x0) compiled at 17:39:12, Jul 04 2018

すみません、先の私の例が間違いで、stdlcdの場合はこれで正しいです。
このイメージで起動している状態で、"LCD開発セットの液晶パネル"で
bootloaderによるロゴが表示されないということでしょうか。

ご回答ありがとうございます。

LCD開発セットの液晶パネルを使用しておりますが、黒表示となってロゴは表示されません。
使用しているのはArmadillo-410です。

よろしくお願い致します。

> 使用しているのはArmadillo-410です。

Armadillo-410であれば下記の箇所変更してビルドしてみてください。

-- a/src/target/armadillo4x0/board.c
+++ b/src/target/armadillo4x0/board.c
@@ -747,7 +747,7 @@ static void armadillo4x0_init(struct platform_info *pinfo)
        armadillo4x0_setup_console(pinfo);
        update_target_profile();
 
-       if (priv->type == BOARD_TYPE_ARMADILLO440)
+       if (priv->type == BOARD_TYPE_ARMADILLO440 || priv->type == BOARD_TYPE_ARMADILLO410)
                lcdc_init();
 }

ご回答ありがとうございます。

開発キットの方は上記の変更の結果、無事ロゴが表示されるようになりました。
液晶を変更している方は、board.cへの変更に加えて上記のmx25_lcdc.cへの変更を適用しましたが、まだ白表示のままとなっています。
他に変更が必要な箇所はありますでしょうか?

よろしくお願い致します。

> 開発キットの方は上記の変更の結果、無事ロゴが表示されるようになりました。
> 液晶を変更している方は、board.cへの変更に加えて上記のmx25_lcdc.cへの変更を適用しましたが、まだ白表示のままとなっています。
> 他に変更が必要な箇所はありますでしょうか?

いいえ、無いと思います。

変更後のLCDの信号波形を確認して、期待しているタイミングと異なる点がないか
確認することはできますか。

ご回答ありがとうございます。

試しにmx25_lcdc.cへの変更を行っていないブートローダーを使用した所、ロゴが表示されました。
mx25_lcdc.cへの変更は不要だったようです。
あとはロゴを任意のものに変更すれば目的は達成できそうです。

詳細までご教授頂きましてありがとうございました。

> ご回答ありがとうございます。
>
> 試しにmx25_lcdc.cへの変更を行っていないブートローダーを使用した所、ロゴが表示されました。
> mx25_lcdc.cへの変更は不要だったようです。

もし変更しなくても表示される場合、期待されているLCDの信号タイミングと
多少異なるのでチラつき等あるかと思います。

私がmx25_lcdc.cの修正点として挙げたレジスタの値はNXP社から配布されている
i.MX25のリファレンスマニュアル中"LCDC"の項に定義があるので、タイミングの
修正が必要であれば調整してみてください。

i.MX25 Multimedia Applications Processor Reference Manual
https://www.nxp.com/docs/en/reference-manual/IMX25RM.pdf

ロゴを定義したソースコードはgimp等でascii pnm形式の画像ファイルを用意して、
linuxカーネルのソースコードに含まれるツール pnmtologo を使って変換することができます。
pnmtologoは一度kernelをコンパイルしないとビルドされません。

[ATDE]$  cd linux-2.6.26-at/
[ATDE]$  ./scripts/pnmtologo  anything.pnm -n  logo_armadillo_clut224  >  logo_armadillo_clut224.c
[ATDE]$ cat logo_armadillo_clut224.c

追加の情報ありがとうございます。

ロゴには「Loading」等の単純な文字を表示させるだけなので、多少のチラつきであれば問題無さそうです。
もし気になるようであればタイミングの調整を行ってみます。

ロゴ画像は以下のサイトでpng形式をppm形式に変換しました。

https://jinaconvert.com/jp/

変換した画像をATDE5を使用して224色に減色、ASCII形式への変換を行いました。
その画像をLinuxカーネルのロゴに設定してコンパイルすることでlogo_armadillo_clut224.cが作成されましたので、そちらをブートローダーに使用することで無事にロゴの変更ができました。

お世話になっております。

起動時のロゴが表示されて解決かと思われたのですが、1点問題がありました。
液晶のバックライトの輝度調整ができなくなってしまいました。標準のブートローダーに戻すと輝度調整できるため、ブートローダーに加えた変更が原因になっていると思われます。
輝度調整は以下のファイルを書き換えることで行っています。

/sys/class/backlight/pwm-backlight/brightness

何か解決する手段はありますでしょうか?
よろしくお願い致します。

このbootloaderの改造はpwmの設定の実装を省くため、
標準とは異なり、バックライトの調光用の信号をpwmではなく
gpioにmuxして、調光無しで点灯させているのですが、

linux-2.6.26-atの実装は、bootloaderによって調光用の信号が
pwmにmux済みである前提で書いてあるので、linux側で
制御できなくなってますね。

カーネルに添付のパッチ当ててビルドしてください。
bootloaderに頼らずカーネルが調光用の端子をpwmにmuxするので
以前と同じように調光できるようになります。

ファイル ファイルの説明
linux-2.6.26-at-pwm-mux.patch

お世話になっております。

ご回答ありがとうございます。
パッチファイルを適用した所、調光できるようになりました。
ありがとうございました。

追記ですが、新フラッシュメモリ適用品の場合、board.c内の修正を以下のように変更する必要がありましたのでお知らせさせて頂きます。

if (priv->type == BOARD_TYPE_ARMADILLO440 || priv->type == BOARD_TYPE_ARMADILLO410 || priv->type == BOARD_TYPE_ARMADILLO411)
lcdc_init();