美文网首页Linux驱动
L17. 按键标准驱动使用实例

L17. 按键标准驱动使用实例

作者: 拂去尘世尘 | 来源:发表于2020-09-03 15:51 被阅读0次

    1. 简介

    在学习字符驱动的过程中,实现过按键驱动。实现功能:按键在按下时,会触发中断然后给应用层上报按键的状态。
    像按键这种通用性驱动,linux也有提供标准的驱动(gpio_keys.c)。本篇文章主要记录如何使用此驱动。

    2.代码

    要用到的内核代码路径: driver/input/keyboard/gpio_keys.c。

    • 先将gpio_keys.c编译到内核:
    /* driver/input/keyboard/Makefile */
    
    obj-$(CONFIG_KEYBOARD_GPIO)     += gpio_keys.o
    
    /* arch/arm/config/[target_name]_defconfig */
    CONFIG_KEYBOARD_GPIO=y
    
    • 设备树节点添加:
      ① 在根节点增加gpio_key设备节点,compatible值与gpio_keys.c保持一致。
      ② 增加具体按键设备子节点,设置相关节点属性值。
    /* include/dt-bindings/input/linux-event-codes.h */
    #define KEY_1           2
    
    /* arch/arm/boot/dts/[target_name].dts */
        gpio-keys {
            compatible = "gpio-keys";
    
            user {
                label = "User Button";
                gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;
                gpio-key,wakeup;
                linux,code = <KEY_1>;
            };
        };
    

    3.测试

    将源码设备树编译完后,烧录到开发板,然后测试效果

    • 自测APP


      App.png
    • 原始数据:
      hexdump 查看每次上报的十六进制类型数据:


      原始数据.png

    介绍一下原始数据意义:
    [1 - 4 byte] : 秒
    [5 - 8 byte] : 微妙
    [9 -10 byte] : 事件数据
    [11-12 byte] : 键值
    [13-16 byte] : 按下和松开状态
    上图框住的按下框内:
    第一行表示 : 上报按键事件的数据
    第二行表示 : 上报同步事件的数据

    相关文章

      网友评论

        本文标题:L17. 按键标准驱动使用实例

        本文链接:https://www.haomeiwen.com/subject/yuwgsktx.html