gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:40 27 4
gpt4 key购买 nike

我正在做一个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 操作码作为参数。根据标准,您有单独的命令(操作码)用于读取、写入和比较。您可以单独发送这些命令,也可以添加供应商特定命令来计算您需要的内容。

关于linux - ioctl()如何调用驱动程序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com