码迷,mamicode.com
首页 > 其他好文 > 详细

ioctl参数cmd=2错误

时间:2015-11-07 17:17:49      阅读:997      评论:0      收藏:0      [点我收藏+]

标签:

在写内核驱动的时候,用到了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)

ioctl参数cmd=2错误

标签:

原文地址:http://www.cnblogs.com/helloworldtoyou/p/4945543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!