我在 raspberry pi 4 上有一个 ubuntu 桌面 20.04.2 64 位,
我已经在 usb ssd 上启动了很多次,没有 sd 卡。
内核 vmlinuz-5.4.0-1028-raspi 是我最后一次启动。
当我更新到 vmlinuz-5.4.0-1029-raspi 时,我用来解压内核的实用程序失败了。
所以我将 ssd 安装在其他电脑上并手动解压,但不起作用。
我查看了 /boot 和 /boot/firmware,没有找到相同的配置:config.txt 有新的结构。更新之前 config.txt 类似于 user.txt,现在不再如此等等。
cmdline.txt 由 LABEL 启动,但是新的却完全不同。
我有 /boot 的备份,
我是否需要恢复所有 /boot 文件而不关心 /boot 上现有的文件???
有谁遇到同样的灾难吗?
致以最诚挚的问候,莱昂纳多
更新
@HappyTux 的回答是正确的。
我犯了一个错误:
在我的解压内核脚本中,我使用了 extract-vmlinux,之前我使用了 zcat -qf
extract-vmlinux 可能会在没有退出代码 <> 0 的情况下失败,而且确实如此。
# check_vmlinux
...
readelf -h $1 > /dev/null 2>&1 || return 1
cat $1
exit 0
...
该函数位由以下程序调用:
...
# Finally check for uncompressed images or objects:
check_vmlinux $img
# Bail out:
echo "$me: Cannot find vmlinux." >&2
并且rerurn 1
未被使用。
所以我将我的 USB SSD 安装在其他电脑上并用 zcat 解压缩它。
我的错误是没有记住 /boot/firmware 是可启动分区的挂载点:
我使用此路径解压 /boot/firmware,但是在我的支持电脑上,
启动分区是不是已安装
,因此我的更改是在 rpi 启动时隐藏。
我必须使用启动分区解压kermel并恢复正确的config.txt。这使得子 SSD 再次启动。
我不知道为什么没有安装启动分区的 /boot/firmware 不是空的!这帮助我纠正了我的错误。
现在在新的 Ubuntu 20.04.2 上不再需要内核解压:
在 config.txt 上您可以
kernel=vmlinuz
直接使用而无需解压它。
致以最诚挚的问候,
莱昂纳多
答案1
您只需将其恢复为旧的 /boot,即可恢复到以前的状态。这就是这些机器使用其中包含的所有文件进行启动的方式,它是您的整个启动配置。它们通过固件查找某些命名的文件以将其加载到内存中,然后继续执行下一个需要的操作……直到最后加载内核,该内核的行包含分区 ID 或标签以加载 /,然后您就启动了。
您可能只需编辑新 /boot 上的文件即可使其再次运行,即控制引导的文本文件。在我的Buster
安装中,它们是/boot/firmware/cmdline.txt
和/boot/firmware/config.txt
。第一个告诉它要加载的分区,第二个告诉它内核和 intramfs。