电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Linux设备模型之input子系统详解VIP免费

Linux设备模型之input子系统详解_第1页
1/19
Linux设备模型之input子系统详解_第2页
2/19
Linux设备模型之input子系统详解_第3页
3/19
Linux 设备模型之input 子系统详解 一:前言 在键盘驱动代码分析的笔记中,接触到了input 子系统.键盘驱动,键盘驱动将检测到的所有按键都上报给了input 子系统。Input 子系统是所有I/O 设备驱动的中间层,为上层提供了一个统一的界面。例如,在终端系统中,我们不需要去管有多少个键盘,多少个鼠标。它只要从 input 子系统中去取对应的事件(按键,鼠标移位等)就可以了。今天就对 input子系统做一个详尽的分析. 下面的代码是基于 linux kernel 2.6.25.分析的代码主要位于 kernel2.6.25/drivers/input 下面. 二:使用 input 子系统的例子 在内核自带的文档 Documentation/input/input-programming.txt 中。有一个使用 input 子系统的例子,并附带相应的说明。以此为例分析如下: #include #include #include #include #include static void button_interrupt(int irq, void *dummy, struct pt_regs *fp) { input_report_key(&button_dev, BTN_1, inb(BUTTON_PORT) & 1); input_sync(&button_dev); } static int __init button_init(void) { if (request_irq(BUTTON_IRQ, button_interrupt, 0, "button", NULL)) { printk(KERN_ERR "button.c: Can''t allocate irq %d\n", button_irq); return -EBUSY; } button_dev.evbit[0] = BIT(EV_KEY); button_dev.keybit[LONG(BTN_0)] = BIT(BTN_0); input_register_device(&button_dev); } static void __exit button_exit(void) { input_unregister_device(&button_dev); free_irq(BUTTON_IRQ, button_interrupt); } module_init(button_init); module_exit(button_exit); 这个示例 module 代码还是比较简单,在初始化函数里注册了一个中断处理例程。然后注册了一个 input device. 在中断处理程序里,将接收到的按键上报给input 子系统。 文档的作者在之后的分析里又对这个 module 作了优化。主要是在注册中断处理的时序上。在修改过后的代码里,为 input device 定义了open 函数,在open 的时候再去注册中断处理例程。具体的信息请自行参考这篇文档。在资料缺乏的情况下,kernel 自带的文档就是剖析kernel 相关知识的最好资料. 文档的作者还分析了几个api 函数。列举如下: 1):set_bit(EV_KEY, button_dev.evbit); set_bit(BTN_0, button_dev.keybit); 分别用来设置设备所产生的事件以...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Linux设备模型之input子系统详解

小辰4+ 关注
实名认证
内容提供者

出售各种资料和文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部