快速业务通道

Linux设备驱动的分层设计思想

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-19
动作发生的时候,报告事件.代码清单9列出了GPIO按键中断发生时的事件 报告代码. 代码清单9 GPIO按键中断发生时的事件报告 1 static void gpio_keys_report_event(struct gpio_button_data *bdata) 2 { 3 struct gpio_keys_button *button = bdata->button; 4 struct input_dev *input = bdata->input; 5 unsigned int type = button->type ?: EV_KEY; 6 int state = (gpio_get_value(button->gpio) ? 1 : 0) ^ button->active_low; 7 8 input_event(input, type, button->code, !!state); 9 input_sync(input); 10 } 11 12 static irqreturn_t gpio_keys_isr(int irq, void *dev_id) 13 { 14 struct gpio_button_data *bdata = dev_id; 15 struct gpio_keys_button *button = bdata->button; 16 17 BUG_ON(irq != gpio_to_irq(button->gpio)); 18 19 if (button->debounce_interval) 20 mod_timer(&bdata->timer, 21 jiffies msecs_to_jiffies(button->debounce_interval)); 22 else 23 gpio_keys_report_event(bdata); 24 25 return IRQ_HANDLED; 26 } 第8行是报告键值,而第9行是1个同步事件,暗示前面报告的消息属于1个消息组.譬如用户在报告完X坐标后,又报告Y坐标,之后报告1个同步事件, 应用程序即可知道前面报告的X、Y这2个事件属于1组,它会将2者联合起来形成1个(X,Y)的坐标. 代码清单8第2行获取platform_data,而platform_data实际上是定义GPIO按键硬件信息的数组,第31行的for循环工 具这些信息申请GPIO并初始化中断,对于LDD6140电路板而言,这些信息如代码清单10. 代码清单10 LDD6410开发板GPIO按键的platform_data 1 static struct gpio_keys_button ldd6410_buttons[] = { 2 { 3 .gpio = S3C64XX_GPN(0), 4 .code = KEY_DOWN, 5 .desc = "Down", 6 .active_low = 1, 7 }, 8 { 9 .gpio = S3C64XX_GPN(1), 10 .code = KEY_ENTER, 11 .desc = "Enter", 12 .active_low = 1, 13 .wakeup = 1, 14 }, 15 { 16 .gpio = S3C64XX_GPN(2), 17 .code = KEY_HOME, 18 .desc = "Home", 19 .active_low = 1, 20 }, 21 { 22 .gpio = S3C64XX_GPN(3), 23 .code = KEY_POWER, 24 .desc = "Power", 25 .active_low = 1, 26 .wakeup = 1, 27 }, 28 { 29 .gpio = S3C64XX_GPN(4), 30 .code = KEY_TAB, 31 .desc = "Tab", 32 .active_low = 1, 33 }, 34 { 35 .gpio = S3C64XX_GPN(5), 36 .code = KEY_MENU, 37 .desc = "Menu", 38 .active_low = 1, 39 }, 40 }; 41 42 static struct gpio_keys_platform_data ldd6410_button_data = { 43 .buttons = ldd6410_buttons, 44 .nbuttons = ARRAY_SIZE(ldd6410_buttons), 45 }; 46 47 static struct platform_device ldd6410_device_button = { 48 .name = "gpio-keys", 49 .id = -1, 50 .dev = { 51 .platform_data = &ldd6410_button_data, 52 } 53 };
Empire CMS,phome.net
1.3 RTC设备驱动 RTC(实时钟)借助电池供电,在系统掉电的情况下依然可以行走.它通常还具有产生周期中断以及产生闹钟(alarm)中断的能力,是一种典型的字 符设备.作为一种字符设备驱动,RTC需要有file_operations中接口函数的实现,如open()、release()、read()、 poll()、ioctl()等,而典型的IOCTL包括RTC_SET_TIME、RTC_ALM_READ、RTC_ALM_SET、 RTC_IRQP_SET、RTC_IRQP_READ等,这些对于所有的RTC是通用的,只有底层的具体实现是设备相关的. 因此,drivers/rtc/rtc-dev.c实现了RTC驱动通用的字符设备驱动层,它实现了file_opearations的成员函数以 及一些关于RTC的通

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号