尝试实现IOCTL命令,刚刚遇到如下:
如果_IO
同时用于读写
为什么我应该考虑_IOR
和_IOW
请问任何线索?
答案 0 :(得分:3)
实际上_IO适用于根本不接受任何参数的ioctl。例如,假设您要触发先前在驱动程序中设置的命令,则可能根本不需要传递任何数据!
_IOWR用于传入参数然后输出的ioctls。根据我的经验,这些很少见,并且可能令人困惑,因为一个参数用于两个非常不同的目的,但它在您需要它时非常有用。
请参阅http://www.mjmwired.net/kernel/Documentation/ioctl-number.txt
的开头部分内核中没有任何强制执行方向的内容,因此主要用于文档目的。
答案 1 :(得分:1)
_IOR ---对于从设备到用户空间应用的阅读, _IOW ---将从用户空间应用传递到设备(硬件)和的数据写入_IOWR ---对于来自/到设备的读/写数据。但是 _IO ---基本上用于将设备可配置命令发送到目标设备,例如,如果要读取/写入闪存,则需要先发送命令然后从/向后读取/写入数据闪。由于读/写命令是按照闪存数据表中的规定恒定/固定的,因此不需要从用户空间应用程序显式发送/传递命令到驱动程序ioctl,您可以在_IO ioctl情况下根据需要形成命令包并将其发送到闪存。 _IO ---告诉您不必从用户空间应用程序传递数据(命令),您在驱动程序中使用硬编码读/写命令并将命令发送到目标设备。 _IOR或_IOW或_IOWR 用于从用户空间应用程序传递到设备(例如:flash)的读/写易失性数据。希望这个答案能澄清你的疑问:-)。