我正在为 nvme-cli 开发一个测试工具(用 c 编写并且可以在 linux 上运行)。
出于 SSD 验证的目的,我实际上是在寻找自定义命令(例如 I/O 命令,写入然后读取相同,最后比较两个数据是否相同)
对于读取,ioctl()
函数的使用如下面的代码所示。
struct nvme_user_io io = {
.opcode = opcode,
.flags = 0,
.control = control,
.nblocks = nblocks,
.rsvd = 0,
.metadata = (__u64)(uintptr_t) metadata,
.addr = (__u64)(uintptr_t) data,
.slba = slba,
.dsmgmt = dsmgmt,
.reftag = reftag,
.appmask = appmask,
.apptag = apptag,
};
err = ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);
为了理解读取,我可以到哪里执行控制。
我也想要另一个看起来像的命令
err = ioctl(fd,NVME_IOCTL_WRITE_AND_COMPARE_IO, &io);
这样我就可以在内部进行写入,然后读取相同的位置,最后比较两个数据以确保磁盘仅包含我想要写入的数据。
由于我是这个 nvme/ioctl() 的新手,如果有任何错误,请纠正我。