最近我发现如何/dev/kvm
似乎没有为read()
or实现功能write()
,并且任何调用它们的尝试总是导致错误 22(无效参数)。
我试图避免使用 ioctl 调用,并且想知道如果我要从内核中完全删除 ioctl 支持,是否可以使用 kvm。
我如何在没有 ioctl 的情况下调用对 kvm 的访问?
最近我发现如何/dev/kvm
似乎没有为read()
or实现功能write()
,并且任何调用它们的尝试总是导致错误 22(无效参数)。
我试图避免使用 ioctl 调用,并且想知道如果我要从内核中完全删除 ioctl 支持,是否可以使用 kvm。
我如何在没有 ioctl 的情况下调用对 kvm 的访问?
您不能对 /dev/kvm 执行读(2)/写(2),因为它不支持这些操作。例如,如果您查看内核的 kvm 驱动程序源代码或此处,您会发现它仅支持 IOCTL。
由于
read
和write
操作在 fops 中设置为 NULL,read(2)/write(2) 将失败并显示-EINVAL
(无效参数)(参考:LDD3,第 3 章,文件操作)。我在下面列出了源代码 virt/kvm/kvm_main.c 的相关部分。
在这里,file_operations 和 miscdevice:
驱动程序初始化注册 miscdevice,将 /dev/kvm 暴露给用户空间: