nishioka
2023年3月2日 15時12分
Armadillo−Iot-g4にて、EDIDを指定したサイズに固定したいのですが可能でしょうか。
可能であればどのように設定すればいいのか教えてください。
よろしくお願いします。
コメント
nishioka
溝渕様
以前、そのサイトを参考に進めていたのですが
”3. 作成したバイナリを Rootfs にコピーする”の項目で、”${ROOTFS}/lib/firmaware/” 内にedidが存在せず諦めたのですが...。
私が行った方法は以下の通りです。
"1. menuconfig で CONFIG_DRM_LOAD_EDID_FIRMWARE を有効化してKernel Imageをビルドする"にて、
添付画像のように設定し、"make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j5"でビルド。
"2. Linux Kernel に読み込ませる EDID のバイナリを作成する"にて、
"$ cd ${WORK}/${KERNEL_TREE}/Documentation/EDID/"のディレクトリは存在しませんでした。
edit.resを確認し、"tools/edid/"内に800x600.Sなどのファイルが存在していたため、"tools/edid/"内でmakeし、800x600.binを作成。
この作成したbinを"firmaware/edid"へコピーしようとしたのですが、最初に書いた通り"edid"が存在しませんでした。
以上、よろしくお願いいたします。
> 溝渕です。
>
> > Armadillo−Iot-g4にて、EDIDを指定したサイズに固定したいのですが可能でしょうか。
> > 可能であればどのように設定すればいいのか教えてください。
>
> DRM_LOAD_EDID_FIRMWAREが使えるかもしれません。
> https://qiita.com/tkomagata/items/74a026f5cada3da21d6a
>
> お試しください。
>
ファイル | ファイルの説明 |
---|---|
1_menuconfig で CONFIG_DRM_LOAD_EDID_FIRMWARE を有効化 .png | |
edid.txt | 拡張子をrstからtxtに変更しています |
at_mizo
溝渕です。
> "2. Linux Kernel に読み込ませる EDID のバイナリを作成する"にて、
> "$ cd ${WORK}/${KERNEL_TREE}/Documentation/EDID/"のディレクトリは存在しませんでした。
先に示しましたページで紹介されていますように、
> Kernel v5.7以降は Documentation/admin-guide/edid.rst に変更になりました。
となります。
> edit.resを確認し、"tools/edid/"内に800x600.Sなどのファイルが存在していたため、"tools/edid/"内でmakeし、800x600.binを作成。
>
> この作成したbinを"firmaware/edid"へコピーしようとしたのですが、最初に書いた通り"edid"が存在しませんでした。
まず、ATDEで以下のディレクトリを作成し、
[atde]# mkdir /lib/firmaware/edid/
このディレクトリの中に800x600.binをコピーしてください。
次にLinuxカーネルコンフィギュレーションで、
EXTRA_FIRMWARE
に、
edid/800x600.bin
を追加してみてください。
これで、Linuxカーネルイメージに800x600.binが格納されると思います。
あとは、起動パラメータの設定を行ってみてください。
nishioka
溝渕様
"mkdir"で/edidを作成後、800x600.binのコピーができました。
ありがとうございます。勝手に作成して良かったんですね。
すみません。また質問ですが。
EXTRA_FIRMWARE に
edid/800x600.bin の追加は、添付写真の設定で問題ないでしょうか。
あと初歩的な質問で申し訳ないのですが、"起動パラメータの設定"とは何でしょうか。
以上、よろしくお願いいたします。
> 溝渕です。
>
> > "2. Linux Kernel に読み込ませる EDID のバイナリを作成する"にて、
> > "$ cd ${WORK}/${KERNEL_TREE}/Documentation/EDID/"のディレクトリは存在しませんでした。
>
> 先に示しましたページで紹介されていますように、
>
> > Kernel v5.7以降は Documentation/admin-guide/edid.rst に変更になりました。
>
> となります。
>
> > edit.resを確認し、"tools/edid/"内に800x600.Sなどのファイルが存在していたため、"tools/edid/"内でmakeし、800x600.binを作成。
> >
> > この作成したbinを"firmaware/edid"へコピーしようとしたのですが、最初に書いた通り"edid"が存在しませんでした。
>
> まず、ATDEで以下のディレクトリを作成し、
>
> [atde]# mkdir /lib/firmaware/edid/ >
> このディレクトリの中に800x600.binをコピーしてください。
>
> 次にLinuxカーネルコンフィギュレーションで、
> EXTRA_FIRMWARE
> に、
> edid/800x600.bin
> を追加してみてください。
>
> これで、Linuxカーネルイメージに800x600.binが格納されると思います。
>
> あとは、起動パラメータの設定を行ってみてください。
>
ファイル | ファイルの説明 |
---|---|
EXTRA_FIRMWARE_800x600.bin.png |
at_mizo
溝渕です。
> EXTRA_FIRMWARE に
> edid/800x600.bin の追加は、添付写真の設定で問題ないでしょうか。
いえ。違います。
"imx/sdma/sdma-imx7d.bin nxp/pcieuart9098_combo_v1.bin"となっている行でEnterを押して末尾に追加します。
"imx/sdma/sdma-imx7d.bin nxp/pcieuart9098_combo_v1.bin edid/800x600.bin"
のようになります。
> あと初歩的な質問で申し訳ないのですが、"起動パラメータの設定"とは何でしょうか。
https://qiita.com/tkomagata/items/74a026f5cada3da21d6a
の
「4. Kernel の bootargs に "drm_kms_helper.edid_firmware" を追加する」
の手順を実行することです。
以下のドキュメントを参考にして設定してください。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
drm_kms_helper.edid_firmware=800x600.bin
のようになると思います。
nishioka
溝渕様
> > あと初歩的な質問で申し訳ないのですが、"起動パラメータの設定"とは何でしょうか。
>
> https://qiita.com/tkomagata/items/74a026f5cada3da21d6a
> の
> 「4. Kernel の bootargs に "drm_kms_helper.edid_firmware" を追加する」
> の手順を実行することです。
>
> 以下のドキュメントを参考にして設定してください。
> https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
のことですが、この作業はATDEではなくArmadilloの方で行うというでしょうか。
at_mizo
nishioka
at_mizo
溝渕です。
> 私自身ネットなどで調べた程度の知識しかないためよく理解できていないのですが、ATDEで作成したLinuxカーネルをビルドし、ビルドしたものをSDブートでArmadilloへ。その後、先程伺った作業を行うという流れでいいのでしょうか。
そうですね。SDブートはしてもしなくても良いですが、ビルドしたLinuxカーネルがArmadilloで動作している状態にする必要があります。
ちなみにですが、意図した挙動とならない為に質問されていますか?
そうであれば、
[フォーラムの利用方法]
https://armadillo.atmark-techno.com/guide/site/forum
からリンクされている「技術系メーリングリストで質問するときのパターン・ランゲージ」を参考に、何に困っているかを教えていただけるとアドバイスしやすいです。
nishioka
溝渕様
> [フォーラムの利用方法]
> https://armadillo.atmark-techno.com/guide/site/forum
> からリンクされている「技術系メーリングリストで質問するときのパターン・ランゲージ」を参考に、何に困っているかを教えていただけるとアドバイスしやすいです。
フォーラムをサポートセンタ等のものと勘違いしておりました。申し訳ございません。
用件: 自動起動時に800x600の顔像度で表示したい。
実行手順&結果:
・local.d/set.start 内にfbsetとコンテナ起動の設定を記述
set.start 内容
/--
fbset -xres 800 -yres 600
podman_start container
--/
・解像度800x600のディスプレイにつないだ状態で起動すると、期待通りに800x600で表示されますが、解像度1920x1080のディスプレイにつないだ状態で起動すると、ディスプレイ左上に800x600の解像度で表示されます。
実際に行いたいこと:
・解像度1920x1080のディスプレイに左上ではなくフルサイズで表示させたい。
EDIDの設定方法を伺った経緯:
・local.d/set.startを記述した状態でArmadilloにHDMIケーブルを接続した状態で電源を入れると、[実行手順&結果]で書いた通りディスプレイ左上に表示されました。次に、HDMIケーブルを抜いた状態で電源を入れ、その後数秒経ってからHDMIケーブルを接続すると期待している1920x1080のディスプレイにフルサイズで表示されました。
・色々調べた結果、EDIDが影響しているのではないかと思い質問させていただきました。
私はArmadilloのpdfやネットで調べた程度の知識しかありませんが、改めてよろしくお願いいたします。
at_mizo
溝渕です。
> 実行手順&結果:
> ・local.d/set.start 内にfbsetとコンテナ起動の設定を記述
>
> set.start 内容
> /--
> fbset -xres 800 -yres 600
> podman_start container
> --/
>
> ・解像度800x600のディスプレイにつないだ状態で起動すると、期待通りに800x600で表示されますが、解像度1920x1080のディスプレイにつないだ状態で起動すると、ディスプレイ左上に800x600の解像度で表示されます。
恐らくfbsetで800x600を指定しているのが原因です。
i.MX8M PlusのHDMIの実装では、ディスプレイが対応する解像度(タイミング含む)をEDIDからダイナミックに取得して最大解像度で描画するようになっていたように記憶しています。
> 実際に行いたいこと:
> ・解像度1920x1080のディスプレイに左上ではなくフルサイズで表示させたい。
上記、1920x1080のディスプレイに、800x600の画像を1920x1080にリスケーリングして描画したいとい意味でしょうか? 上記、1920x1080のディスプレイの解像度を800x600に変更して800x600の画像をそのまま描画したいのでしょうか?
nishioka
at_mizo
溝渕です。
ご回答ありがとうございます。
> 1920x1080のディスプレイの解像度を800x600に変更して800x600の画像をそのまま描画したいです。
上記であれば、先に述べました以下の手順でできるのではないかと思います。
https://qiita.com/tkomagata/items/74a026f5cada3da21d6a
(恐らく対応していると思いますが)ディスプレイが800x600に対応しているかどうかは、次のように確認可能です。
Armadilloでedidバイナリを抜き出します。
[armadillo]# cat /sys/class/drm/card1-HDMI-A-1/edid > /tmp/edid
ATDEにedidバイナリを転送してdecodeします。この作業は、Armadillo上でdebianコンテナを利用して行う事も可能です。
[atde]$ apt update [atde]$ apt install edid-decode [atde]$ edid-decode [Armadilloからコピしたedidファイル]
nishioka
溝渕様
手順通り行ってみましたが、変化がありませんでした。
以下に私が行った手順を書きます。
手順:
1. EXTRA_FIRMWARE に edid/800x600.bin を追加し、
[ATDE]~/linux-5.10-5.10.168-r0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j5
を行ったところ、途中で以下のように表示されました。
drivers/staging/media/imx/imx8-mipi-csi2-sam.c: In function ‘csis_priv_ioctl’: drivers/staging/media/imx/imx8-mipi-csi2-sam.c:1414:3: warning: ignoring return value of ‘copy_from_user’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 1414 | copy_from_user(arg, arg_user, sizeof(TYPE));\ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/media/imx/imx8-mipi-csi2-sam.c:1449:3: note: in expansion of macro ‘USER_TO_KERNEL’ 1449 | USER_TO_KERNEL(struct csi_sam_format); | ^~~~~~~~~~~~~~ drivers/staging/media/imx/imx8-mipi-csi2-sam.c:1414:3: warning: ignoring return value of ‘copy_from_user’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 1414 | copy_from_user(arg, arg_user, sizeof(TYPE));\ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/media/imx/imx8-mipi-csi2-sam.c:1454:3: note: in expansion of macro ‘USER_TO_KERNEL’ 1454 | USER_TO_KERNEL(bool); | ^~~~~~~~~~~~~~
ですが、問題なく「Image」と「armadillo_iotg_g4.dtb」が作成されていました。
2. 以下を参考に作成したLinuxカーネルをArmadilloへ書き込みました。
https://armadillo.atmark-techno.com/blog/10899/10733
#update-kernel.desc # set version once for all below swdesc elements unless # forced with --version swdesc_option component=extra_os.kernel version=5.10.82-1 # write over files in /boot swdesc_files --dest /boot "Image" "armadillo_iotg_g4.dtb"
3. /boot/uboot_env.d/ 内にno_promptを作成しました。
#no_prompt bootdelay=-2 drm_kms_helper.edid_firmware=800x600.bin
その後以下のコマンドを実行し再起動をしましたが、変化がありませんでした。
[armadillo]# persist_file -v /boot/uboot_env.d/no_prompt [armadillo]# fw_setenv -s /boot/uboot_env.d/no_prompt
以上、よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
800x600の追加.png |
at_mizo
nishioka
溝渕様
> いちおうの確認ですが、以下のように表示されていますか?
>
>
> [armadillo]# zcat /proc/config.gz | grep DRM_LOAD_EDID_FIRMWARE > CONFIG_DRM_LOAD_EDID_FIRMWARE=y >
表示されています。
> また、正しくEDIDをloadできた場合、以下何かしらのログが表示されると思いますが、どのような結果になりますか?
>
>
> [armadillo]# dmesg | grep "EDID base block" >
>
確認したところ、ログは何も表示されませんでした。
ファイル | ファイルの説明 |
---|---|
スクリーンショット (137).png | 結果 |
at_mizo
溝渕です。
ログを送っていただきありがとうございます。
> >
> > [armadillo]# dmesg | grep "EDID base block" > >
> >
>
> 確認したところ、ログは何も表示されませんでした。
これが原因ですね。
https://qiita.com/tkomagata/items/74a026f5cada3da21d6a
> Kernel v5.10.41 では "drm_kms_helper.edid_firmware" ではなく、"drm.edid_firmware"になるようです。
なので、"/boot/uboot_env.d/"以下の内容を、
drm.edid_firmware=800x600.bin
のように修正してみていただけますか?
また、再起動後、次のようにコマンドを実行して、意図した起動パラメータが設定されている事を確認してみてください。
armadillo:~# cat /proc/cmdline
nishioka
溝渕様
armadillo:~# cat /boot/uboot_env.d/no_prompt botdelay=-2 drm.edid_firmware=800x600.bin #再起動後 armadillo:~# cat /proc/cmdline console=ttymxc1,115200 root=/dev/mmcblk2p2 rootwait ro quiet
となりました。
申し訳ありません。再起動後にコマンド実行で表示された内容が理解できていないのですが、
これは設定できていないということでしょうか。
よろしくお願いいたします。
at_mizo
nishioka
at_mizo
溝渕です。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
上記で行っているのは、U-Boot環境変数の設定です。
Linuxカーネル起動時パラメータを示すU-boot環境変数は、"optargs"です。マニュアルの手順に従う場合は次のようになると思います。
[armadillo]# vi /boot/uboot_env.d/edid optargs=quiet drm.edid_firmware=800x600.bin [armadillo]# persist_file /boot/uboot_env.d/edid [armadillo]# fw_setenv -s /boot/uboot_env.d/edid [armadillo]# reboot :snip [armadillo]# cat /proc/cmdline console=ttymxc1,115200 root=/dev/mmcblk2p1 rootwait ro quiet drm.edid_firmware=800x600.bin
nishioka
溝渕様
>
> https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
>
> 上記で行っているのは、U-Boot環境変数の設定です。
>
> Linuxカーネル起動時パラメータを示すU-boot環境変数は、"optargs"です。マニュアルの手順に従う場合は次のようになると思います。
>
>
> [armadillo]# vi /boot/uboot_env.d/edid > optargs=quiet drm.edid_firmware=800x600.bin > [armadillo]# persist_file /boot/uboot_env.d/edid > [armadillo]# fw_setenv -s /boot/uboot_env.d/edid > [armadillo]# reboot > :snip > [armadillo]# cat /proc/cmdline > console=ttymxc1,115200 root=/dev/mmcblk2p1 rootwait ro quiet drm.edid_firmware=800x600.bin >
>
ありがとうございます。
上記の通りに行い再起動したところ
armadillo:~# cat /proc/cmdline console=ttymxc1,115200 root=/dev/mmcblk2p1 rootwait ro quiet drm.edid_firmware=800x600.bin
と表記されるようになりました。しかし、
armadillo:~# dmesg | grep "EDID base block" armadillo:~#
では、何も表示されませんでした。
再起動した際に気になる点がありました。
[ 1.156315] mdio_bus stmmac-1: MDIO device at address 0 is missing. [ 1.183948] [drm:edid_load] *ERROR* Requesting EDID firmware "800x600.bin" failed (err=-2)
とエラーが発生していたのですが、armadilloの"/lib/firmware/edid"内にも"800x600.bin" が必要なのでしょうか。
以上、よろしくお願いいたします。
at_dominique.m…
nishiokaさん、
横からすみません、
マルティネです。
> [ 1.156315] mdio_bus stmmac-1: MDIO device at address 0 is missing. > [ 1.183948] [drm:edid_load] *ERROR* Requesting EDID firmware "800x600.bin" failed (err=-2)
> とエラーが発生していたのですが、armadilloの"/lib/firmware/edid"内にも"800x600.bin" が必要なのでしょうか。
EXTRA_FIRMWARE
で入れたものは armadillo に不要ですが、drm.edid_firmware
に edid/
のパスの部分も必要です。
パラメターを drm_kms_helper.edid_firmware=edid/800x600.bin
に直して見てください。
よろしくお願いします。
nishioka
at_mizo
2023年3月2日 15時26分
溝渕です。
> Armadillo−Iot-g4にて、EDIDを指定したサイズに固定したいのですが可能でしょうか。
> 可能であればどのように設定すればいいのか教えてください。
DRM_LOAD_EDID_FIRMWAREが使えるかもしれません。
https://qiita.com/tkomagata/items/74a026f5cada3da21d6a
お試しください。