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