我在虚拟机上运行 Debian Xfce(主机操作系统:Ubuntu 12.04 LTS)。在 Debian 中,我从https://www.kernel.org/并且我成功配置和编译了它。我遵循了以下步骤(使用 su ):
- 进行配置
- 制作
- 制作模块
- 制作安装模块
之后我编辑了 /etc/grub.d/40_custom 文件并运行grub-mkconfig。然后我将 config、initrd.img、System.map、vmlinuz 文件放入 /boot/ 文件夹中,这样我就在虚拟盒中安装 Debian 内核的同一磁盘和同一分区中安装了新内核。然后我重新启动虚拟盒并从构建的内核启动,但启动过程停止并给出提示,如图所示:
(抱歉,我的声誉点数不足以发布图片。)
Debian 的 /boot/grub/grub.cfg :
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640x480
load_video
insmod gfxterm
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
set locale_dir=($root)/boot/grub/locale
set lang=en_US
insmod gettext
fi
terminal_output gfxterm
set timeout=5
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
insmod png
if background_image /usr/share/images/desktop-base/joy-grub.png; then
set color_normal=white/black
set color_highlight=black/white
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-686-pae' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
echo 'Loading Linux 3.2.0-4-686-pae ...'
linux /boot/vmlinuz-3.2.0-4-686-pae root=UUID=33cee34f-8bec-4f6a-963f-d26bdffda28c ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.2.0-4-686-pae
}
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-686-pae (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
echo 'Loading Linux 3.2.0-4-686-pae ...'
linux /boot/vmlinuz-3.2.0-4-686-pae root=UUID=33cee34f-8bec-4f6a-963f-d26bdffda28c ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.2.0-4-686-pae
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Saurabh GNU/Linux, with Linux 2.6.32.61' --class gnu-linux --class gnu --class os{
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
echo 'Loading Saurabh Linux 2.6.32.61... '
linux /boot/vmlinuz-2.6.32.61 root=/dev/sda5 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.61
}
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
40_自定义文件:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Saurabh GNU/Linux, with Linux 2.6.32.61' --class gnu-linux --class gnu --class os{
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c
echo 'Loading Saurabh Linux 2.6.32.61... '
linux /boot/vmlinuz-2.6.32.61 root=/dev/sda5 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32.61
}
Debian的/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=33cee34f-8bec-4f6a-963f-d26bdffda28c / ext4 errors=remount-ro 0 1
# swap was on /dev/sda1 during installation
UUID=faa1c54b-4e9f-4af6-9b1e-8fdceffb321f none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
(我只是在虚拟盒中进行这些实验)
请任何人帮帮我,为什么我会收到这个错误?
答案1
这也许很明显,但问题不在于您进入了 BusyBox (initramfs)。问题在于该提示上方的 10 行,您会看到几乎每次安装内核资产的尝试都接连失败。
您的其中一个set root='(hd0,msdos5)' or
--set=root 33cee34f-8bec-4f6a-963f-d26bdffda28c` 可能是错误的。
当 grub 查看你的 /boot 时,它找到了内核,但是当它加载内核时,你的一个根声明实际上改变了 /boot 的位置,所以现在内核无法从 initrd 挂载它所需要的内容(要么是你的 initrd 没有正确编译以匹配你的内核)。
我相信你的内核加载正常,但是它无法找到其余的用户空间,因此它会退回到 grub。
尝试减少驱动器 UID 的冗长程度,看看默认设置能为您带来多大帮助。考虑再次为您的内核运行 mkinitrd。