Linux开发九_按键驱动

Linux开发九

按键驱动

象棋小子    1048272975

按键作为用户系统交互的一部分,在嵌入式系统应用中,占有非常重要的地位。Linux内核输入子系统已经对按键提供了良好的驱动支持,只需要实现相应的按键设备即可让按键正常工作。

1. 按键设备

按键设备包含了名字、独有的资源等等一些驱动程序的硬件或自定义信息。通过platform_add_devices(platform_device_register)函数将定义的平台设备注册到内核中,用于匹配设备驱动。

内核在drivers\input\keyboard目录中实现了gpio按键驱动,支持中断方式独立按键驱动、轮询方式独立按键驱动、矩阵扫描按键驱动。笔者的独立按键gpio口不支持外部中断,因此采用按键轮询的方式实现按键驱动。对应的驱动代码为gpio_keys_polled.c。

按键设备平台代码如下。

#include <linux/input.h>

#include <linux/gpio_keys.h>

staticstruct gpio_keys_button home2416_buttons[] = {

       {

              .gpio             = S3C2410_GPC(0),           /*K1 */

              .code             = KEY_F1,

              .desc             = "Button 1",

              .active_low    = 1,

       },

 

       {

              .gpio             = S3C2410_GPM(0),          /*K2 */

              .code             = KEY_F2,

              .desc             = "Button 2",

              .active_low    = 1,

       },

 

       {

              .gpio             = S3C2410_GPB(4),           /*K3 */

              .code             = KEY_F3,

              .desc             = "Button 3",

              .active_low    = 1,

       },

};

 

staticstruct gpio_keys_platform_data home2416_button_data = {

       .buttons =home2416_buttons,

       .nbuttons      =ARRAY_SIZE(home2416_buttons),

       .poll_interval = 50, // 50ms polled

};

 

staticstruct platform_device home2416_button_device = {

       .name            ="gpio-keys-polled",

       .id          =-1,

       .dev        ={

              .platform_data     = &home2416_button_data,

       }

};

按键设备使用了按键相关数据结构,应加入相应的头文件。按键轮询间隔一般20hz即可,轮询频率高,占用的cpu资源也比较高。在static structplatform_device *home2416_devices[]板级平台设备列表中加入&home2416_button_device,使按键设备能够注册到内核中。

2. 内核配置

Linux配置支持按键轮询驱动。选中Device Drivers->Input device support->Keyboards->PolledGPIO buttons。


3. 按键测试

编译内核并启动。cat /proc/devices可以知道input主设备号为13,在/sys/dev/char中查看按键的主设备号为13,次设备号为64。在/dev/input目录中创建event0按键设备文件。

mkdir /dev/input

mknod /dev/input/event0 c 13 64

用hexdump命令测试按键的功能。

4. 应用编程

应用程序可以通过访问/dev/input/event0按键设备文件来获取按键的输入。按键应用测试代码button_test.c如下。

#include"fcntl.h"

#include<stdio.h>

#include<stdlib.h>

#include<linux/input.h>

 

int main(void)

{

       intfd;

       structinput_event ev_key;

 

       fd=open("/dev/input/event0", O_RDWR);

       if(fd < 0) { 

              printf("Openfailed\n");     

              exit(1); 

       }

 

       while(1) {

              read(fd,&ev_key, sizeof(struct input_event));

              if(ev_key.code != 0) {

                     printf("type:%d,code:%d, value:%d\n", ev_key.type,

ev_key.code, ev_key.value);

              }

       }

 

       close(fd);

       return0;

}

 

用arm-linux-gcc静态编译,使之生成arm cpu可执行的指令,并且可脱离任何库独立运行,arm-linux-gcc -static -o button_test button_test.c,生成button_test可执行文件。复制可执行文件到根文件系统,目标板启动后在目录输入./ button_test即可执行。

5. 附录

https://pan.baidu.com/s/1slczwhJ

bootloader源码以及使用说明

https://pan.baidu.com/s/1eRDJtNs

Qt5.8官网源码

https://pan.baidu.com/s/1nuGmSqt

本系列例程的根文件系统

https://pan.baidu.com/s/1i5btLGT

opev3.2.0官网源码

https://pan.baidu.com/s/1pLpuHw3

yaffs官网源码 

https://pan.baidu.com/s/1bpkZynt

busybox-1.26.2官网源码

https://pan.baidu.com/s/1i4EtjfR

tslib官网源码

https://pan.baidu.com/s/1i5MGRhb

mplayer-1.3.0官网源码

https://pan.baidu.com/s/1sl0fXlr

基于S3C2416修改的linux-4.10.10源码

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 领航者zynq之linux驱动开发指南_v1.3.pdf 是一份介绍如何在zynq芯片上进行linux驱动开发的文档,包括驱动编写、编译、安装和测试等方面的内容。 该文档首先介绍了zynq芯片的基本概念和结构,以及如何搭建linux开发环境。接着,详细讲解了linux设备驱动框架的基本原理和驱动开发流程。 在具体的驱动编写方面,文档提供了大量的示例代码和详细的注释,让开发者能够更好地理解驱动程序的实现原理。同时,也介绍了驱动编译、安装和调试等方面的基本操作。 总的来说,该文档是一份非常实用和全面的linux驱动开发指南,适合于想要在zynq芯片上进行linux驱动开发的工程师和开发者使用。它不仅提供了理论上的知识,还提供了大量的实践操作和示例代码,让读者能够更好地掌握驱动开发的技巧和方法,提高开发效率。 ### 回答2: 《领航者Zynq之Linux驱动开发指南_v1.3.pdf》是一本关于Zynq处理器的Linux驱动开发指南。该指南详细介绍了如何开发驱动程序以在Zynq平台上与硬件设备进行通信。 该指南包含以下内容: 1. Zynq处理器概述:介绍了Zynq处理器的架构、特性和基本原理。 2. 设备树(Device Tree):介绍了设备树的概念、原理和使用方法,让读者了解如何用设备树描述硬件设备和编写驱动程序。 3. 驱动程序框架:介绍了驱动程序的基本框架和编写方法,以及如何使用Linux内核提供的API进行编程。 4. 驱动程序的调试和优化:介绍了Linux内核的调试方法和工具,以及如何优化驱动程序的性能和可靠性。 该指南是一本非常实用的学习资源,适合需要在Zynq平台上进行Linux驱动开发的工程师和学生使用。它详细讲解了Zynq处理器的基本知识和驱动程序开发的方法,为读者提供了全面的指导和参考。 ### 回答3: 《领航者zynq之linux驱动开发指南_v1.3.pdf》是一本关于针对领航者Zynq芯片进行Linux驱动开发的指南。该指南详细介绍了如何使用Zynq芯片的板级支持包(BSP)创建Linux操作系统,并在此基础上进行驱动开发。指南中包含了丰富的实例代码和图示,能够帮助读者深入理解驱动开发过程。 该指南主要方法是以实际应用场景为基础,通过分析应用场景中所需实现的功能,从而引出需要编写的驱动程序,并给出了具体的实现方法。指南中所介绍的应用场景包括LED灯控制、按键输入、串口通信、定时器等,这些场景涵盖了嵌入式系统开发的一般需求,可以帮助读者快速掌握Linux驱动开发的方法和技巧。 同时,指南中也提到了一些开发工具的使用方法,如Xilinx的Vivado开发套件和Linux内核调试工具。这些开发工具的运用有助于提高开发效率,并且可以帮助开发者快速解决问题。 总体来说,该指南是一本实用性很强的Linux驱动开发指南。无论是对于Zynq芯片的开发者,还是对于嵌入式Linux操作系统的开发者都是很有参考价值的。通过学习该指南,读者可以掌握一些基本的驱动开发方法和理念,并有助于开发出更加稳定和优秀的嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值