gpt4 book ai didi

c - SCSI 读取容量 (10) 报告错误的 LBA 和扇区大小

转载 作者:行者123 更新时间:2023-12-04 13:56:13 26 4
gpt4 key购买 nike

我一直在尝试在裸机上测试我的业余操作系统的 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 设备是 AHCI Controller ,在使用上述参数启动 QEMU 时使用。现在,我有足够的信心,同样的设置也适用于真实的硬件,所以我试了一下。这是打印在屏幕上的内容:

...
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 Controller ,而是一个以 AHCI 模式运行的 RAID Controller 。
在该机器上,输出与其他裸机设置基本相同:

...
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字节。

最佳答案

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

关于c - SCSI 读取容量 (10) 报告错误的 LBA 和扇区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61901001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com