我一直在关注从头开始构建一个最小的 Linux 系统为了构建一个占用空间较小(10MB 或更小)的 Linux。
我相当确定直到最后一点为止都没有错误,我实际上正在使用命令测试图像qemu-system-i386 -L . -hda minux.img
#
我并没有像教程所示那样实际启动到提示符,而是看到了 Grub Rescue 提示符。为了尝试启动,我使用了kernel /boot/kernel_name
then boot
,它最终失败并显示:
我的grub.conf
如下,与教程中的相同:
default 0
timeout 30
title Minux
root (hd0,0)
kernel /boot/vmlinux-2.6.21-1 root=/dev/hda1 rw
到目前为止,我设法找到的唯一区别是在 中fdisk
,我的起始扇区是 2048,因为这是我可以使用 fdisk 设置的最小值,因此偏移量更大。另一个区别是我使用的是 x86_64-pc grub,并且我的一些 busybox 库的命名不同,但这不应干扰启动。
我怎样才能修复这个程序以使我的Linux工作?或者有没有更好的方法来制作 10MB 以下的 Linux 发行版?
答案1
让我尝试回答关于制作小型系统的第二个问题。因为我们是在 x86 上构建的,所以我想我们的目的是让系统能够启动闪存驱动器,而不是烧录到嵌入式芯片中,这是一个非常不同的故事。
考虑删除磁盘映像并使用 cpio initramfs 。然后像这样启动。
qemu-system-i386 -kernel vmlinuz -initrd root.cpio.gz
我喜欢这个,因为我们有更多的灵活性,并且不必与磁盘位置混淆。
我也建议grub4dos引导加载程序。尽管名称中包含“dos”,但它可以从 linux 安装并引导 linux 内核。安装很简单,只需编写一个 mbr 并将一个 213k 文件复制到任意分区。 grub4dos 可以识别许多文件系统。
另外,在你的配置中,你似乎没有正确设置grub,因为有一个救援控制台显示 .即使您应该kernel /boot/kernel_name
在 之前输入“root=” boot
。
在我的机器上,qemu 来宾内核将磁盘映像识别为“/dev/sda”而不是“/dev/hda”。