IOCTL:仅在switch-case中使用参数0

时间:2016-04-15 11:32:57

标签: linux linux-device-driver ioctl

我正在为一个嵌入式系统创建一个驱动程序。我正在使用IOCTL功能。 设备正确注册,开放和写入功能按预期工作,但IOCTL没有。

当我从带有参数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。知道什么是错的吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我在64位内核中。用户空间中c中的代码是32位。我必须在64位编译才能工作。