【发布时间】:2020-09-06 02:31:53
【问题描述】:
我一直在尝试在裸机上为我的爱好操作系统测试我的 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 字节。
【问题讨论】: