这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » linux移植之按键驱动

共5条 1/1 1 跳转至

linux移植之按键驱动

专家
2013-03-08 14:55:21     打赏
  • Linux内核下的drivers/input/keyboard/gpio_keys.c 实现了一个体系结构无关的 GPIO 按键驱动,使用此按键驱动,开发者不需要修改一行代码,只需要在BSP 的板文件(对于 MY6410为arch/arm/mach­s3c6410/mach­my6410.c)中定义相关的platform 设备和数据。在 MY6410开发板上,用 GPN0~GPN5实现了DOWN、ENTER、HOME、UP、TAB、END 六个按键,因此其对应的 platform 信息如下:

    arch/arm/mach­s3c6410/mach­my6410.c:

    static struct gpio_keys_button my6410_buttons[] = {

        {

            .gpio        = S3C64XX_GPN(0),

            .code        = KEY_UP,

            .desc        = "Up",

            .active_low    = 1,

            .wakeup        = 0,

        },

        {

            .gpio        = S3C64XX_GPN(1),

            .code        = KEY_DOWN,

            .desc        = "Down",

            .active_low    = 1,

            .wakeup        = 0,

        },

        {

            .gpio        = S3C64XX_GPN(2),

            .code        = KEY_LEFT,

            .desc        = "Left",

            .active_low    = 1,

            .wakeup        = 0,

        },

        {

            .gpio        = S3C64XX_GPN(3),

            .code        = KEY_RIGHT,

            .desc        = "Right",

            .active_low    = 1,

            .wakeup        = 0,

        },

        {

            .gpio        = S3C64XX_GPN(4),

            .code        = KEY_ENTER,

            .desc        = "Enter",

            .active_low    = 1,

            .wakeup        = 0,

        },

        {

            .gpio        = S3C64XX_GPN(5),

            .code        = KEY_ESC,

            .desc        = "Esc",

            .active_low    = 1,

            .wakeup        = 0,

        }

    };

    static struct gpio_keys_platform_data my6410_button_data ={

        .buttons    =my6410_buttons,

        .nbuttons    =ARRAY_SIZE(my6410_buttons),

    };

    static struct platform_device my6410_device_button    = {

        .name        ="gpio-keys",

        .id            = -1,

        .dev        = {

        .platform_data =&my6410_button_data,

        },

    };

  • 将& my6410_device_button添加到static struct platform_device *my6410_devices[] __initdata中
  • 配置linux内核

    Device Drivers --->

        Input device support --->

            [*] Keyboards --->

                 <*> GPIO Buttons

    在移植按键驱动时候可能出现一下错误:

    arch/arm/mach-s3c64xx/mach-my6410.c:298: error: array type has incomplete element type

    arch/arm/mach-s3c64xx/mach-my6410.c:300: error: field name not in record or union initializer

    arch/arm/mach-s3c64xx/mach-my6410.c:300: error: (near initialization for 'my6410_buttons')

    arch/arm/mach-s3c64xx/mach-my6410.c:301: error: field name not in record or union initializer

    arch/arm/mach-s3c64xx/mach-my6410.c:301: error: (near initialization for 'my6410_buttons')

    arch/arm/mach-s3c64xx/mach-my6410.c:302: error: field name not in record or union initializer

    arch/arm/mach-s3c64xx/mach-my6410.c:302: error: (near initialization for 'my6410_buttons')

    arch/arm/mach-s3c64xx/mach-my6410.c:303: error: field name not in record or union initializer

    arch/arm/mach-s3c64xx/mach-my6410.c:303: error: (near initialization for 'my6410_buttons')

    arch/arm/mach-s3c64xx/mach-my6410.c:304: error: field name not in record or union initialize

    ………………..

    ………………………

    ……………………………………

    可以看出这个错误提示的意思是没有找到定义的数组,然后其他的就引起一连串的错误,解决的办法很简单就是把

    #include <linux/gpio_keys.h>

    这个头文件添加进去就可以了。




  • 关键词: linux     驱动     按键    

    院士
    2013-03-08 16:10:30     打赏
    2楼

    嘿嘿,学习一下。有一个总体的认识

    再过二个月,余下来时间再来弄linux


    高工
    2013-03-10 16:23:54     打赏
    3楼
    由简入繁,首先从掌握最简单的按键和led开始

    高工
    2013-03-10 18:31:42     打赏
    4楼

    楼主进度神速啊,学习了


    专家
    2013-03-11 16:22:05     打赏
    5楼
    内核这玩意很是麻烦

    共5条 1/1 1 跳转至

    回复

    匿名不能发帖!请先 [ 登陆 注册 ]