okamotoatsushi
2023年11月14日 17時34分
お世話になっております。
岡本です。
https://armadillo.atmark-techno.com/forum/armadillo/11706
上記のフォーラムで相談させていただいていた件に続いての質問です。
担当者が変わりましたのと、時間が経過しましたので、別フォーラムでのご相談とさせていただきます。
現在、Armadillo-G4にてLVDSを用いてLCDへの表示をする際に、LCDの画面にチラつきが発生している状況です。
起動時からの流れとしましては、
①電源ON
②U-BOOTにてLCDにロゴを表示
③Starting kernel ・・・LCDのロゴ消灯
④LCDの画面にチラつき発生
⑤fbsplash表示
⑥containerAPP実行 APP画面表示
となっています。
下記起動時のログです
U-Boot SPL 2020.04-giken_v0107 (Nov 14 2023 - 16:17:33 +0900) setup_rtc_disarm_alarm: Can't find device id=0x32 DDRINFO: start DRAM init DDRINFO: DRAM rate 4000MTS DDRINFO:ddrphy calibration done DDRINFO: ddrmix config done Normal Boot Trying to boot from BOOTROM image offset 0x0, pagesize 0x200, ivt offset 0x0 NOTICE: BL31: v2.4(release): NOTICE: BL31: Built : 13:15:38, Oct 16 2023 U-Boot 2020.04-giken_v0107 (Nov 14 2023 - 16:17:33 +0900) CPU: i.MX8MP[8] rev1.1 1600 MHz (running at 1200 MHz) CPU: Industrial temperature grade (-40C to 105C) at 31C Model: Atmark-Techno Armadillo X2 Series DRAM: Hold key pressed for tests: t (fast) / T (slow) 2 GiB WDT: Started with servicing (10s timeout) MMC: FSL_SDHC: 1, FSL_SDHC: 2 Loading Environment from MMC... OK [*]-Video Link 0mxs_set_lcdclk,set rate to 65002khz, pre = 1, post = 16 (1024 x 768) [0] lcd-controller@32e90000, video [1] lvds-channel@0, display [2] lvds0_panel, panel In: serial Out: serial Err: serial BuildInfo: - ATF - U-Boot 2020.04-giken_v0107 first boot since power on switch to partitions #0, OK mmc2(part 0) is current device flash target is MMC:2 Net: No ethernet found. Fastboot: Normal Saving Environment to MMC... Writing to redundant MMC(2)... OK Normal Boot Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc2(part 0) is current device 32069640 bytes read in 695 ms (44 MiB/s) Booting from mmc ... ## Checking Image at 40480000 ... Unknown image format! 60139 bytes read in 2 ms (28.7 MiB/s) Loading fdt boot/armadillo.dtb ## Flattened Device Tree blob at 45000000 Booting using the fdt blob at 0x45000000 Loading Device Tree to 0000000051bc3000, end 0000000051bf4fff ... OK Starting kernel ... [ 0.078246] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 0.078257] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 0.078267] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl [ 0.078275] gpio-reset lvds-reset: Error applying setting, reverse things back [ 1.265427] samsung-hdmi-phy 32fdff00.hdmiphy: failed to get phy apb clk: -517 [ 1.265566] imx8-pcie-phy 32f00000.pcie-phy: failed to get imx pcie phy clock [ 1.343801] imx-lcdifv3 32e90000.lcd-controller: No pix clock get: -517 [ 1.350718] imx-lcdifv3 32fc6000.lcd-controller: No irq get, ret=-517 [ 1.360319] imx-hdmi-pavi 32fc4000.hdmi-pai-pvi: No pvi clock get [ 1.534128] fsl-aud2htx 30cb0000.aud2htx: failed to get mem clock [ 1.542002] imx-cdnhdmi sound-hdmi: snd_soc_register_card failed (-517) [ 1.566359] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 1.578740] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 1.585715] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl [ 1.598939] gpio-reset lvds-reset: Error applying setting, reverse things back [ 1.628231] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock [ 1.794647] samsung-hdmi-phy 32fdff00.hdmiphy: failed to get phy apb clk: -517 [ 1.817171] imx-lcdifv3 32fc6000.lcd-controller: No irq get, ret=-517 [ 1.840771] imx6q-pcie 33800000.pcie: invalid resource [ 2.320369] imx-cdnhdmi sound-hdmi: snd_soc_register_card failed (-517) [ 2.838890] imx6q-pcie 33800000.pcie: failed to initialize host [ 2.844827] imx6q-pcie 33800000.pcie: unable to add pcie port. OpenRC 0.44.7.10dab8bfb7 is starting up Linux 5.10.112-0-at (aarch64) * Mounting /proc ... [ ok ] * Mounting /run ... * /run/openrc: creating directory * /run/lock: creating directory * /run/lock: correcting owner * Caching service dependencies ... [ ok ] * Clock skew detected with `(null)' * Adjusting mtime of `/run/openrc/deptree' to Wed Apr 27 13:45:48 2022 * WARNING: clock skew detected! * Starting rngd ... * Mounting /sys ... * Remounting devtmpfs on /dev ... [ ok ] [ ok ] * Mounting security filesystem ... [ ok ] * Mounting config filesystem ... [ ok ] [ ok ] * Mounting fuse control filesystem ... [ ok ] * Mounting /dev/mqueue ... [ ok ] * Mounting /dev/pts ... [ ok ] * Mounting /dev/shm ... [ ok ] * Mounting cgroup filesystem ... [ ok ] udev | * Starting udev ... [ ok ]fsck_atlog | * Checking at-log filesystem /dev/mmcblk2gp1 ... * Clearing dirty bit of mmcblk2gp1. This is sign of unclean shutdown fsck_atlog | [ ok ] overlayfs | * Preparing overlayfs over / ... [ ok ] * WARNING: clock skew detected! udev-trigger | * Generating a rule to create a /dev/root symlink ... [ ok ] udev-trigger | * Populating /dev with existing devices through uevents ...hostname | * Setting hostname ... [ ok ] [ ok ] fsck | * Checking local filesystems ... [ ok ] root | * Remounting filesystems ... [ ok ] localmount | * Mounting local filesystems ... [ ok ] urandom | * Saving 4096 bits of creditable seed for next boot bootmisc | * Migrating /var/lock to /run/lock ... [ ok ] bootmisc | * Creating user login records ... [ ok ] bootmisc | * Wiping /var/tmp directory ... [ ok ] dbus | * /run/dbus: creating directory dbus | * /run/dbus: correcting owner syslog | * Starting busybox syslog ... [ ok ] dbus | * Starting System Message Bus ... [ ok ] micron-emmc-reten | * Starting micron-emmc-reten networkmanager | * Starting networkmanager ... [ ok ] * Cowardly refusing to concatenate a logfile into itself. * Please change rc_log_path to something other than /run/openrc/rc.log to get rid of this message * WARNING: clock skew detected! buttond | * Starting button watching daemon ... [ ok ] reset_bootcount | * Resetting bootcount in bootloader env ...podman-atmark | * Starting configured podman containers ...Environment OK, copy 1 reset_bootcount | [ ok ] chronyd | * Starting chronyd ...Starting 'qt-auto' podman-atmark |2bafbdff899713116ab3fe1d826165efd918b2818266f98f36330c944a83a976 podman-atmark | [ ok ] [ ok ] local | * Starting local ... [ ok ] * Cowardly refusing to concatenate a logfile into itself. * Please change rc_log_path to something other than /run/openrc/rc.log to get rid of this message Welcome to Alpine Linux 3.15 Kernel 5.10.112-0-at on an aarch64 (/dev/ttymxc1) armadillo login:
以前この件についてメールで相談させていただいたところ、マルティネ様より以下内容の返信をいただいています。
動画を確認しました。 そうですね、u-boot から電源を切らない (lcdifv3_power_down / video_remove を呼ばないようにする) 対応を入れても、linux での初期化処理に適合性が なければこういうチラつきがある可能性を考えれます。 例えば、framebuffer が同じメモリアドレスでなければ、linux を起動した 瞬間に違うアドレスに切り替えて画面が fbsplash を実行するまで黒くなります。 (u-boot の drivers/video/nxp/imx/imx_lcdifv3.c の fb_start が 分かりやすいですが、linux では atomic update のために fb のアドレスが 固定されていませんので、簡単には調整できないかもしれません) このアドレスを引き継いで同じ framebuffer を使うのと、 init の処理で適合性のあるイメージフォーマットがない限りでは 一時的に黒くなることを回避できないと思いますが、 チラつきの方は init 処理に気をつければ修正できると思います。 例えば、framebuffer を初期化して黒くされてないかもしれません。 (それでしたら、ram のゴミ状態によって動作が変わることも 説明できます)
フレイムバッファーを初期化するには、どのような対処を行えばよいでしょうか?
また、その他の対処法などがあればご教授いただければ幸いです。
ご対応の程よろしくお願いいたします。
コメント
okamotoatsushi
マルティネ様
お世話になっています、
岡本です。
> 安田さんにも伝えていましたが、u-boot での splash はそもそもサポートしていません(弊社の u-boot では lcdifv3 のドライバが入ってないので、再現しようと思っても確認することもできない状態です)
> そのため、助言程度の回答しかできません。
> コードの再確認してませんので記憶違いかもしれませんが、コピーしてくださったメールでは u-boot での framebuffer のアドレスと linux が framebuffer として使ってるアドレスが違い認識なので、二つのところでチラつきが出ると思います:
> * u-boot の停止から linux のドライバが呼ばえるまでに u-boot が使っていた framebuffer 領域に別のデーターが書き込まれる可能性があります。u-boot 側のドライバでアドレスを linux の起動時に使われない領域に変更してみるといいと思います。
> * ドライバの初期化処理としては電源が入ってない想定で書いてますので、linux 側の最初の framebuffer の設定するまでに化けた物を表示している可能性もあります。簡単な対処は何ともいえませんので、linux カーネルの drivers/gpu/drm/imx/lcdifv3 を確認して調整を試すしかないです。
承知しました、 framebuffer 領域を変更する方向性で進めたいと思います。
サポート外の質問をしてしまい申し訳ありません、ご回答ありがとうございます。
okamotoatsushi
お世話になっています、
岡本です。
LCD画面のチラつきなのですが、Starting kernel 後の下記エラー部分で発生しているということが分かりました。
Starting kernel ... [ 0.078090] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 0.078100] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 0.078112] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl [ 0.078121] gpio-reset lvds-reset: Error applying setting, reverse things back [ 1.265451] samsung-hdmi-phy 32fdff00.hdmiphy: failed to get phy apb clk: -517 [ 1.265598] imx8-pcie-phy 32f00000.pcie-phy: failed to get imx pcie phy clock [ 1.343886] imx-lcdifv3 32e90000.lcd-controller: No pix clock get: -517 [ 1.350791] imx-lcdifv3 32fc6000.lcd-controller: No irq get, ret=-517 [ 1.360257] imx-hdmi-pavi 32fc4000.hdmi-pai-pvi: No pvi clock get [ 1.533338] fsl-aud2htx 30cb0000.aud2htx: failed to get mem clock [ 1.541211] imx-cdnhdmi sound-hdmi: snd_soc_register_card failed (-517) [ 1.566139] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 1.578516] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 1.585490] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl [ 1.598711] gpio-reset lvds-reset: Error applying setting, reverse things back [ 1.627476] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock [ 1.786292] samsung-hdmi-phy 32fdff00.hdmiphy: failed to get phy apb clk: -517 [ 1.807877] imx-lcdifv3 32fc6000.lcd-controller: No irq get, ret=-517 [ 1.834526] imx6q-pcie 33800000.pcie: invalid resource [ 2.308039] imx-cdnhdmi sound-hdmi: snd_soc_register_card failed (-517) [ 2.845214] imx6q-pcie 33800000.pcie: failed to initialize host [ 2.851160] imx6q-pcie 33800000.pcie: unable to add pcie port.
LCD画面のチラつきに関してはエラー内の
[ 0.078090] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset
にてlvds-resetが行えていないことが原因ではないかと考えております。
ピンの競合が起こっていると考え、boot側を確認したのですがlvds-resetのピンであるMX8MP_IOMUXC_NAND_ALEは使用しておりませんでした。
どういった内容のエラーなのか、どのような解決方法があるかなど、ご教授いただけないでしょうか?
よろしくお願いいたします。
at_dominique.m…
岡本さん、
マルティネです。
> [ 0.078090] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset > [ 0.078100] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 > [ 0.078112] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl
このエラーは uboot と関係なく、linux 側の dtb 内の pinctrl で MX8MP_IOMUXC_NAND_ALE が二回設定されているということです。
弊社が提供しているカーネルの dtb では、lvds-reset の pinctrl_lvds_reset で「MX8MP_IOMUXC_NAND_ALE__GPIO3_IO00」設定しているだけですので、どこかで同じ pin (MX8MP_IOMUXC_NAND_ALE__*
) を別の pinctrl 設定で設定されているように見えます。
このエラーを解決しても、lvds-reset の設定で reset-on-init が設定されているので、初期処理で lvds を切っていますね。overlay に &lvds-reset { status = "broken"; }
で lvds-reset ごとに無効化してみるといいかもしれません。
よろしくおねがいします。
okamotoatsushi
マルティネ様
お世話になっております。
岡本です。
> このエラーを解決しても、lvds-reset の設定で reset-on-init が設定されているので、初期処理で lvds を切っていますね。overlay に &lvds-reset { status = "broken"; }
で lvds-reset ごとに無効化してみるといいかもしれません。
ご回答ありがとうございます。
助言いただいたとおりにoverlay で &lvds-reset { status = "broken"; }
を実行しようとしたのですが、
dtboファイルを作成する段階でエラーが出てしまいます。
dtboファイル作成時のエラー
atmark@atde9:~/linux-5.10-5.10.199-r0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs DTC arch/arm64/boot/dts/freescale/armadillo_iotg_g4-customize.dtbo Error: arch/arm64/boot/dts/freescale/armadillo_iotg_g4-customize.dts:21.6-12 syntax error FATAL ERROR: Unable to parse input tree make[2]: *** [scripts/Makefile.lib:331: arch/arm64/boot/dts/freescale/armadillo_iotg_g4-customize.dtbo] エラー 1 make[1]: *** [scripts/Makefile.build:503: arch/arm64/boot/dts/freescale] エラー 2 make: *** [Makefile:1390: dtbs] エラー 2
dts(armadillo_iotg_g4-customize.dts)の内容
// SPDX-License-Identifier: (GPL-2.0 OR MIT) /* * Copyright (C) 2022 Atmark Techno, Inc. All Rights Reserved. */ /dts-v1/; /plugin/; #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/clock/imx8mp-clock.h> #include <dt-bindings/input/input.h> #include "imx8mp-pinfunc.h" // Replace this empty section by your configuration &lvds-reset { status = "broken"; } ;
エラーの原因を教えていただきたいです。
よろしくお願いいたします。
at_dominique.m…
マルティネです。
> 助言いただいたとおりにoverlay で &lvds-reset { status = "broken"; }
を実行しようとしたのですが、
> dtboファイルを作成する段階でエラーが出てしまいます。
すみません、「lvds_reset」でした(overlay のキーは前者です)
/dts-v1/; /plugin/; #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/clock/imx8mp-clock.h> #include <dt-bindings/input/input.h> #include "imx8mp-pinfunc.h" &lvds_reset { status = "broken"; };
をビルドできて lvds-reset のドライバがロードされてないことも確認しました。
よろしくお願いします
okamotoatsushi
お世話になっております。
岡本です。
>
>
> /dts-v1/; > /plugin/; > > #include <dt-bindings/gpio/gpio.h> > #include <dt-bindings/clock/imx8mp-clock.h> > #include <dt-bindings/input/input.h> > > #include "imx8mp-pinfunc.h" > > > &lvds_reset { > status = "broken"; > }; >
>
> をビルドできて lvds-reset のドライバがロードされてないことも確認しました。
上記のコードに書き換えると、dtboファイルを作成することができました。
ありがとうございます。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
次に上記の内容に従って、出力したdtboファイルでの overlayを実行しました。
下記はoverlayを実行した際のコードです。
armadillo:/boot# ls Image armadillo_iotg_g4-nousb.dtbo armadillo.dtb armadillo_iotg_g4-sw1-wakeup.dtbo armadillo_iotg_g4-at-dtweb.dtb armadillo_iotg_g4.dtb armadillo_iotg_g4-con10-arducam.dtbo giken_splash.ppm armadillo_iotg_g4-con10-imx219.dtbo imx8mp-evk.dtb armadillo_iotg_g4-con10-ox01f10.dtbo overlays.txt armadillo_iotg_g4-customize.dtbo yakushima-eva.dtb armadillo_iotg_g4-lte-ext-board.dtbo armadillo:/boot# cat overlays.txt fdt_overlays=armadillo_iotg_g4-customize.dtbo armadillo:/boot# persist_file -vp overlays.txt armadillo_iotg_g4-customize.dtbo '/boot/overlays.txt' -> '/mnt/boot/overlays.txt' Added "/boot/overlays.txt" to /etc/swupdate_preserve_files '/boot/armadillo_iotg_g4-customize.dtbo' -> '/mnt/boot/armadillo_iotg_g4-customize.dtbo' Added "/boot/armadillo_iotg_g4-customize.dtbo" to /etc/swupdate_preserve_files armadillo:/boot# reboot
ここでrebootを行うと、再起動が始まり、Starting kernel ...まで進んでは、
また再起動をするというループが起こってしまいます。
下記はその際のlogです。
U-Boot SPL 2020.04-at19 (Nov 21 2023 - 19:40:58 +0900) DDRINFO: start DRAM init DDRINFO: DRAM rate 4000MTS DDRINFO:ddrphy calibration done DDRINFO: ddrmix config done Normal Boot Trying to boot from BOOTROM image offset 0x0, pagesize 0x200, ivt offset 0x0 NOTICE: BL31: v2.4(release):2020.04-at19 NOTICE: BL31: Built : 19:44:44, Nov 21 2023 U-Boot 2020.04-at19 (Nov 21 2023 - 19:40:58 +0900) CPU: i.MX8MP[8] rev1.1 1600 MHz (running at 1200 MHz) CPU: Industrial temperature grade (-40C to 105C) at 50C Model: Atmark-Techno Armadillo X2 Series DRAM: Hold key pressed for tests: t (fast) / T (slow) 2 GiB WDT: Started with servicing (10s timeout) MMC: FSL_SDHC: 1, FSL_SDHC: 2 Loading Environment from MMC... OK In: serial Out: serial Err: serial BuildInfo: - ATF 2020.04 - U-Boot 2020.04-at19 reset cause: watchdog log_wdt_reset() reset by wdt ### Warning: temperature compensation has stopped ### Warning: Voltage low, data is invalid Could not get time: invalid date will be used in logs switch to partitions #0, OK mmc2(part 0) is current device flash target is MMC:2 Net: eth0: ethernet@30be0000 [PRIME], eth1: ethernet@30bf0000 Fastboot: Normal Saving Environment to MMC... Writing to MMC(2)... OK Normal Boot Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc2(part 0) is current device 32069640 bytes read in 695 ms (44 MiB/s) Booting from mmc ... 60139 bytes read in 3 ms (19.1 MiB/s) Loading fdt boot/armadillo.dtb 45 bytes read in 1 ms (43.9 KiB/s) 229 bytes read in 1 ms (223.6 KiB/s) Applying fdt overlay: armadillo_iotg_g4-customize.dtbo failed on fdt_overlay_apply(): FDT_ERR_NOTFOUND base fdt does did not have a /__symbols__ node make sure you've compiled with -@ ERROR: Did not find a cmdline Flattened Device Tree Starting kernel ... U-Boot SPL 2020.04-at19 (Nov 21 2023 - 19:40:58 +0900) DDRINFO: start DRAM init DDRINFO: DRAM rate 4000MTS DDRINFO:ddrphy calibration done DDRINFO: ddrmix config done Normal Boot Trying to boot from BOOTROM image offset 0x0, pagesize 0x200, ivt offset 0x0 NOTICE: BL31: v2.4(release):2020.04-at19 NOTICE: BL31: Built : 19:44:44, Nov 21 2023 U-Boot 2020.04-at19 (Nov 21 2023 - 19:40:58 +0900) CPU: i.MX8MP[8] rev1.1 1600 MHz (running at 1200 MHz) CPU: Industrial temperature grade (-40C to 105C) at 50C Model: Atmark-Techno Armadillo X2 Series DRAM: Hold key pressed for tests: t (fast) / T (slow) 2 GiB WDT: Started with servicing (10s timeout) MMC: FSL_SDHC: 1, FSL_SDHC: 2 Loading Environment from MMC... OK In: serial Out: serial Err: serial BuildInfo: - ATF 2020.04 - U-Boot 2020.04-at19 reset cause: watchdog log_wdt_reset() reset by wdt ### Warning: temperature compensation has stopped ### Warning: Voltage low, data is invalid Could not get time: invalid date will be used in logs switch to partitions #0, OK mmc2(part 0) is current device flash target is MMC:2 Net: eth0: ethernet@30be0000 [PRIME], eth1: ethernet@30bf0000 Fastboot: Normal Saving Environment to MMC... Writing to redundant MMC(2)... OK Normal Boot Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc2(part 0) is current device 32069640 bytes read in 695 ms (44 MiB/s) Booting from mmc ... 60139 bytes read in 3 ms (19.1 MiB/s) Loading fdt boot/armadillo.dtb 45 bytes read in 0 ms 229 bytes read in 1 ms (223.6 KiB/s) Applying fdt overlay: armadillo_iotg_g4-customize.dtbo failed on fdt_overlay_apply(): FDT_ERR_NOTFOUND base fdt does did not have a /__symbols__ node make sure you've compiled with -@ ERROR: Did not find a cmdline Flattened Device Tree Starting kernel ... 以下同じループ
また、何度かループが起こった後に、SWUpdateの内容が初期化されてしまう現象を確認しています。
何か原因、解決方法が分かるようでしたらご教授願います。
よろしくお願いいたします。
at_dominique.m…
岡本さん
お世話になっています、
マルティネです。
> Applying fdt overlay: armadillo_iotg_g4-customize.dtbo > failed on fdt_overlay_apply(): FDT_ERR_NOTFOUND > base fdt does did not have a /__symbols__ node > make sure you've compiled with -@ > ERROR: Did not find a cmdline Flattened Device Tree
手順としてはあってますが、使用されている dtb は symbols 無しの物と入れ替えられましたそうです。
Armadillo Base OS (ABOS) の設計として、カーネルに変更が不要の場合に弊社が提供している ABOS のカーネルと dtb を使用したままに、ハードウェアの構成を overlay (dtbo) で調整する想定ですが、dtbo を使うにはエラーメッセージのとおりに dtb を -@
オプションでビルドする必要があります。
(デフォルトの armadillo_iotg_g4.dtb
は、カーネルディレクトリの arch/arm64/boot/dts/freescale/Makefile
に「DTC_FLAGS_armadillo_iotg_g4 := -@
」で指定しています)
今回は標準の armadillo_iotg_g4.dtb を使用していませんので、dtbo より直接に変更を取り入れた方がいいかもしれません。
dtb の置き換えを把握しておらず、紛らわしい案内になってしまってすみませんでした。
復帰方法ですが、本来なら三回失敗した後に rollback が行うはずですが、それも無効化していますね。
少しややっこしいですが、u-boot で「Hit any key to stop autoboot」のメッセージにキー入力すれば u-boot=>
prompt に入ります。そこで、順番に「run loadimage
」「run mmcargs
」「run loadfdt
」「booti ${loadaddr} - ${fdt_addr}
」を実行すれば起動できるはずです。
起動した後に 「persist_file -d /boot/overlays.txt
」で overlay の設定を無効化するか、dtb を -@ でビルドされた物に入れ替えてください。
よろしくお願いします。
okamotoatsushi
マルティネ様
お世話になっております。
岡本です。
> Armadillo Base OS (ABOS) の設計として、カーネルに変更が不要の場合に弊社が提供している ABOS のカーネルと dtb を使用したままに、ハードウェアの構成を overlay (dtbo) で調整する想定ですが、dtbo を使うにはエラーメッセージのとおりに dtb を -@
オプションでビルドする必要があります。
> (デフォルトの armadillo_iotg_g4.dtb
は、カーネルディレクトリの arch/arm64/boot/dts/freescale/Makefile
に「DTC_FLAGS_armadillo_iotg_g4 := -@
」で指定しています)
>
> 今回は標準の armadillo_iotg_g4.dtb を使用していませんので、dtbo より直接に変更を取り入れた方がいいかもしれません。
> dtb の置き換えを把握しておらず、紛らわしい案内になってしまってすみませんでした。
>
ご回答ありがとうございます。
助言いただいたように、armadillo_iotg_g4.dtbを直接変更しに行ったのですが、下記エラーを消すことができませんでした。
[ 0.078090] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 0.078100] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 0.078112] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl
変更手順としましては下記のようになっております。
①armadillo_iotg_g4.dtsのlvds_reset記述箇所にstatus = "broken";を追加
lvds_reset: lvds-reset { compatible = "gpio-reset"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_lvds_reset>; reset-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>; reset-delay-us = <50>; reset-on-init; #reset-cells = <0>; status = "broken"; };
②armadillo_iotg_g4.dtbをビルド
atmark@atde9:~/linux-5.10-5.10.112-r0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs DTC arch/arm64/boot/dts/freescale/armadillo_iotg_g4.dtb
③リナックスボード内のarmadillo_iotg_g4.dtbを書き換え
armadillo:~# cd ../ armadillo:/# ls bin dev home live mnt proc run sys tmp var boot etc lib lost+found opt root sbin target usr armadillo:/# cd boot armadillo:/boot# ls Image armadillo_iotg_g4-nousb.dtbo armadillo.dtb armadillo_iotg_g4-sw1-wakeup.dtbo armadillo_iotg_g4-at-dtweb.dtb armadillo_iotg_g4.dtb armadillo_iotg_g4-con10-arducam.dtbo giken_splash.ppm armadillo_iotg_g4-con10-imx219.dtbo imx8mp-evk.dtb armadillo_iotg_g4-con10-ox01f10.dtbo yakushima-eva.dtb armadillo_iotg_g4-lte-ext-board.dtbo armadillo:/boot# persist_file -d armadillo_iotg_g4.dtb armadillo:/boot# mount -t vfat /dev/sda1 /mnt armadillo:/boot# cdp -r /mnt/armadillo_iotg_g4.dtb /boot armadillo:/boot# persist_file armadillo_iotg_g4.dtb
④下記はrebootの結果です。
armadillo:/boot# reboot armadillo:/boot# * WARNING: clock skew detected! local | * Stopping local ... [ ok ] podman-atmark | * Stopping all podman containers ...urandom | * Seeding 4096 bits and crediting urandom | * Saving 4096 bits of creditable seed for next boot syslog | * Stopping busybox syslog ... [ ok ] chronyd | * Stopping chronyd ...rngd | * Stopping rngd ...buttond | * Stopping button watching daemon ... [ ok ] [ ok ] [ ok ] udev | * Stopping udev ... [ ok ] networkmanager | * Stopping networkmanager ... [ ok ] dbus | * Stopping System Message Bus ...nm-dispatcher: System bus stopped. Exiting [ ok ] [ ok ] localmount | * Unmounting loop devices localmount | * Unmounting filesystems localmount | * Unmounting /mnt ... [ ok ] localmount | * Unmounting /opt/firmware ... [ ok ] localmount | * Unmounting /var/at-log ... [ ok ] localmount | * Unmounting /var/tmp ... [ ok ] localmount | * Unmounting /var/app/volumes ... [ ok ] localmount | * Unmounting /var/app/rollback/volumes ... [ ok ] localmount | * Unmounting /var/lib/containers/storage_readonly ... [ ok ] localmount | * Unmounting /var/log ... [ ok ] localmount | * Unmounting /tmp ... [ ok ] * Cowardly refusing to concatenate a logfile into itself. * Please change rc_log_path to something other than /run/openrc/rc.log to get rid of this message killprocs | * Terminating remaining processes ...mount-ro | * Remounting remaining filesystems read-only ... * Remounting / read only ... [ ok ] mount-ro | [ ok ] indicator_signals | * Signaling external devices we are shutting down .../lib/rc/sh/openrc-run.sh: line 11: can't create /sys/class/leds/PWR_IND/brightness: nonexistent directory indicator_signals |/lib/rc/sh/openrc-run.sh: line 12: can't create /sys/class/leds/STDWN_IND/brightness: nonexistent directory indicator_signals | [ ok ] The system is going down NOW! Sent SIGTERM to all processes Sent SIGKILL to all processes Requesting system reboot [ 672.931760] imx2-wdt 30280000.watchdog: Device shutdown: Expect reboot! [ 672.939092] reboot: Restarting system U-Boot SPL 2020.04-at19 (Nov 21 2023 - 19:40:58 +0900) DDRINFO: start DRAM init DDRINFO: DRAM rate 4000MTS DDRINFO:ddrphy calibration done DDRINFO: ddrmix config done Normal Boot Trying to boot from BOOTROM image offset 0x0, pagesize 0x200, ivt offset 0x0 NOTICE: BL31: v2.4(release):2020.04-at19 NOTICE: BL31: Built : 19:44:44, Nov 21 2023 U-Boot 2020.04-at19 (Nov 21 2023 - 19:40:58 +0900) CPU: i.MX8MP[8] rev1.1 1600 MHz (running at 1200 MHz) CPU: Industrial temperature grade (-40C to 105C) at 48C Model: Atmark-Techno Armadillo X2 Series DRAM: Hold key pressed for tests: t (fast) / T (slow) 2 GiB WDT: Started with servicing (10s timeout) MMC: FSL_SDHC: 1, FSL_SDHC: 2 Loading Environment from MMC... OK In: serial Out: serial Err: serial BuildInfo: - ATF 2020.04 - U-Boot 2020.04-at19 reset cause: normal reboot switch to partitions #0, OK mmc2(part 0) is current device flash target is MMC:2 Net: eth0: ethernet@30be0000 [PRIME], eth1: ethernet@30bf0000 Fastboot: Normal Saving Environment to MMC... Writing to redundant MMC(2)... OK Normal Boot Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc2(part 0) is current device 32069640 bytes read in 695 ms (44 MiB/s) Booting from mmc ... 60139 bytes read in 3 ms (19.1 MiB/s) Loading fdt boot/armadillo.dtb ## Flattened Device Tree blob at 45000000 Booting using the fdt blob at 0x45000000 Loading Device Tree to 0000000052bc3000, end 0000000052bf4fff ... OK Starting kernel ... [ 0.078318] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 0.078328] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 0.078339] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl [ 0.078347] gpio-reset lvds-reset: Error applying setting, reverse things back [ 1.265846] samsung-hdmi-phy 32fdff00.hdmiphy: failed to get phy apb clk: -517 [ 1.265990] imx8-pcie-phy 32f00000.pcie-phy: failed to get imx pcie phy clock [ 1.345362] imx-lcdifv3 32e90000.lcd-controller: No pix clock get: -517 [ 1.352277] imx-lcdifv3 32fc6000.lcd-controller: No irq get, ret=-517 [ 1.362379] imx-hdmi-pavi 32fc4000.hdmi-pai-pvi: No pvi clock get [ 1.386448] imx-dwmac 30bf0000.ethernet: Cannot register the MDIO bus [ 1.392911] imx-dwmac 30bf0000.ethernet: stmmac_dvr_probe: MDIO bus (id: 1) registration failed [ 1.555593] fsl-aud2htx 30cb0000.aud2htx: failed to get mem clock [ 1.563521] imx-cdnhdmi sound-hdmi: snd_soc_register_card failed (-517) [ 1.587533] imx8mp-pinctrl 30330000.pinctrl: pin MX8MP_IOMUXC_NAND_ALE already requested by 30330000.pinctrl; cannot claim for lvds-reset [ 1.599921] imx8mp-pinctrl 30330000.pinctrl: pin-56 (lvds-reset) status -22 [ 1.606893] imx8mp-pinctrl 30330000.pinctrl: could not request pin 56 (MX8MP_IOMUXC_NAND_ALE) from group lvds_reset_grp on device 30330000.pinctrl [ 1.620114] gpio-reset lvds-reset: Error applying setting, reverse things back [ 1.652514] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock [ 1.830572] samsung-hdmi-phy 32fdff00.hdmiphy: failed to get phy apb clk: -517 [ 1.851584] imx-lcdifv3 32fc6000.lcd-controller: No irq get, ret=-517 [ 1.877770] imx6q-pcie 33800000.pcie: invalid resource [ 2.355794] imx-cdnhdmi sound-hdmi: snd_soc_register_card failed (-517) [ 2.882099] imx6q-pcie 33800000.pcie: failed to initialize host [ 2.888064] imx6q-pcie 33800000.pcie: unable to add pcie port. OpenRC 0.44.7.10dab8bfb7 is starting up Linux 5.10.112-0-at (aarch64) * Mounting /proc ... [ ok ] * Mounting /run ... * /run/openrc: creating directory * /run/lock: creating directory * /run/lock: correcting owner * Caching service dependencies ... [ ok ] * Clock skew detected with `(null)' * Adjusting mtime of `/run/openrc/deptree' to Wed Apr 27 13:45:48 2022 * WARNING: clock skew detected! * Remounting devtmpfs on /dev ... * Mounting /sys ... * Starting rngd ... [ ok ] [ ok ] * Mounting security filesystem ... [ ok ] * Mounting config filesystem ... * Mounting /dev/mqueue ... [ ok ] [ ok ] * Mounting fuse control filesystem ... [ ok ] [ ok ] * Mounting /dev/pts ... [ ok ] * Mounting /dev/shm ... [ ok ] cgroups | * Mounting cgroup filesystem ...fsck_atlog | * Checking at-log filesystem /dev/mmcblk2gp1 ... [ ok ] udev | * Starting udev ... [ ok ] [ ok ] overlayfs | * Preparing overlayfs over / ... [ ok ] * WARNING: clock skew detected! udev-trigger | * Generating a rule to create a /dev/root symlink ...hostname | * Setting hostname ... [ ok ] [ ok ] udev-trigger | * Populating /dev with existing devices through uevents ... [ ok ] fsck | * Checking local filesystems ... [ ok ] root | * Remounting filesystems ... [ ok ] localmount | * Mounting local filesystems ... [ ok ] urandom | * Saving 4096 bits of creditable seed for next boot bootmisc | * Migrating /var/lock to /run/lock ... [ ok ] bootmisc | * Creating user login records ... [ ok ] bootmisc | * Wiping /var/tmp directory ... [ ok ] dbus | * /run/dbus: creating directory dbus | * /run/dbus: correcting owner micron-emmc-reten | * Starting micron-emmc-reten syslog | * Starting busybox syslog ...dbus | * Starting System Message Bus ... [ ok ] [ ok ] networkmanager | * Starting networkmanager ... [ ok ] * Cowardly refusing to concatenate a logfile into itself. * Please change rc_log_path to something other than /run/openrc/rc.log to get rid of this message * WARNING: clock skew detected! buttond | * Starting button watching daemon ...reset_bootcount | * Resetting bootcount in bootloader env ... [ ok ] podman-atmark | * Starting configured podman containers ...Environment OK, copy 1 reset_bootcount | [ ok ] chronyd | * Starting chronyd ...Starting 'qt-auto' podman-atmark |a4ef092d996aef303537012a8bf9b75138f41748a7b995b5d39d826b15d43c0a podman-atmark | [ ok ] [ ok ] local | * Starting local ... [ ok ] * Cowardly refusing to concatenate a logfile into itself. * Please change rc_log_path to something other than /run/openrc/rc.log to get rid of this message Welcome to Alpine Linux 3.15 Kernel 5.10.112-0-at on an aarch64 (/dev/ttymxc1)
またカーネルディレクトリの arch/arm64/boot/dts/freescale/Makefile
に「DTC_FLAGS_armadillo_iotg_g4 := -@
」
を追加した状態でarmadillo_iotg_g4.dtbをビルドして、overlayによる変更を試しましたが、
前回と同じく下記表示が出力され、再起動のループが起こってしまいました。
Applying fdt overlay: armadillo_iotg_g4-customize.dtbo failed on fdt_overlay_apply(): FDT_ERR_NOTFOUND base fdt does did not have a /__symbols__ node make sure you've compiled with -@ ERROR: Did not find a cmdline Flattened Device Tree
下記はMakefileに「DTC_FLAGS_armadillo_iotg_g4 := -@
」を追加した箇所になります。
# SPDX-License-Identifier: GPL-2.0 # required for overlay support DTC_FLAGS_fsl-ls1028a-qds := -@ DTC_FLAGS_fsl-ls1028a-qds-13bb := -@ DTC_FLAGS_fsl-ls1028a-qds-65bb := -@ DTC_FLAGS_fsl-ls1028a-qds-7777 := -@ DTC_FLAGS_fsl-ls1028a-qds-85bb := -@ DTC_FLAGS_fsl-ls1028a-qds-899b := -@ DTC_FLAGS_fsl-ls1028a-qds-9999 := -@ DTC_FLAGS_armadillo_iotg_g4 := -@
何か助言頂ければ幸いです。
よろしくお願いいたします。
at_dominique.m…
岡本さん
マルティネです。
> Loading fdt boot/armadillo.dtb
/boot/armadillo.dtb を確認していただけますか?
デフォルト状態では armadillo.dtb は armadillo_iot_g4.dtb への symbolic link ですが、見せていただいたエラーでは更新した dtb がロードされてないように見えますのでもしかしたら変更されたかと思いました。
また、ロードされた dtb+dtbo の内容は /sys/firmware/fdt で確認できます
```
armadillo:~# apk add dtc
armadillo:~# dtc -Idtb -Odts < /sys/firmware/fdt | less
...
lvds-reset {
compatible = "gpio-reset";
pinctrl-names = "default";
pinctrl-0 = <0x8c>;
reset-gpios = <0x8d 0x00 0x01>;
reset-delay-us = <0x32>;
reset-on-init;
#reset-cells = <0x00>;
phandle = <0x110>;
status = "broken";
};
...
```
よろしくお願いします。
okamotoatsushi
マルティネ様
お世話になっております。
岡本です。
> > Loading fdt boot/armadillo.dtb
>
> /boot/armadillo.dtb を確認していただけますか?
> デフォルト状態では armadillo.dtb は armadillo_iot_g4.dtb への symbolic link ですが、見せていただいたエラーでは更新した dtb がロードされてないように見えますのでもしかしたら変更されたかと思いました。
>
> また、ロードされた dtb+dtbo の内容は /sys/firmware/fdt で確認できます
> ```
> armadillo:~# apk add dtc
> armadillo:~# dtc -Idtb -Odts < /sys/firmware/fdt | less
> ...
> lvds-reset {
> compatible = "gpio-reset";
> pinctrl-names = "default";
> pinctrl-0 = <0x8c>;
> reset-gpios = <0x8d 0x00 0x01>;
> reset-delay-us = <0x32>;
> reset-on-init;
> #reset-cells = <0x00>;
> phandle = <0x110>;
> status = "broken";
> };
> ...
> ```
/sys/firmware/fdtで確認したところlvds-resetが更新されておりませんでした。
armadillo:~# dtc -Idtb -Odts < /sys/firmware/fdt | less ... lvds-reset { compatible = "gpio-reset"; pinctrl-names = "default"; pinctrl-0 = <0x8f>; reset-gpios = <0x90 0x00 0x01>; reset-delay-us = <0x32>; reset-on-init; #reset-cells = <0x00>; }; ...
また、armadillo.dtbをdtsに変換し中を確認したのですが、 更新されていないlvds-resetの表記がございました。
armadillo:/tmp# cat armadillo.dts /dts-v1/; ... lvds-reset { compatible = "gpio-reset"; pinctrl-names = "default"; pinctrl-0 = <0x8f>; reset-gpios = <0x90 0x00 0x01>; reset-delay-us = <0x32>; reset-on-init; #reset-cells = <0x00>; }; ...
lvds-resetの内容を更新するにはどのようにすればよいでしょうか?
armadillo.dtbを変更する必要があるのでしょうか?
dtbへの変更ですが、at-dtwebにてピンの設定のみ行っている状況です。
対応の程よろしくお願いいたします。
okamotoatsushi
マルティネ様
連続での投稿失礼します。
岡本です。
armadillo.dtbについてですが、下記内容のdescファイルにてSWUpdateを行っておりました。
# armadillo.dtb link send swdesc_files --version extra_os.giken_kernel 1.01 --dest /boot \ armadillo.dtb armadillo_iotg_g4-at-dtweb.dtb # add the kernel to files to be preserved on OS update swdesc_command --version extra_os.giken_dtb 1.01 \ 'echo /boot/armadillo_iotg_g4-at-dtweb.dtb >> /etc/swupdate_preserve_files'
at_dominique.m…
岡本さん、
> また、armadillo.dtbをdtsに変換し中を確認したのですが、 更新されていないlvds-resetの表記がございました。
> [...]
> lvds-resetの内容を更新するにはどのようにすればよいでしょうか?
> armadillo.dtbを変更する必要があるのでしょうか?
> dtbへの変更ですが、at-dtwebにてピンの設定のみ行っている状況です。
当時の at-dtweb はまだ dtb を上書きする仕様で、マニュアルに特にどの dtb を上書きすればいいかは案内していませんでしたね…おそらく armadillo.dtb を直接に上書きしていただけですので、armadillo_iotg_g4.dtbだけ更新しても armadillo.dtb に反映されないことになります。
at-dtweb の dtb はカーネル 5.10.109-r1 までに -@
でビルドされていたが、dtbo式に切り替えた際に -@
を外したのでちょっとおかしいですが、現在使用中の 5.10.112 で同じ名前でリビルドされたかもしれません。仕様の変更でご迷惑をかけました。
カーネルを更新する予定がなければ、このまま生成した dtb を armadillo.dtb に上書きして、起動時に使用されます。試す分にもこれでいいと思います。
更新を考慮している場合は ATDE で 「apt install at-dtweb」で at-dtweb 2.6.2 (2022年4月)以降のバージョンに更新すれば dtbo が生成されますので、切り替えた方がいいと思いますが、すぐじゃなくてもいいですね。 armadillo.dtb を armadillo_iotg_g4.dtb への symbolic link としてもどして(「cd /boot && ln -fvs armadillo_iotg_g4.dtb armadillo.dtb && persist_file -v armadillo.dtb
」)、デフォルトの armadillo_iotg_g4.dtb で overlay を使えます。
よろしくお願いします。
okamotoatsushi
マルティネ様
お世話になっております。
岡本です。
>
> 当時の at-dtweb はまだ dtb を上書きする仕様で、マニュアルに特にどの dtb を上書きすればいいかは案内していませんでしたね…おそらく armadillo.dtb を直接に上書きしていただけですので、armadillo_iotg_g4.dtbだけ更新しても armadillo.dtb に反映されないことになります。
> at-dtweb の dtb はカーネル 5.10.109-r1 までに -@
でビルドされていたが、dtbo式に切り替えた際に -@
を外したのでちょっとおかしいですが、現在使用中の 5.10.112 で同じ名前でリビルドされたかもしれません。仕様の変更でご迷惑をかけました。
>
> カーネルを更新する予定がなければ、このまま生成した dtb を armadillo.dtb に上書きして、起動時に使用されます。試す分にもこれでいいと思います。
armadillo.dtbを書き換えると、lvds_reset関係のエラーが無くなりました。ありがとうございます。
> 更新を考慮している場合は ATDE で 「apt install at-dtweb」で at-dtweb 2.6.2 (2022年4月)以降のバージョンに更新すれば dtbo が生成されますので、切り替えた方がいいと思いますが、すぐじゃなくてもいいですね。 armadillo.dtb を armadillo_iotg_g4.dtb への symbolic link としてもどして(「cd /boot && ln -fvs armadillo_iotg_g4.dtb armadillo.dtb && persist_file -v armadillo.dtb
」)、デフォルトの armadillo_iotg_g4.dtb で overlay を使えます。
>
> よろしくお願いします。
承知いたしました。更新の際は参考にさせていただきます。
ご対応ありがとうございました。
at_dominique.m…
2023年11月14日 18時24分
岡本さん、
お世話になっています、
マルティネです。
> フレイムバッファーを初期化するには、どのような対処を行えばよいでしょうか?
> また、その他の対処法などがあればご教授いただければ幸いです。
安田さんにも伝えていましたが、u-boot での splash はそもそもサポートしていません(弊社の u-boot では lcdifv3 のドライバが入ってないので、再現しようと思っても確認することもできない状態です)
そのため、助言程度の回答しかできません。
コードの再確認してませんので記憶違いかもしれませんが、コピーしてくださったメールでは u-boot での framebuffer のアドレスと linux が framebuffer として使ってるアドレスが違い認識なので、二つのところでチラつきが出ると思います:
* u-boot の停止から linux のドライバが呼ばえるまでに u-boot が使っていた framebuffer 領域に別のデーターが書き込まれる可能性があります。u-boot 側のドライバでアドレスを linux の起動時に使われない領域に変更してみるといいと思います。
* ドライバの初期化処理としては電源が入ってない想定で書いてますので、linux 側の最初の framebuffer の設定するまでに化けた物を表示している可能性もあります。簡単な対処は何ともいえませんので、linux カーネルの drivers/gpu/drm/imx/lcdifv3 を確認して調整を試すしかないです。
よろしくお願いします