jz2440:第二个驱动程序,按键驱动(5)

news/2024/6/17 15:36:40

万事开头难,有了上一篇LED的基础,这次就可以仿照LED的驱动来实现按键驱动。。。可以说是一模一样。。所以写的很简单,有需要可理解上一篇,在来参照代码理解。

【本文默认使用交叉编译:arm-linux-gcc-3.4.5-glibc-2.3.6  和 linux-2.6.22.6内核】

其实思路都是一模一样的:注册dev --> 通过虚拟地址调用物理地址(ioremap)--> 读取按键对应寄存器的值并得到某一位的值-->取消注册。。

代码:https://github.com/zion6135/CPP-study/tree/develop/2.Linux/button

需要实现read,open,init,exit等四个相关的函数

static struct file_operations button_drv_fops = {
    .owner  =   THIS_MODULE,   
    .open   =   button_drv_open,     
	.read	=	button_drv_read,	   
};
module_init(button_drv_init);
module_exit(button_drv_exit);

执行步骤:

  • 执行compile.sh生成button_drv.ko和可执行文件button
  • insmod button_drv.ko
  • button
  • 按下按键可看到相关信息 


http://www.niftyadmin.cn/n/1785998.html

相关文章

【C++】array和vector,数组三者区别和联系

共同点 (1.)都和数组相似,都可以使用标准数组的表示方法来访问每个元素(array和vector都对下标运算符[ ]进行了重载) (2.)三者的存储都是连续的,可以进行随机访问 不同点 &#x…

jz2440:第三个驱动程序,按键中断(6)

中断流程分析 __irq_svc:执行irq_handler获取中断源跳转到asm_do_IRQ,执行中断处理逻辑__irq_svc: //1.中断统一入口函数 svc_entry //保存现场 #ifdef CONFIG_TRACE_IRQFLAGS bl trace_hardirqs_off #en…

【Linux】UDP与TCP的对比并写出TCP和UDP的服务端

UDP (1.)无连接 UDP在传输数据的时候不需要建立连接,可以直接传输。(这一点在UDP服务端程序中可以看到),因此传输速度比较快,适用于传视频,音频。 (2.)传输…

简单工厂模式工厂方法模式

参考:三种工厂模式的C实现 1.简单工厂模式 要理解这个模式,需要预设一个条件,就是子类(XSLsoap,SFJsoap)的实现,与main中去调用factory的是2个人。。 抽象出一个肥皂工厂(soapBase)父类,然后具体的子类(XSLsoap,SFJ…

【C++】宏(#define)和内联函数(inline)的理解以及区别

宏(#define)和内联函数(inline)的理解以及区别: 宏 缺点: 1.宏没有类型检测,不安全 2.宏是在预处理时进行简单文本替换,并不是简单的参数传递(很难处理一些特定情况。例如…

策略模式-

如现在你是一个设计师,你正在设计一种空调。但是你们的空调要支持3种模式。冷风模式(ColdWind), 热风模式(WramWind),无风模式(NoWind)。 当选择ColdWind模式,将输送冷风;当选择Warm…

【C++】new和malloc的区别

之前的博客中也有写过new和malloc但是没有系统的整理过。因为最近看面经经常会碰到面试官会问new和mmalloc的区别,所以在这里整理一下,希望对大家有帮助。 new和malloc的区别可以从以下几方面进行阐述: 最大的区别:new在申请空间的时候会调用…

代理模式(迪米特法则)

为其他对象提供一种代理以控制对这个对象的访问。举个例子,工厂,代理商,客户三者,工厂(Application)不希望客户知道我的生产细节,工厂位置等等,但想客户知道我的价格,产品…