构建的内核无法启动,缺少 AHCI 驱动程序?

构建的内核无法启动,缺少 AHCI 驱动程序?

我需要应用内核补丁,因此我开始构建内核。首先,我获取源代码并构建依赖项

# apt-get source linux-image-`uname -r`
# apt-get build-dep linux-image-`uname -r`

进入源目录后,我应用了补丁,然后获取当前内核配置并执行了构建

# cp -vi /boot/config-`uname -r` .config
# make-kpkg --initrd --append-to-version=-test kernel-image kernel-headers

最后,我从 ../ 中创建的 DEB 安装了新构建的内核

# dpkg -i linux-image-3.13.11.4-test_3.13.11.4-test-10.00.Custom_i386.deb
# dpkg -i linux-headers-3.13.11.4-test_3.13.11.4-test-10.00.Custom_i386.deb

重新启动时,我在 Grub 菜单中找到了我的内核,但尝试启动它时,我最终得到了

Gave up waiting for root device
...
ALERT! /dev/disk/by-uuid/[my-correct-disk-uuid-here] does not exist.

在出现的 BusyBox 提示符下,我尝试查看 /dev/,但没有磁盘驱动器,这似乎表明我的磁盘控制器的内核模块尚未加载(它不在 /proc/modules 中)。但是,当我使用与输入此内容时运行的内核版本相同的内核版本时,怎么会这样呢 - 而且使用相同的配置? 构建内核不是我每天都要做的事情,也不是为了乐趣,因此我将非常感激任何帮助。

编辑:我应该补充一点,我尝试root=在 Grub 命令行中使用 /dev/sd** 语法,结果相同。所以不是 UUID 查找失败;磁盘控制器甚至不存在。如果相关的话,该机器是一台带有英特尔 855PM 芯片组 (PATA HDD) 的 Thinkpad X32。

答案1

现在,由于 UUID 错误,我觉得有必要验证 /etc/fstab 中的信息,因为这是文件系统信息(UUID)的挂载位置。

首先,启动到旧内核或实时磁盘会话。

执行以下命令来查找根分区的 UUID。

sudo blkid -o list

输出应类似于此示例:

/dev/sda1      ext4     home      /                 bac7229a-e019-5679-931d-5e14f15ff4bc 
/dev/sda2      ntfs     c         (not mounted)     40Ajghyr-65uB-EA5C-7y8y9t6g54j5
/dev/sda3      ext4               (not mounted)     640565a9-310b-5d6r-8d8v7-e887do893f80
/dev/sda5      ext4               (not mounted)     e777547b-3a3a-7tgd-9a12-2769wsrbd92
/dev/sda6      swap               <swap>            d72b694e-4976-3333-hso5-7894e6s9d2

现在,使用“nano”、“vi”、“gedit”、“mousepad”或任何您喜欢的文本编辑器来编辑或确认 /etc/fstab 中列出的根分区的 UUID。在此示例中,我将使用 nano:

sudo nano /etc/fstab

现在,根据我们的信息,假设您使用安装在“ / ”的非加密、单分区设置,我们的 /etc/fstab 信息应该是这样的:

# / was on /dev/sda1 during installation
UUID=bac7229a-e019-5679-931d-5e14f15ff4bc /         ext4    errors=remount-ro 0       1
# swap was on /dev/sda6 during installation
UUID=d72b694e-4976-3333-hso5-7894e6s9d2 none        swap    sw              0       0

如果 /etc/fstab 中的信息不正确,并且您已相应地更新了此信息,你现在需要做的就是重启因为 /etc/fstab 是在 grub 之后加载的,并且与 initrd.img 的配置没有直接关联。

(系统将读取 /etc/fstab 中的信息并从那里自动加载正确的分区)


如果这不能解决您的问题或者 /etc/fstab 中的信息准确,您可能需要运行:

sudo update-initramfs -v -c -k all

您可能需要用特定的内核版本替换“全部”如果您不想更新所有现有的 initrd 映像(这样您就可以只更新无法启动的映像)。请参阅此处了解更多信息:https://stackoverflow.com/questions/9645073/how-to-make-an-initrd-img-in-ubuntu

如果一切顺利,不要忘记运行:

sudo update-grub2

在您重新启动之前。

请发布任何错误。

相关内容