nic-segawa
2018年6月20日 19時01分
お世話になっております。
Armadillo起動中に任意の画像を表示させようとしています。
Linux起動中の起動中画面はカーネルを変更することで任意の画像に変えることができました。
しかし、ブートローダー動作中の画面変更がうまく行っていません。
以下の投稿を参照しています。
https://armadillo.atmark-techno.com/forum/armadillo/598
現状、ブートローダー起動中は画面が真っ白となっているので、投稿内の「ブートローダーで、LCDコントローラーを初期化」ができていないのだと考えています。ブートローダーでのLCD制御方法を変更するにはどうすれば良いでしょうか?
LCDは開発キットに付属しているものとは違うものを使用しています。
よろしくお願い致します。
コメント
nic-segawa
ご回答ありがとうございます。
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,
よろしくお願い致します。
nic-segawa
at_ohsawa
その変更だけで動作するのであれば、下記が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 液晶変更版ロゴ出力サンプルイメージ |
nic-segawa
ご丁寧な回答誠にありがとうございます。
添付頂いたブートローダーを書き込んで試してみましたが、開発セット、LCD変更版共にロゴが表示されませんでした。
開発セットの場合、以下のような動作となっております。
1. 1秒程度白く表示される
2. カーネルとユーザーランドの展開中は黒い画面となる
3. 展開終了後に1秒程度白く表示される
4. Linux起動中以降はロゴが表示される
2.の所でロゴが表示されてほしいのですが、うまくいっていません。
at_ohsawa様の使用されている液晶と私の所有している開発キットの液晶が異っていることは有り得るでしょうか?
私の開発キットの液晶は取説等から確認する限りFG040360DSSWBG03となっています。
もしくは何か他の原因は考えられますでしょうか?
お手数をお掛け致しますが、よろしくお願い致します。
at_ohsawa
> 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
nic-segawa
ご回答ありがとうございます。
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を使用しております。
何か変更が必要な点はありますでしょうか?
よろしくお願い致します。
at_ohsawa
at_ohsawa
nic-segawa
at_ohsawa
> 使用しているのは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(); }
nic-segawa
at_ohsawa
nic-segawa
at_ohsawa
> ご回答ありがとうございます。
>
> 試しに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
nic-segawa
追加の情報ありがとうございます。
ロゴには「Loading」等の単純な文字を表示させるだけなので、多少のチラつきであれば問題無さそうです。
もし気になるようであればタイミングの調整を行ってみます。
ロゴ画像は以下のサイトでpng形式をppm形式に変換しました。
変換した画像をATDE5を使用して224色に減色、ASCII形式への変換を行いました。
その画像をLinuxカーネルのロゴに設定してコンパイルすることでlogo_armadillo_clut224.cが作成されましたので、そちらをブートローダーに使用することで無事にロゴの変更ができました。
nic-segawa
at_ohsawa
この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 |
nic-segawa
nic-segawa
at_ohsawa
2018年6月22日 9時20分
> 以下の投稿を参照しています。
>
> 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向けのパッチではどこを変えるか、参考情報を出せる
と思います。