所以我正在创建自己的 Linux initramfs 副本(用于学习目的)。一切似乎都很好。我正确地安装了共享库,我可以从 initramfs 中运行一些二进制文件。我也安装并运行了 busybox 工具,没有任何问题。然而,当尝试挂载 /dev/sr0 时,mount
报告没有这样的设备或地址被发现。串行日志(由 Virtualbox 报告到文本文件中)显示内核可以检测到 SATA 硬盘驱动器但不能检测到 IDE cdrom 控制器。当我使用主机的系统原始 initramfs 时,它确实检测并成功安装了 cdrom 驱动器,但 lsmod 显示了很多已加载的模块,我无法全部尝试。所以我想通过加载正确的内核模块来用我的 initramfs 检测 IDE cdrom 驱动器,但我不确定哪些模块可以完成虚拟化 IDE 接口的工作。
顺便说一下,我的 initramfs 加载了以下模块:
load_modules()
{
modules="ahci sd_mod sr_mod virtio_blk virtio_pci"
modules="$modules ohci_pci ehci_pci loop ext4 isofs squashfs"
for mod in $modules;
do
echo "Loading $mod ..."
modprobe $mod
done
}
以下是显示检测到 SATA 磁盘的串行日志的一部分:
[ 5.988202] SCSI subsystem initialized
[ 6.074669] libata version 3.00 loaded.
[ 6.212811] tsc: Refined TSC clocksource calibration: 2594.307 MHz
[ 6.213805] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x25653a78b6d, max_idle_ns: 440795319419 ns
[ 6.216298] ahci 0000:00:0d.0: version 3.0
[ 6.217563] ahci 0000:00:0d.0: SSS flag set, parallel bus scan disabled
[ 6.393125] ahci 0000:00:0d.0: AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
[ 6.394486] ahci 0000:00:0d.0: flags: 64bit ncq stag only ccc
[ 6.396023] scsi host0: ahci
[ 6.396708] ata1: SATA max UDMA/133 abar m8192@0xf0806000 port 0xf0806100 irq 21
[ 6.713317] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[ 6.729072] ata1.00: ATA-6: VBOX HARDDISK, 1.0, max UDMA/133
[ 6.753066] ata1.00: 4194304 sectors, multi 128: LBA48 NCQ (depth 31/32)
[ 6.812916] ata1.00: configured for UDMA/133
[ 6.863148] scsi 0:0:0:0: Direct-Access ATA VBOX HARDDISK 1.0 PQ: 0 ANSI: 5
[ 6.871504] sd 0:0:0:0: [sda] 4194304 512-byte logical blocks: (2.15 GB/2.00 GiB)
至少,您需要
sr
驱动器本身的模块。除此之外,您还需要芯片组的驱动程序,但不幸的是,我不知道确切的相关驱动程序是什么。我认为您需要ata_generic
和pata_acpi
模块,但我不是 100% 确定。也就是说,VirtualBox 默认提供的配置在今天的标准下实际上是非常不寻常的。这种配置的原始原因与将近十年前这样构建的实际硬件背后的原因相同,您必须从 CD 启动的一些旧软件仅正确支持对 CD 驱动器的 PATA 访问。不过现在,这种情况非常少见(大型操作系统都不再需要这种情况,而且几乎所有最近更新的可启动实用程序软件也不需要)。
因此,考虑到这一点,我鼓励您完全移除 VirtualBox 配置中的 IDE 控制器,而只向 SATA 控制器添加一个光驱。那时,您应该只需要
sr
CD-ROM 驱动器本身的驱动程序。