我一直在尝试在裸机上为我的爱好操作系统测试我的 AHCI 驱动程序。在此之前,我在 QEMU 中使用以下参数测试了我的驱动程序:
qemu-system-i386 -boot d -cdrom elfboot.iso -machine q35 -m 2G -hda hda.img -serial stdio
输出是这样的:
...
PCI: 00:1F.2 [0106] (01): 8086:2922 Mass Storage Controller
...
AHCI: Initialize module...
...
AHCI: Found AHCI device with signature EB140101
AHCI: ahci2: sectors = 204, block size = 2048
DEV: Added block device ahci2
...
PCI 设备是使用上述参数启动 QEMU 时使用的 AHCI 控制器。现在,我有足够的信心相信同样的设置也可以在真实的硬件上运行,所以我试了一下。这是屏幕上打印的内容:
...
PCI: 00:17.0 [0106] (01): 8086:A102 Mass Storage Controller
...
AHCI: Initialize module...
...
AHCI: Found AHCI device with signature EB140101
AHCI: ahci1: sectors = 4068212736, block size = 0
DEV: Added block device ahci1
...
我还在另一台机器上对其进行了测试,该机器没有 AHCI 控制器,而是在 AHCI 模式下运行的 RAID 控制器。在该机器上,输出与其他裸机设置基本相同:
...
PCI: 00:17.0 [0104] (00): 8086:282A Mass Storage Controller
...
AHCI: Initialize module...
...
AHCI: Found AHCI device with signature EB140101
AHCI: ahci1: sectors = 4068212736, block size = 0
DEV: Added block device ahci1
...
根据 SCSI 规范,4068212736
( 0xF27C0000
) 的值没有固定的含义。此外,块大小设置为零,这与我在 QEMU 上看到的不匹配。只有 QEMU 控制台中显示的输出是正确的。在我的两台真实机器上,报告的容量都是错误的,具有相同的值。
接下来我该怎么做?这是与供应商相关的问题吗?似乎该read capacity (10)
命令对于该类型的所有 SCSI 设备都是强制性的,因此在我没有经验的情况下,我认为这不是问题所在。
编辑:我在读取容量(10)命令之后放置了一个 SCSI 请求感知,因为有人说应该在每个 SCSI 命令之后放置请求感知以停止设备。
现在,报告的块数是65263
,这仍然是错误的,但也不同于4068212736
,所以我不确定我现在是否朝着正确的方向前进。此外,块大小现在正确地报告为2048
字节。