[英]How does a ioctl() call the driver code
我正在为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()的新手,如果有任何错误,请纠正我。
nvme_io()是主要的命令处理程序,它接受要发送到设备的NVMe操作码作为参数。 根据标准,您具有用于读取,写入和比较的单独命令(操作码)。 您可以单独发送这些命令,也可以添加特定于供应商的命令来计算所需的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.