前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux RTC 子系统

Linux RTC 子系统

作者头像
Jasonangel
发布2024-01-15 12:12:49
1130
发布2024-01-15 12:12:49
举报

rtc 一般负责系统关机后计时、闹钟等,Linux 内核提供了一个 rtc 子系统,来支持所有的 rtc 设备。

rtc 设备本质上是一个字符设备,rtc 子系统在字符设备的基础上抽象与硬件无关的部分,并在这个基础上拓展 sysfs 和 proc 文件系统下的访问。

源码目录

代码语言:javascript
复制
kernel-6.1/drivers/rtc/class.c
kernel-6.1/drivers/rtc/dev.c
kernel-6.1/drivers/rtc/interface.c
kernel-6.1/drivers/rtc/lib.c
kernel-6.1/drivers/rtc/nvmem.c
kernel-6.1/drivers/rtc/proc.c
kernel-6.1/drivers/rtc/sysfs.c
kernel-6.1/drivers/rtc/rtc-xxx.c
  • class.c:向内核注册 RTC 类,为底层驱动提供 register 与 unregister 接口用于 RTC 设备的注册/注销。初始化 RTC 设备结构、sysfs、proc
  • interface.c:提供用户程序与 RTC 的接口函数
  • dev.c:将 RTC 设备抽象为通用的字符设备,提供文件操作函数集
  • sysfs.c:管理 RTC 设备的 sysfs 属性,获取 RTC 设备名、日期、时间等
  • proc.c:管理 RTC 设备的 procfs 属性,提供中断状态和标志查询
  • lib.c:提供 RTC、Data 和 Time 之间的转换函数
  • rtc-xxx.c:各平台 RTC 设备的实际驱动
  • rtc.h:定义与 RTC 有关的数据结构

RK3399

以博主手边的 RK3399 为例,RTC 驱动在 /kernel/drivers/rtc/rtc-rx8010.c,生成的设备节点是 /dev/rtc0

开机 log

代码语言:javascript
复制
[1.578141] rk808-rtc rk808-rtc: rtc core: registered rk808-rtc as rtc0
[2.663991] rk808-rtc rk808-rtc: setting system clock to 2022-12-04 11:16:23 UTC (1670152583)

生成节点

rtc-rx8010.c

rtc 这个模块比较简单,实现的函数也少,总共才 400 行。主要是设置时间、获取时间、设置闹钟、读闹钟,以及 rtc 中断处理函数和闹钟中断处理函数。

代码语言:javascript
复制
rx8010_alarm_irq_enable
rx8010_get_time
rx8010_init
rx8010_ioctl
rx8010_irq_1_handler
rx8010_probe
rx8010_read_alarm
rx8010_set_alarm
rx8010_set_time

软件逻辑就不在这里赘述了,大家可以参考下面链接

代码语言:javascript
复制
https://jasper1024.com/jasper/c089e4b/

大家多看几个 Linux 子系统就会发现,基本上每个子系统都差不多,Linux 都会封装上中下 3 层,然后给你一些数据结构让你填充,就可以将这个子系统用起来了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RK3399
  • rtc-rx8010.c
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档