我正在尝试使用 qemu 启动 Linux 内核、ramdisk 和驱动器:
qemu -initrd ramdisk.cpio.gz -kernel mylinux.i686 -m 1024 -append console=ttyS0,38400 -serial file:serial.out -hdd raw.img
启动时,我没有看到 /dev 下的驱动器。主要目标是让我的驱动器被识别。更多信息:
- 我通过 qemu-img 创建了 raw.img。它有 3GB,是 raw 格式
- 我可以通过另一个 Linux 发行版识别并安装 raw.img:tinycore_3.5.1.iso
- /dev/hdd 在 mylinux 端不存在,也不存在任何 /dev/hd*
- 我在 /sys/class/block 下没有看到任何可以让我相信该驱动器已被内核识别的内容
- ramdisk 包含 /init 和其他进程。现在假设这是我的根卷。
- 系统使用 udev
我对 Linux 还处于初级阶段。希望有人能帮助我理解操作系统事件。我的假设是 /sys 是内核识别的驱动器。udev 随后会监听内核事件并将驱动器信息转换为 /dev 下的节点。对吗?任何见解和调试步骤都将不胜感激。再次强调,目标是让驱动器被识别(即显示在 /dev 下),而不是从驱动器启动。
答案1
-hdd 不是代表“硬盘驱动器”,而是“硬盘 D”或第四个硬盘(辅助从属硬盘)。
您应该使用 -hda 来引用第一个硬盘驱动器 - 主硬盘驱动器。
答案2
经过更多调试后,我注意到 Linux 启动消息中有一个错误。我使用的内核是为不同的 ramdisk 创建的,因此在错误的目录中查找 IDE 驱动程序。一旦我将内核与 ramdisk 对齐,我的驱动器就会被识别。有一件事让我缩小了范围,那就是查看启动消息,发现从未提到识别任何驱动器。初始消息主要是关于硬件检测的。因此,如果它不在那里,操作系统就不会识别它。吸取教训。感谢您的帮助和建议。