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 }
|
| 回书目 上一节 下一节 |
|
||||
| · 国际文档格式标准开战 · 华为员工自杀频频拷问.. · CISSP认证成长之路 · 珊瑚虫QQ作者侵权案开庭 · 微软出价446亿美元收购.. · Windows Server 2008专.. · 隐私保护技术探讨 · 贝恩资本携手华为22亿.. |
· 802.11n:下一代的无线.. · 体验Visual Studio 200.. · 运营商封堵非法ADSL共享 · ADSL应用面面俱到 · 龙芯要做中国的“奔腾” · 华为七千人主动辞职规.. · 华为路由器配置 · 2007盘点专题:有多少.. |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · Linux 基础 · SSL VPN详细知识 · Linux防火墙 · Linux 集群技术专题 · 打造安全服务器 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · Linux 集群技术专题 · VPN技术 · Linux 基础 · SOA 面向服务架构 |
|||