因此,我正在创建自己的 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)
答案1
至少,你需要sr
驱动器本身的模块。除此之外,你还需要芯片组的驱动程序,但不幸的是,我不知道相关的驱动程序到底是什么。我思考您需要ata_generic
和pata_acpi
模块,但我不是 100% 确定。
话虽如此,VirtualBox 默认提供的配置实际上以今天的标准来看相当不寻常。这种配置的最初理由与近十年前构建的实际硬件背后的理由相同,一些必须从 CD 启动的旧软件仅正确支持 PATA 对 CD 驱动器的访问。不过,如今这种情况非常罕见(大型操作系统不再需要这种情况,而且几乎所有最近更新的可启动实用程序软件也不需要这种情况)。
因此,鉴于此,我建议您完全删除 VirtualBox 配置中的 IDE 控制器,并只向 SATA 控制器添加光驱。此时,您只需要sr
CD-ROM 驱动器本身的驱动程序。