ioctl参数cmd=2错误

在写内核驱动的时候,用到了ioctl。自己定义cmd作为ioctl的参数。如下:

enum CMD {
    LEVEL_DOWN,
    LEVEL_UP,
    GPIO_INPUT,
    GPIO_OUTPUT,
    GPIO_GET,
};

ioctl底层调用代码:

static long led_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
   
}

在应用层调用ioctl的时候,当传入的cmd=2时会出现错误。
ioctl返回值为-1。错误号errno:14,  bad address。

上网查阅才知道需要使用_IOWR等宏来生成cmd命令,而不能自己写。
虽然自己写也可以,但很有可能和系统的其他cmd命令冲突。刚好当ioctl的cmd=2使就出现了错误。
从新定义cmd如下:

#define     TYPE            'S' 
#define     LEVEL_DOWN      _IOWR(TYPE, 0, int)
#define     LEVEL_UP        _IOWR(TYPE, 1, int)
#define     GPIO_INPUT      _IOWR(TYPE, 2, int)
#define     GPIO_OUTPUT     _IOWR(TYPE, 3, int)
#define     GPIO_GET        _IOWR(TYPE, 4, int)
posted @ 2015-11-07 15:52  SuperTao1024  阅读(1580)  评论(0编辑  收藏  举报