无法在 LFS 中挂载根文件系统

无法在 LFS 中挂载根文件系统

最近,我一直在构建一个LFS [Linux 从头开始​​]系统为我的树莓派单板计算机,我目前正处于最后一步。我正在尝试编译来自官方 kernel.org 存储库的 Linux 5.19.2,但是每次我安装内核并重新启动时,都会发生以下情况:

  1. 出现彩虹闪屏 [READING FAT32 PARTITION]
  2. 出现 Raspberry Pi 徽标 [UEFI 固件已加载]
  3. 出现 GRUB2 引导菜单
  4. 出现这个内核恐慌:

    LFS linux 内核恐慌文本

就是这样。启动过程停止并永远卡在那里。我能想到的最可能的问题是我的内核配置中未启用某个文件系统。非常感谢任何帮助。

链接到/boot/config-5.19.2/boot/config-5.19.2

更新 我使用以下指南生成了一个 initramfs这个 BLFS 页面,当我重新启动时,迎接我的是我最初认为是一个美妙的惊喜 - initramfs shell。我现在明白了:

The device /dev/sda2, which is supposed to contain the
root file system, does not exist.
Please fix this problem and exit this shell.

Encountered a problem!

Dropping you to a shell.

sh: cannot set terminal process group (-1): Innapropriate ioctl for device
sh: no job control in this shell
sh-5.1# _

我希望我可以从那里调试我的系统,但由于某种原因它不允许我打字。所以我决定添加ls -a /dev到我的 initramfs 初始化脚本中,这样我就可以看到我的内核正在检测哪些设备。然而,结果却相当令人不安:

.       core            full  mem   ptmx   snapshot tty   tty11 tty15 tty19 tty22 tty26 tty3  tty33 tty37 tty40 tty44 tty48 tty51 tty55 tty59 tty62 tty9    ttyS2   vcs1  vcsu1
..      cpu_dma_latency input null  random stderr   tty0  tty12 tty16 tty19 tty23 tty27 tty30 tty34 tty38 tty41 tty45 tty49 tty52 tty56 tty6  tty63 ttyAMA0 ttyS3   vcsa  vga_arbiter
char    fb0             kmsg  port  rtc    stdin    tty1  tty13 tty17 tty20 tty24 tty28 tty31 tty35 tty39 tty42 tty46 tty5  tty53 tty57 tty60 tty7  ttyS0   urandom vcsa1 zero
console fd              kvm   psaux rtc0   stdout   tty10 tty14 tty18 tty21 tty25 tty29 tty32 tty36 tty4  tty43 tty47 tty50 tty54 tty58 tty61 tty8  ttyS1   vcs     vcsu

没有以sd或开头的文件mmcblk!现在我确信我的内核配置肯定存在问题,导致它无法检测物理设备。

更新- 将内核版本更新为 linux 6.0.5 并重新编译了我的 initramfs 但没有区别。

更新- 我意识到 Raspberry Pi 操作系统不使用 UEFI 变量,因此我认为使用 UEFI 变量支持系统编译 GRUB 可以解决我的问题。因此,我以某种方式在我的 Raspberry Pi 上安装了适用于 arm64 的 Debian GNU/Linux 11,并发现 [通过运行] 支持 UEFI 变量efivar -l。我重新编译了 GRUB 并支持 UEFI 变量,但这也没有解决我的问题。

更新- 问题似乎不在于我的内核编译,因为即使当我复制并粘贴我的 Debian 安装 [for arm64] 的内核配置文件并重新编译我的内核时,它仍然给我相同的结果。似乎有一些我尚未安装的软件包来检测物理设备。

更新- 我实际上想出了一个粗略的方法来启动我的系统,但这并不能解决我的问题。我让它引导我在 Debian 安装上输入 GRUB 命令行并输入以下命令:

grub> linux (hd0,1)/vmlinuz-5.10.0-19-arm64 root=/dev/sdb2 rootfstype=ext4 init=/bin/bash
grub> initrd (hd0,1)/initrd.img-5.10.0-19-arm64
grub> boot

我不想总是使用外部安装来启动我的系统,这也不能帮助我找到问题。如果我使用 Debian 安装的内核配置文件编译 LFS 内核,内核不应该做同样的事情吗?我还意外地有了另一个发现:如果我尝试在不加载 initramfs 的情况下启动 Debian 安装,我会遇到内核恐慌几乎一模一样就像上面所示的那样。 initramfs 在定位分区方面起什么作用?我现在比以前更困惑了。

答案1

事实证明,我的内核正在安装内核模块,/boot/modules/而不是/usr/lib/modules/我简单地复制并粘贴/boot/modules/usr/lib/modules解决我的问题。

相关内容