Kernel qemu virtio blk奇怪的限制

Kernel qemu virtio blk奇怪的限制,kernel,qemu,Kernel,Qemu,我正试图用virtio磁盘编写一个针对qemu的基本操作系统 首先,我要做的就是从我的原始磁盘读取一个扇区。我设置了一个virtq,其中一个条目执行磁盘读取,将其列在avail中并插入notify槽,但它显示“virtio blk missing headers”。查看源代码,这意味着要么没有写描述符,要么没有读描述符。嗯,我只想要一个读(即设备写)描述符,但我不情愿地做了另一个,但它仍然会呕吐,除非我将它们链接在一起,这在源代码中也是可见的。在这一点上,我将写操作的大小设置为零,但随后它明确地

我正试图用virtio磁盘编写一个针对qemu的基本操作系统

首先,我要做的就是从我的原始磁盘读取一个扇区。我设置了一个virtq,其中一个条目执行磁盘读取,将其列在avail中并插入notify槽,但它显示“virtio blk missing headers”。查看源代码,这意味着要么没有写描述符,要么没有读描述符。嗯,我只想要一个读(即设备写)描述符,但我不情愿地做了另一个,但它仍然会呕吐,除非我将它们链接在一起,这在源代码中也是可见的。在这一点上,我将写操作的大小设置为零,但随后它明确地表示它为零


我真的不想对磁盘进行写操作,我不知道它为什么要这么做。有人知道如何让qemu的virtio blk真正地、诚实地读一读吗?

我想出来了。报头需要是设备可读的,数据到达的地方需要是设备可写的,状态字节需要是设备可写的。这就是为什么每个人都必须至少有一个,以及为什么他们必须按顺序来。显式编码表明,中间的位是第三描述符,因此它既可用于磁盘读写又可用于磁盘写操作。