linux下驱动之按键驱动总结

本文总结了Linux环境下驱动开发中按键驱动的相关知识,包括如何解决rmmod卸载驱动时遇到的问题,理解用户空间与系统空间的区别,以及程序睡眠的含义。同时,列举了多个关于字符设备驱动、中断处理、等待队列和2440处理器中断的参考资料链接,是Linux驱动学习者的实用指南。
摘要由CSDN通过智能技术生成
/*************************************
按键的驱动,在TQ2440A上做测试

维护记录: 2010-11-13 V1.0  by ZZC

linux内核:2.6.31

硬件接法:
		KEY1 --> GPF1
		KEY2 --> GPF4
		KEY3 --> GPF2
		KEY4 --> GPF0
*************************************/

#include <linux/module.h>    //所有模块都需要这个头文件
#include <linux/kernel.h>    //声明了printk()这个内核态用的函数
#include <linux/fs.h>		 //文件系统有关的,结构体file_operations在头文件 linux/fs.h中定义
#include <linux/init.h>		 //init和exit相关宏
#include <linux/delay.h>	 //延迟函数的定义声明
#include <asm/irq.h>		 //arm中断定义,如中断号的定义IRQ_EINT1
#include <linux/interrupt.h> //interrupt.h中包含了与中断相关的大部分宏及struct结构的定义,如request_irq函数
#include <asm/uaccess.h>     //Linux 中的用户和内核态内存交互函数 如copy_from_user
//#include <asm/arch/regs-gpio.h>  //寄存器设置
#include <mach/regs-gpio.h>
//#include <asm/hardware.h>
#include <mach/hardware.h>	  //IO空间的物理地址定义
#include <linux/device.h>     //在这个头文件中主要是misc(混合)设备注册和注销
#include <linux/poll.h>       //本例中定义了POLLIN | POLLRDNORM
#include <linux/gpio.h>

#define BUFFER_SIZE 256
#define DEVICE_NAME	"TX2440-button" /* 设备名称 */
static int BUTTON_MAJOR	= 0;		/* 主设备号 */

static volatile int key_values [] = {0, 0, 0, 0};
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);    //定义一个等待队列头,并初始化该等待队列头
static volatile int ev_press = 0;

struct button_irq_desc 
{
	int irq;         //中断号
	int pin;		//中断引脚
	int pin_setting;   //设置引脚功能
	int number;        //按键的值  
	char *name;	       //自定义的中断名称
};

/* 用来指定按键所用的外部中断引脚及中断触发方式, 名字
 IRQ_EINT0~IRQ_EINT4在arch/arm/mach-s3c2410/include/mach/irqs.h文件中有定义*/
static struct button_irq_desc button_irqs [] =
{
	{IRQ_EINT1,	S3C2410_GPF(1),	S3C2410_GPF1_EINT1,	0, "KEY1"}, /* K1 */
	{IRQ_EINT4,	S3C2410_GPF(4),	S3C2410_GPF4_EINT4,	1, "KEY2"}, /*
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值