これはYocto自体の問題ではなく、Avenger96(STM32MP1)ボードからLinuxを正しく起動するのに問題がある可能性があります。私は現在Yocto(Dunfell)と一緒にAvenger96を使っています。目的は、SWUpdate OTAアップデートシステムを実装することです。そのために私はA / B戦略を使用します。私もsystemd
代わりに使用していますsysVinit
。conf/local.conf
DISTRO_FEATURES_append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
私の.wks
ファイルは次のとおりです。
part fsbl1 --source rawcopy --sourceparams="file=u-boot-spl.stm32" --part-name "fsbl1" --ondisk mmcblk --align 1 --size 256k
part fsbl2 --source rawcopy --sourceparams="file=u-boot-spl.stm32" --part-name "fsbl2" --ondisk mmcblk --align 1 --size 256k
part ssbl --source rawcopy --sourceparams="file=u-boot.itb" --part-name "ssbl" --ondisk mmcblk --align 1 --size 2M
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root_A --part-name "rootfs_A" --align 4096 --use-uuid --active --size 3G
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root_B --part-name "rootfs_B" --align 4096 --use-uuid --size 3G
bootloader --ptable gpt
画像を作成してSDカードにコピーできます。ただし、起動時に次の問題/エラーが発生します。
[ OK ] Started D-Bus System Message Bus.
Starting Load/Save RF Kill Switch Status...
You are in rescue mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or "exit"
to boot into default mode.
Press Enter for maintenance
(or press Control-D to continue):
「Ctrl+D」を押すと、次のようになります。
Reloading system manager configuration
[ 1306.916497] systemd-fstab-generator[202]: Mount point fsbl1 is not a valid path, ignoring.
[ 1306.940236] systemd-fstab-generator[202]: Mount point fsbl2 is not a valid path, ignoring.
[ 1306.947455] systemd-fstab-generator[202]: Mount point ssbl is not a valid path, ignoring.
Starting default target
.
.
その後、ログインを要求して「root」としてログインできます。なぜ緊急モードまたは回復モードに切り替えられるのか理解できません。 Googleでは、私はそれが通常/etc/fstabに関連していることを発見しました。 /etc/fstab/の内容は次のとおりです(ボードからコピー)。
# stock fstab - you probably want to override this with a machine specific one
/dev/root / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,ptmxmode=0666,gid=5 0 0
tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
tmpfs /var/volatile tmpfs defaults 0 0
# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
/dev/mmcblkp1 fsbl1 vfat defaults 0 0
/dev/mmcblkp2 fsbl2 vfat defaults 0 0
/dev/mmcblkp3 ssbl vfat defaults 0 0
もう一つ質問:緊急/構造モードでソフトウェアアップデートを実行するとどうなりますか?私の場合、SWUpdateを使用してアップデートをインストールできましたが、再起動後にシステムが以前のパーティションから再起動されました。ただし、手動で最新のパーティションに切り替えて、新しいイメージがインストールされてu-boot env
いることを確認できます。したがって、私はこの動作が再びu-bootのいくつかの問題に関連していると仮定します(新しく設定された環境が次回の起動時に消去される可能性があります)。 u-boot環境ではfw_printenv/fw_setenv
、パーティションのアクセス、設定、変更などの他の操作も実行できます。bootlimit
aが使用されていることを発見しboot.scr
、これをスクリプトに設定しました。rootfspart
u-bootヘッダファイルには次のようなものがあります。"rootfspart=4\0" \
setenv bootargs "${bootargs} root=/dev/mmcblk0p${rootfspart} rdinit=/bin/kinit rw rootwait single"
ここにどんな潜在的な問題があるのか教えてくれる人はいますか?研究方向の提案があれば役に立ちます。
ご協力ありがとうございます。
よろしくお願いします。
PS:欠落している情報があれば教えてください。そしてログイン後に確認してみてjournalctl -xb
ください。しかし、多分ここに何かが落ちたかもしれません。Alternate GPT is invalid, using primary GPT.
GPT: Use GNU Parted to correct GPT errors.