系统正在启动至“紧急/救援模式”

系统正在启动至“紧急/救援模式”

这可能不是 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”身份登录。我不明白为什么会进入紧急模式或恢复模式。在谷歌上我发现它通常与/etc/fstab有关。以下是/etc/fstab/内容(从board复制):

# 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

我发现 aboot.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.。但也许我在这里错过了一些东西。

相关内容