主题 : linux中用自带的gpio-key.c添加按键驱动遇到的问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 10316
精华: 0
发帖: 56
金钱: 280 两
威望: 56 点
综合积分: 112 分
注册时间: 2009-10-31
最后登录: 2012-06-15
楼主  发表于: 2011-07-21 23:48

 linux中用自带的gpio-key.c添加按键驱动遇到的问题

本来想直接利用内核中的按键驱动,在板文件中添加下面的平台信息,但是按键没有用,发现存在下面的一些现象:
1.在dev/input下面没有生成event*设备文件(只有一个mice文件,我已经在内核配置中选择了keyboards->gpio buttons,这个问题最为严重,没有找到原因,请指点!!)
2.在sys/devices/platform目录下已经存在gpio-keys说明按键的平台信息还是添加进去啦
做过下面的尝试:
1.把下面的.gpio =S3C2410_GPG0_EINT8,  ,改成gpio =S3C2410_GPG0 这是无奈之下这样做了,我不太清楚这个地方是填写哪个
2.修改了一下gpio_keys.c  :添加了
       int s3c_gpio_keys[] = {
    IRQ_EINT8,
    IRQ_EINT11,
    IRQ_EINT13,
    IRQ_EINT14,
    IRQ_EINT15,
    IRQ_EINT19,
};

在gpio_keys_probe函数中获取中断号的代码改成 irq = s3c_gpio_keys;
这种方法也没有成功

在友善公司自己带的linux2.9.24.4内核的
static struct gpio_keys_button mini2440_buttons[] = {
        {
            .gpio =S3C2410_GPG0_EINT8,   //按键1,
            .code = KEY_DOWN,
            .desc = "DOWN",
            .active_low = 1,
        },
        {
            .gpio = S3C2410_GPG3_EINT11,   // 按键2
            .code = KEY_UP,
            .desc = "Up",
            .active_low = 1,

         },

        {
            .gpio = S3C2410_GPG5_EINT13,  //按键3
            .code = KEY_LEFT,
            .desc = "Left",
            .active_low =1,
        },
        {
            .gpio = S3C2410_GPG6_EINT14,   //按键4
            .code = KEY_RIGHT,
            .desc = "Right",
            .active_low =1,
        },
        {
            .gpio = S3C2410_GPG7_EINT15,  //按键5

            .code = KEY_TAB,
            .desc = "Tab",
            .active_low =1,
        },
        {
            .gpio =S3C2410_GPG11_EINT19,   //按键6

            .code = KEY_POWER,
            .desc = "Power",
            .active_low =1,
        },
};

static struct gpio_keys_platform_data mini2440_button_data = {
    .buttons = mini2440_buttons,
    .nbuttons = ARRAY_SIZE(mini2440_buttons),
};

static struct platform_device mini2440_device_button = {
    .name = "gpio_keys",
    .id = -1,
    .dev = {
        .platform_data = &mini2440_button_data,
    },
};


static struct platform_device *mini2440_devices[] __initdata = {
    &s3c_device_usb,
    &s3c_device_lcd,
    &s3c_device_wdt,
    &s3c_device_i2c0,
    &s3c_device_iis,
    &s3c_device_nand,
    &mini2440_device_dm9k,
    &s3c_device_rtc,
    &mini2440_device_led,
    &mini2440_device_button,   //添加平台设备
};
勤劳才是硬道理!!
级别: 侠客
UID: 10316
精华: 0
发帖: 56
金钱: 280 两
威望: 56 点
综合积分: 112 分
注册时间: 2009-10-31
最后登录: 2012-06-15
1楼  发表于: 2011-07-23 14:33
咋就没人响应一下呢
勤劳才是硬道理!!
级别: 新手上路
UID: 67476
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2012-04-11
最后登录: 2012-04-12
2楼  发表于: 2012-04-11 22:25
我用的是2.6.30.4 的内核,按照和你差不多相同的方法,成功的使用了gpio_keys.c,但是那个设备节点不是在/dev/input/eventX 目录下面,而是直接在/dev/eventX 。你可以按照这个链接:http://bec-systems.com/site/209/linux-input-testing-and-debugging 的方法调试一下,可能你已经成功的在/dev 目录下面创建了设备节点了。