繁体   English   中英

ioctl()如何调用驱动程序代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM