0
我正在为embeeded系统创建一个驱动程序。我正在使用IOCTL函数。 设备注册正确,打开和写入功能按预期工作,但IOCTL不能。IOCTL:仅在开关柜中使用参数0
当我从参数0的用户空间调用IOCTL时,ioctl_num = 0调用my_ioctl函数,但是当我使用任何其他值时,my_ioctl内核函数未被调用。
#define READ_IOCTL _IO(UAM_DEV_MAGIC, 0)
#define WRITE_IOCTL _IO(UAM_DEV_MAGIC, 1)
#define ASK_VALUE _IO(UAM_DEV_MAGIC, 2)
当我使用READ_IOCTL(0)从用户空间进行IOCTL调用时,一切工作正常。但是,当我尝试WRITE_IOCTL和ASK_VALUE(1和2)。
如果我使用以下命令:
#define READ_IOCTL _IO(UAM_DEV_MAGIC, 1)
#define WRITE_IOCTL _IO(UAM_DEV_MAGIC, 0)
#define ASK_VALUE _IO(UAM_DEV_MAGIC, 2)
只适用WRITE_IOCTL从用户空间调用。我正在使用Linux 3.16和PowerPC。任何想法有什么不对?
这里是一个示例驱动程序。可能会有所帮助https://github.com/jeyaramvrp/kernel-module-programming/tree/master/sample-char-dir – Jeyaram
感谢您的回答。我看过代码,但它看起来与我所做的非常相似。它看起来像程序不会重组魔术数字。任何想法为什么它与0,而不是与1,2,3等工作? –
'任何想法为什么它与0一起工作,而不是与1,2,3等?' - 可能,您的代码符合预定义的ioctl代码。参见[man ioctl_list](http://man7.org/linux/man-pages/man2/ioctl_list.2.html)。 – Tsyvarev