Armadilloフォーラム

png_display による画面表示について

tomi_vhi

2023年6月21日 16時23分

渡邊です。
現在、Armadillo-460 で画面表示をさせようと色々試していっています。
そこで、下記の png_display の記事を参考に、画面表示を試みてみましたがエラーとなります。
https://armadillo.atmark-techno.com/blog/615/1748

結果は下記の通り。
[root@armadillo460-0 (ttymxc1) ~]# DISPLAY=:0 ./png_display
./png_display: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory

GTK のライブラリの問題のように思えますが、どのようにすればよいでしょうか。(何らかの設定変更が必要?)

また、romfs.img.gz で書いたとき、この png_display を自動起動させるようなことは可能でしょうか?
下記の記事が近いような気がしましたが、rc.local のファイルが見当たりません。
(440のフォルダには /etc/default/ に rc.local があり、中を見ると Starting functester と書かれている)
https://armadillo.atmark-techno.com/forum/armadillo/1602

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

ファイル ファイルの説明
result.png
コメント

溝渕です。

> 結果は下記の通り。
> [root@armadillo460-0 (ttymxc1) ~]# DISPLAY=:0 ./png_display
> ./png_display: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
>
> GTK のライブラリの問題のように思えますが、どのようにすればよいでしょうか。(何らかの設定変更が必要?)

該当記事[2]は、Armadillo-440の標準イメージを対象としたものです。Armadillo-460のイメージにはXアプリケーション(functester)が含まれておらず、付随するライブラリもインストールされません。

以下、png_displayの動作環境を構築する手順を説明します。

まずは、ソフトウェアマニュアル[1]を参照して出荷イメージと同じイメージを作成してください。

次に、該当記事で紹介されているアプリケーション(png_display)をビルドしてください。

最後に、アプリケーションをビルドしたatmark-dist-[version]/romfs/usr/bin/にコピーして、"make romfs"コマンドを実行します。実際の手順は、こちら[3]が参考になるかと思います。これで、アプリケーションが依存するライブラリを含んだユーザーランドイメージができあがります。

このユーザーランドイメージをArmadillo-640に書き込むとアプリケーションが実行できるようになっていると思います。

[1]: https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_sof…
[2]: https://armadillo.atmark-techno.com/blog/615/1748
[3]: https://armadillo.atmark-techno.com/blog/615/996

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

今まで、第7章 ビルドで書かれている通り、[....dist]$ make コマンドで romfs .img.gz と linux.bin.gz を作っており、
この場合、romfs フォルダが書き変わってしまうのは挙動でわかっていました。
make romfs → make image で、png_display がpng_display が /usr/bin/ フォルダに入りました。

png_display が /usr/bin/ フォルダに入ったので、DISPLAY=:0 ./png_display を実行したのですが、下記のように表示されます。
何が原因となっているのでしょうか?
(/tmp/フォルダに a440_480x272.png は予め入っています)

(png_display:1335): Gtk-WARNING **: cannot open display: :0
[....dist]$ echo $DISPLAY
(空白)

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

ファイル ファイルの説明
png_display.png

溝渕です。

> export DISPLAY=:0 とすると echo $DISPLAY は :0 となりますが、状況は変わりません。

Xfbdev(KDrive)が起動していないのではないでしょうか?

atmar-distのソースに含まれる、以下のArmadillo-440用の起動スクリプトを参考に、Xfbdevを起動してみてください。
vendors/AtmarkTechno/Armadillo-440/etc/init.d/xfbdev

渡邊です。

> atmar-distのソースに含まれる、以下のArmadillo-440用の起動スクリプトを参考に、Xfbdevを起動してみてください。
> vendors/AtmarkTechno/Armadillo-440/etc/init.d/xfbdev
vendors/AtmarkTechno/Armadillo-440/etc/init.d/xfbdev の xfbdev を
vendors/AtmarkTechno/Armadillo-460/etc/init.d/ に入れてみましたが、状況は変わりません。
(romfs/etc/init.d/ 内の xfbdev は変更されていました)

とりあえず xfbdev は元の状態に戻しています。

追伸
10分すると、LCDの表示が消えてしまうのも何か関係していますでしょうか?
LCDはずっと表示するようにしたいです。

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

溝渕です。

> vendors/AtmarkTechno/Armadillo-440/etc/init.d/xfbdev の xfbdev を
> vendors/AtmarkTechno/Armadillo-460/etc/init.d/ に入れてみましたが、状況は変わりません。
> (romfs/etc/init.d/ 内の xfbdev は変更されていました)

"romfs/etc/init.d/"内にファイルを置いただけでは、起動時に自動実行されません。例えば、"romfs/etc/rc.d/S80xfbdev"のようにシンボリックリンクを作成してください。

実行されたかどうかの確認は、起動後に"ps axu"コマンド等で、xfbdevが起動しているかどうかを確認してみてください。

> 10分すると、LCDの表示が消えてしまうのも何か関係していますでしょうか?
> LCDはずっと表示するようにしたいです。

以下のFAQを参考にしてみてください。

https://armadillo.atmark-techno.com/faq/kdrive-auto-blank

渡邊です。

romfs/etc/rc.d/S80xfbdev (S80xfbdev は etc/init.d/xfbdev のシンボリックリンク) を入れてみました。
"ps axu"コマンドで見ましたが、xfbdev が起動しているように思えません。

添付は"ps axu"コマンドを実行してみた結果です。
この後はどのようにしたらよいでしょうか?

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

ファイル ファイルの説明
TeraTerm.jpg

溝渕です。

> "ps axu"コマンドで見ましたが、xfbdev が起動しているように思えません。

ちなみにですが、
romfs/etc/init.d/xfbdev
に実行権限は付与していますか?

渡邊です。
>romfs/etc/init.d/xfbdev
>に実行権限は付与していますか?
緑色になっているので、付与されているということでしょうか? (添付ファイル参照)

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

ファイル ファイルの説明
xfbdev.jpg

溝渕です。

> 緑色になっているので、付与されているということでしょうか? (添付ファイル参照)

恐らくは付与されていると思います。確信を得たい場合は、次のようにコマンドを実行してください。

[armadillo]# ls -l /etc/init.d/

ちにみにですが、

[armadillo]# sh -x /etc/init.d/xfbdev

のようにコマンドを実行した場合はどうなりますか?

- touch screen
- gpio keys
- /usr/bin/Xfbdev

のいずれかが無い場合は実行できないと思います。

渡邊です。

添付は、それぞれのコマンドの結果です。
xfbdev~ がありますが、これはPCの romfs/etc/init.d/ には存在しません。何か影響しますでしょうか?
xfbdev は Armadilo-440 からコピー(ファイルの日付は 2019.12.26)しただけなので、チルダなしのものが正しいと思います。

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

ファイル ファイルの説明
xfbdev.jpg

溝渕です。

> xfbdev~ がありますが、これはPCの romfs/etc/init.d/ には存在しません。何か影響しますでしょうか?
> xfbdev は Armadilo-440 からコピー(ファイルの日付は 2019.12.26)しただけなので、チルダなしのものが正しいと思います。

チルダありの方はバックアップファイルだと思います。動作には影響しないと思います。

手動で"/etc/init.d/xfbdev"を実行すると、Xfbdevが起動できているように見えます。"ps axu"コマンドでプロセスが存在するか確認してみてください。

渡邊です。

./xfbdev で Starting Xfbdev: done となりますが、"ps axu"コマンドでプロセスが存在しないように見えます。
(添付ファイル参照)

ファイル ファイルの説明
console.jpg

溝渕です。

以前、以下を実行してもらった時に、

sh -x /etc/init.d/xfbdev

出力されたログの中にある、"/usr/bin/Xfbdev"で始まるコマンドを、引数付きでそのまま実行してみていただけますか?

これは、
/etc/init.d/xfbdev
の中で実行されるコマンドなのですが、上記スクリプトを実行した場合のログは/dev/nullにリダイレクトされる為に確認することができません。

恐らく、Xfbdevのプロセスが無いという事は、/usr/bin/Xfbdevが失敗しているのではないかと思います。

渡邊です。

下記のように表示されます。
/usr/bin/ のディレクトリに Xfbdev が入っていないのですが、それが影響しますでしょうか?
(Xfbdev は /etc/init.d/ のディレクトリに入っていて、そのシンボリックリンクが /etc/rc.d/ に S80xfbdev の名前で入っている状態)

[root@armadillo460-0 (ttymxc1) /usr/bin]# /usr/bin/Xfbdev -retro -s 0 -mouse tslib,,device=/dev/input/event1 -keybd evdev,,device=/dev/input/event0
-ash: /usr/bin/Xfbdev: not found

溝渕です。

> /usr/bin/ のディレクトリに Xfbdev が入っていないのですが、それが影響しますでしょうか?

そうですね。これが原因です。

ユーザーランドのコンフィギュレーション(Customize Vendor/User Settings)で、以下を有効化してください。

CONFIG_USER_XSERVER_KDRIVE
CONFIG_USER_XSERVER_1_4_2

> (Xfbdev は /etc/init.d/ のディレクトリに入っていて、そのシンボリックリンクが /etc/rc.d/ に S80xfbdev の名前で入っている状態)

"/usr/bin/Xfbdev"は、KDriveのバイナリです。
"/etc/init.d/xfbdev"は、"/usr/bin/Xfbdev"のラッパースクリプトです。
"/etc/rc.d/S80xfbdev"は、"/etc/init.d/xfbdev"を起動時に自動実行する為のシンボリックリンクです。

渡邊です。

添付のこの部分の設定のことでしょうか?
これを設定したところ /usr/bin/ のディレクトリに Xfbdev が入りました。

ファイル ファイルの説明
KDrive.jpg

溝渕です。

> 添付のこの部分の設定のことでしょうか?

そうです。この状態でもKDriveが起動できませんか?

渡邊です。

Armadillo-460に書き込みが完了し、/usr/bin/ ディレクトリに Xfbdev が入っていることを確認しました。
ps axu コマンドをしてみましたが、まだ、プロセスには表示されていないように思えます。

下記を実行すると、添付のような Fatal server error: が出ます。

[root@armadillo460-0 (ttymxc1) ~]# /usr/bin/Xfbdev -retro -s 0 -mouse tslib,,device=/dev/input/event1 -keybd evdev,,device=/dev/input/event0
ファイル ファイルの説明
console.jpg

溝渕です。

ユーザーランドのコンフィギュレーション(Customize Vendor/User Settings)で、"X.Org version"を、1.4.2ではなく、1.12.4を選択してみてもらえますか。

渡邊です。

Armadillo-440 の Xfbdev を使っていたので、元々 Armadillo-460 にあった Xfbdev にもどして、
sh -x /etc/init.d/xfbdev を実行させると、中央にバツ印の画面が出るようになりました。(添付ファイル)

この状態で ps axu をすると、プロセスに出てきますが、スタートアップした状態?では起動していないようです。

[root@armadillo460-0 (ttymxc1) ~]# ps axu
  PID  Uid     VmSize Stat Command
    1 root        680 S   init
 ・・・
 1311 root        824 S   -ash
 1335 root       1840 S   /usr/bin/Xfbdev -s 0 -mouse tslib,,device=/dev/input/
 1350 root        752 R   ps axu

スタートアップした状態で起動しない原因は、何が考えられるでしょうか?

ファイル ファイルの説明
lcd.jpg

溝渕です。

> スタートアップした状態で起動しない原因は、何が考えられるでしょうか?

上記、起動直後の状態の意味でしょうか?

起動ログの中に次のような文字列があるかどうかを確認してみてもらえますか。

Starting Xfbdev: done

もし、無い場合は、起動スクリプト関連のファイルが正しく配置できていないものと思われます。

渡邊です

シンボリックリンクを作り直して、make romfs 、make image をしたものを書き込んだら、うまくいきました。
(Starting Xfbdev: done が表示されました)
/etc/init.d/ の xfbdev を入れ変えを繰り返したことが影響したかもしれません。

この状態で、 png_display を試してみたいと思います。

渡邊です

無事 png_display (480x272) の画面を出すことができました。
(LCDは 800x600 の解像度なので、左上に 480x272 の画像が表示)
ありがとうございました。

ファイル ファイルの説明
png_display.jpg

溝渕です。

> 無事 png_display (480x272) の画面を出すことができました。

動作して良かったです。

結果を報告していただき、ありがとうございました。