摘要: linux内核版本:linux-2.6.30.4目的:我们前面写的几个驱动程序不管是查询方式、中断方式还是poll方式,都要求我们应用程序去主动的查询,看有没有按键发生,要想实现不需要让应用程序主动去查询,而是按键产生后,由驱动主动告诉应用,就要实现异步通知方式。为了使设备支持异步通知机制,驱动程序中涉及以下3项工作:1.支持F_SETOWN命令,能在这个控制命令处理中设置file->f_owner为对应进程ID,不过此项工作已由内核完成,设备驱动无须处理2.支持F_SETFL命令的处理,每当FASYNC标志改变时,驱动程序中的fasync()函数将得以执行,驱动中应该实现fasync( 阅读全文
posted @ 2013-08-08 11:20 linux_rookie 阅读(549) 评论(0) 推荐(0) 编辑
摘要: linux内核版本:linux-2.6.30.4目的:我们在中断方式的按键应用程序中,如果没有按键按下,read就会永远在那等待,所以如果在这个程序里还想做其他事就不可能了。因此我们这次改进它,让它在等待5秒钟,如果5秒钟内没有按键按下就返回,可以在read后面做其他事,只需要在驱动程序里加入poll机制就可以完成目的。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 ... 阅读全文
posted @ 2013-08-08 11:19 linux_rookie 阅读(735) 评论(0) 推荐(0) 编辑
摘要: linux内核版本:linux-2.6.30.4目的:当有按键按下和松开时,在终端输出不同的键值原理:假设我们现在已经加载(insmod)了third_drv.ko,当我们进入main函数后,可以打开设备节点"/dev/buttons",然后进入while循环,接着系统调用read,内核经过一系列的处理,进入到我们的驱动程序的read函数(third_drv_read),这时候如果没有按键按下,应用程序就会停在wait_event_interruptible处休眠,程序就不会向下面跑了,假如在某个时间点我们按下了按键,就会触发中断,调用中断处理函数(buttons_irq) 阅读全文
posted @ 2013-08-08 11:17 linux_rookie 阅读(510) 评论(0) 推荐(0) 编辑
摘要: linux内核版本:linux-2.6.30.4目的:当有按键按下时,在终端输出信息 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 11 static struct class *second_drv_class; 12 static struct class_device *second_drv_class_dev; 13 14 static volatile unsigned... 阅读全文
posted @ 2013-08-08 11:12 linux_rookie 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 这次我们要做的是点亮4个led灯首先看TQ2440原理图,由图1可知,只需在nLED_1、nLED_2、nLED_3、nLED_4输入低电平即可(对S3C2440来说是输出),然后查看这4根线与CPU怎么连接的,经过图2可以看出它们4个分别与GPB5、GPB6、GPB7和GPB8相连,也就是CPU通过这4个端口输出低电平到led灯,把这4个端口配置成输出,然后在对应数据寄存器相应位上写入0就可以实现点灯。 图1 图2代码 (led.c) 1 #define GPBCON (*(volatile unsigned long *)0x56000010) 2 #de... 阅读全文
posted @ 2013-08-08 11:08 linux_rookie 阅读(893) 评论(0) 推荐(0) 编辑