1、Linux 内核 RTC 驱动简介
RTC 设备驱动是一个标准的字符设备驱动,应用程序通过 open、release、read、write 和 ioctl等函数完成对 RTC 设备的操作。
Linux 内核将 RTC 设备抽象为 rtc_device 结构体,因此 RTC 设备驱动就是申请并初始化rtc_device,最后将 rtc_device 注册到 Linux 内核里面。
用一个操作集合(结构体:rtc_device)来表示RTC 设备的操作,此结构体定义在 include/linux/rtc.h 文件中。重点关注 ops 成员变量,是一个 rtc_class_ops 类型的指针变量,为 RTC 设备的最底层操作函数集合,包括从 RTC 设备中读取时间、向 RTC 设备写入新的时间值等。并不是提供给应用层的file_operations 函数操作集。
RTC 是个字符设备,那么肯定有字符设备的 file_operations 函数操作集,Linux 内核提供了一个 RTC 通用字符设备驱动文件,文件名为 drivers/rtc/rtc-dev.c。
应用程序可以通过 ioctl 函数来设置/读取时间、设置/读取闹钟的操作,那么对应的 rtc_dev_ioctl 函数就会执行,rtc_dev_ioctl 最终会通过操作 rtc_class_ops 中的 read_time、set_time 等函数来对具体 RTC 设备的读写操作。
当 rtc_class_ops 准备好以后需要将其注册到 Linux 内核中,使用如下函数: