4

我一直在尝试在裸机上为我的爱好操作系统测试我的 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字节。

4

1 回答 1

0

响应是最后一个 LBA 和块大小的READ CAPACITY (10)两个大端(网络字节顺序)无符号 32 位整数。您遇到的问题看起来与字节顺序有关。我认为最高 LBA 可能真的是0x00007CF2. 块大小显示为 0,因为它位于整数另一端的字节中,并且被截断。

于 2020-05-20T15:08:47.427 回答