我正在为基于 FPGA 的嵌入式系统开发低级 SATA 驱动程序。司机运行良好。
当我使用 dd 命令从磁盘读取扇区时,我可以看到 SCSI read(10) 命令(操作码 0x28)被我的低级驱动程序接收,我认为这是正确的。但是,当我使用 dd 命令将扇区写入磁盘时,SCSI 驱动程序会多次发送第一次读取(10)命令(操作码 0x28),然后发送少量写入(10)命令(操作码 0x2A)。
有人可以解释一下,为什么 SCSI 驱动程序在写操作期间发送 read() 命令?
编辑:在文件写入操作期间,我可以看到驱动程序首先从 LBA 0 读取(DMA 模式)到大约 8 个扇区。然后它写入 (DMA) sg 块,然后读取 (PIO) 磁盘特定信息。之后,它需要一些随机 LBA 并执行几次读取(DMA),最后它通过读取设备特定数据读取(PIO)来停止。这是 dd'ing 1KB 文件的序列。该磁盘没有分区表,也没有文件系统(通过 fdisk 实用程序验证)。这是司机的正常行为吗?如果是,那么它不会降低运行速度吗?由于写入操作中的额外读取,整体文件读取比写入快。
谢谢
问问题
380 次