无法启动我的自定义内核

无法启动我的自定义内核

我使用 Debian kernel-package 编译并安装了自定义 Linux 内核。一切顺利:创建了 .deb 文件,并在 /boot 中创建了自定义 vmlinuz 和 initrd.img,并且自动修改了 /boot/grub/menu.lst。但是在我启动自定义内核后,发生了以下情况:

取得一些进展后,写下以下内容:

Begin: Waiting for root file system

并等待一会儿。然后打印以下内容:

Gave up waiting for root device. Common problems:
    - Boot args (cat /proc/cmdline)
        - Check root delay= (did the system wait long enough?)
        - Check root= (did the system wait for the right device?)
    - Missing modules (cat /proc/modules; ls /dev)

ALERT! doesn't exist. Dropping to a shell!

/bin/sh
(initramfs)

并跳转到 RAM 中的 shell。当我尝试时mount /dev/hda6 /tmp/hda6,确实没有 hda6。hda6 是运行我的 Debian 并包含自定义 initrd.img 的分区。

请大家帮帮我!

答案1

root=当内核启动选项中的行与硬件不匹配时,就会出现此问题。

可能是你的新内核没有为你的启动设备提供/dev/hda设备节点。有几种可能。

  1. 您的设备现在可能是/dev/hdb这样的。

  2. 可能是您的内核现在正在为该设备使用较新的驱动程序,而您的启动设备现在/dev/sda或类似情况。 /dev/hd{a..z}设备使用较旧的 PATA 驱动程序。这在 SATA 设备中很普遍,但也可以以这种方式访问​​较旧的 PATA 接口。(例如,Ubuntu 默认使用此方法,但 PATA 光驱除外。)

修复此问题的最简单方法是启动内核,等待它带您进入 shell,然后检查/dev/disk/by-uuid/dev/disk/by-label找出正确的设备。然后您可以挂载该设备,更正root=Grub 配置中的参数,然后重新启动。

考虑在参数中使用 UUID 或分区标签,root=而不是特定设备;这样,重命名设备的内核驱动程序更改不会影响启动。您可以使用 查找 UUID 和标签tune2fs -l <device>,也可以使用 添加标签sudo tune2fs -L <label> <device>

以下是root=每种方式的论据(请注意,没有引号):

root=/dev/sda6
root=UUID=94b1e7d5-9fc5-4f44-b5b1-c776afc808d4
root=LABEL=debian-root-volume-label

答案2

您需要检查的第一件事是您的内核是否能够识别您的硬件。

  • 首先,检查硬盘类型,并确保它在内核配置中已启用。这很可能是导致问题的原因。
  • 我不记得dmesgDebian 默认 initramfs 中是否包含该程序,但您可以输入 检查内核调试输出dmesg | less。然后尝试查找与您的硬盘相关的行。此外,了解驱动器的供应商或至少接口也很有用。
  • 最后,您可以quiet从内核命令行中删除启动选项(如果有),然后只需使用 Shift+PgUp/PgDn 键向上滚动调试输出即可搜索与上一段相同的信息。

另外,在高清相关问题中提供一些有关硬盘的信息可能也是个好主意。

相关内容