频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

12.1.3 按键驱动的模块加载和卸载函数

作者: 宋宝华 编著 出处:人民邮电出版社  2008-03-10 12:31    砖    好    评论   进入论坛
阅读提示:《Linux设备驱动开发详解》本书全面而详细地讲解了Linux设备驱动开发中涉及的理论以及多种设备驱动的框架。第12章将分析5个典型的字符设备驱动,在这些驱动中,将灵活地运用到前面各章所讲解的内容。本文写的是按键驱动的模块加载和卸载函数。

12.1.3  按键驱动的模块加载和卸载函数

按键设备作为一种字符设备,在其模块加载和卸载函数中分别包含了设备号申请和释放、cdev的添加和删除行为,在模块加载函数中,还需申请中断、初始化定时器和等待队列等,模块卸载函数完成相反的行为,代码清单12.4和12.5分别给出了按键设备驱动的模块加载和卸载函数,代码清单12.6和12.7分别给出了模块加载和卸载所调用的申请和释放4个中断的函数。

代码清单12.4  按键设备驱动的模块加载函数

1  static int __init s3c2410_key_init(void)
2  {
3    ...//申请设备号,添加cdev
4  
5    request_irqs(); //注册中断函数
6    keydev.head = keydev.tail = 0; //初始化结构体
7    for (i = 0; i < KEY_NUM; i++)
8      keydev.keyStatus[i] = KEYSTATUS_UP;
9    init_waitqueue_head(&(keydev.wq)); //等待队列
10 
11   //初始化定时器,实现软件的去抖动
12   for (i = 0; i < KEY_NUM; i++)
13     setup_timer(&key_timer[i], key_timer_handler, i);
14   //把按键的序号作为传入定时器处理函数的参数
15 }

代码清单12.5 按键设备驱动的模块卸载函数

1 static void __exit s3c2410_key_exit(void)
2 {
3   free_irqs(); //注销中断
4   ...//释放设备号,删除cdev 
5 }

代码清单12.6 按键设备驱动的中断申请函数

1  /*申请系统中断,中断方式为下降沿触发*/
2  static int request_irqs(void)
3  {
4    struct key_info *k;
5    int i;
6    for (i = 0; i < sizeof(key_info_tab) / sizeof(key_info_tab[1]); i++)
7    {
8      k = key_info_tab + i;
9      set_external_irq(k->irq_no, EXT_LOWLEVEL, GPIO_PULLUP_DIS);
10                   //设置低电平触发
11     if (request_irq(k->irq_no, &buttons_irq, SA_INTERRUPT, DEVICE_NAME,
12       i))  //申请中断,将按键序号作为参数传入中断服务程序
13     {
14       return  - 1;
15     }
16   }
17   return 0;
18 }

代码清单12.7 按键设备驱动的中断释放函数

1  /*释放中断*/
2  static void free_irqs(void)
3  {
4    struct key_info *k;
5    int i;
6    for (i = 0; i < sizeof(key_info_tab) / sizeof(key_info_tab[1]); i++)
7    {
8      k = key_info_tab + i;
9      free_irq(k->irq_no, buttons_irq); //释放中断
10   }
11 }

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
专题
Linux——从菜鸟到高手
Visual Studio 2005开发基础
测试开发人员参考手册
Groovy开发技术
VC++基础开发专题
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。