您的位置:首页 > 其它

ioctl参数cmd=2错误

2015-11-07 15:52 351 查看
在写内核驱动的时候,用到了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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: