动态视频素材网站,中文网站做google广告好吗,国家653建筑工程网,一起做网站女装夏季裙代码清单8第2行获取platform_data#xff0c;而platform_data实际上是定义GPIO按键硬件信息的数组#xff0c;第31行的for循环工具这些信息申请GPIO并初始化中断#xff0c;对于LDD6140电路板而言#xff0c;这些信息如代码清单10。代码清单10 LDD6410开发板GPIO按键的plat…代码清单8第2行获取platform_data而platform_data实际上是定义GPIO按键硬件信息的数组第31行的for循环工具这些信息申请GPIO并初始化中断对于LDD6140电路板而言这些信息如代码清单10。代码清单10 LDD6410开发板GPIO按键的platform_data1 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 };4142 static struct gpio_keys_platform_data ldd6410_button_data {43 .buttons ldd6410_buttons,44 .nbuttons ARRAY_SIZE(ldd6410_buttons),45 };4647 static struct platform_device ldd6410_device_button {48 .name gpio-keys,49 .id -1,50 .dev {51 .platform_data ldd6410_button_data,52 }53 };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的通用的控制代码并向底层导出rtc_device_register()、rtc_device_unregister()用于注册和注销RTC导出rtc_class_ops结构体用于描述底层的RTC硬件操作。这一RTC通用层实现的结果是底层的RTC驱动不再需要关心RTC 作为字符设备驱动的具体实现也无需关心一些通用的RTC控制逻辑图3表明了这种关系。图3 Linux RTC设备驱动的分层drivers/rtc/rtc-s3c.c实现了S3C6410的RTC驱动其注册RTC以及绑定的rtc_class_ops的代码如代码清单11。代码清单11 S3C6410 RTC驱动的rtc_class_ops实例与RTC注册1 static const struct rtc_class_ops s3c_rtcops {2 .open s3c_rtc_open,3 .release s3c_rtc_release,4 .ioctl s3c_rtc_ioctl,5 .read_time s3c_rtc_gettime,6 .set_time s3c_rtc_settime,7 .read_alarm s3c_rtc_getalarm,8 .set_alarm s3c_rtc_setalarm,9 .irq_set_freq s3c_rtc_setfreq,10 .irq_set_state s3c_rtc_setpie,11 .proc s3c_rtc_proc,12 };1314 static int s3c_rtc_probe(struct platform_device *pdev)15 {16 ...17 rtc rtc_device_register(s3c, pdev-dev, s3c_rtcops,18 THIS_MODULE);19 ...20 }