|
access_ok(int,constvoid*addr,ulong)ex:if(!access_ok(verify_write,buffer,count))returnerror;staticconststructwatchdog_infos3c2410_wdt_ident={.options=OPTIONS,.firmware_version=0,.identity="S3C2410Watchdog",};staticconststructwatchdog_opss3c2410wdt_ops={
.owner=THIS_MODULE,.start=s3c2410wdt_start,.stop=s3c2410wdt_stop,.ping=s3c2410wdt_keepalive,.set_timeout=s3c2410wdt_set_heartbeat,.restart=s3c2410wdt_restart,};staticconststructwatchdog_devices3c2410_wdd={.info=&s3c2410_wdt_ident,.ops=&s3c2410wdt_ops,.timeout=S3C2410_WATCHDOG_DEFAULT_TIME,};watchdog_register_device(&wdt->wdt_device);注册10、RTC驱动
嵌入式系统一般有两个时间,一个是RTC时间,一个是Linux系统时间。RTC时间存储在RTC控制器中,系统断电后通过电池供电,保证系统下次重新上电都能读到正确的时间。通常在系统启动脚本中读取RTC时间,并将RTC时间设置为系统时间。Linux中的date命令是用来读取和设置系统时间;而hwclock命令是用来读取和设置RTC时间的。
注册与注销RTC驱动
devm_rtc_device_register(&pdev->dev,"s3c",&s3c_rtcops,THIS_MODULE);RTC设备类的操作函数接口
structrtc_class_ops{int(*ioctl)(structdevice*,unsignedint,unsignedlong);int(*read_time)(structdevice*,structrtc_time*);int(*set_time)(structdevice*,structrtc_time*);int(*read_alarm)(structdevice*,structrtc_wkalrm*);int(*set_alarm)(structdevice*,structrtc_wkalrm*);int(*proc)(structdevice*,structseq_file*);int(*set_mmss64)(structdevice*,time64_tsecs);int(*set_mmss)(structdevice*,unsignedlongsecs);int(*read_callback)(structdevice*,intdata);int(*alarm_irq_enable)(structdevice*,unsignedintenabled);int(*read_offset)(structdevice*,long*offset);int(*set_offset)(structdevice*,longoffset);};RTC驱动也包含一个通用的设备层,负责创建/dev/trc设备,并向应用层提供统一接口(调用devm_rtc_device_register注册RTC,该函数会调用创建设备节点函数)
11、LED类设备
?Linux 内核定义了LED类设备专门的处理各种外设的LED灯。
structled_classdev{..}#defineled_classdev_register(parent,led_cdev)\of_led_classdev_register(parent,NULL,led_cdev)voidled_classdev_unregister(structled_classdev*led_cdev)看完上述内容,你们对linux设备驱动有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注Vecloud行业资讯频道,感谢各位的阅读。 |
|