0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在RTC驱动程序正常工作的前提下用户空间中如何配置时间参数

嵌入式小生 来源:嵌入式小生 作者:iriczhao 2022-11-25 09:06 次阅读

导读

嵌入式系统中,设备时间是一个重要的参数。一般情况下,为了让设备在断电情况下,系统能正常走时,会采用外部RTC芯片为系统提供断电后的系统走时。

linux内核中,内核对RTC的支持分成了两层:

(1)与硬件无关的顶层字符驱动程序:用于实现内核的RTC相关的API

(2)与硬件相关的底层驱动程序:用于和底层总线进行通信

RTC API保证了用户空间的程序(工具)独立于底层平台和特定的RTC芯片,例如:hwclock则遵循这些API 接口对/dev/rtc进行操作。这些API也定义了sys(/sys/class/rtc)和proc(/proc/driver/rtc)文件系统中的属性。

linux内核的RTC框架支持各种各样的RTC:集成到SOC中的RTC,支持I2C、SPI或者其他总线通信的单独RTC芯片等。对于用户空间来说,RTC框架会提供三种接口:

(1)/dev/rtcN。N表示RTC在系统上的序号。

(2)/sys/class/rtc/rtcN

(3)/proc/driver/rtc

本文不去具体描述RTC的框架细节和如何设计RTC驱动程序,而是描述:在RTC驱动程序正常工作的前提下,对于多个rtc,在用户空间中如何配置时间参数

背景描述

在一块搭载rk3568处理器的硬件板卡上,需要使用RTC为系统提供断电后的时间走时,在对应硬件板卡的Linux内核中,针对rk3568开发了两款rtc驱动:rtc0和rtc1:

f982ae46-6c56-11ed-8abf-dac502259ad0.png

在Linux启动过程中,内核会自动使用rtc0设置系统时间,该时间是一个默认状态时间参数,当系统断电后,发现时间不会自动走时,因此在每次系统启动后,使用date命令查看系统时间,时间都是最初的默认参数。实际上rtc1才代表外部的RTC芯片,所以此处可以在linux内核启动后,进入根文件系统服务启动过程中,在配置脚本中将rtc1的时间参数同步到系统。

解决方法

具体操作如下:

在命令行使用以下命令设置rtc1的时间:

date-s"具体时间参数"

时间参数格式为:“年-月-日 时:分:秒”

在设置系统时间的时候,可以手动设置,这样在秒上可能存在误差。如果系统板卡在开发阶段可以连接网络,通过网络更新系统时间也是一种较好的方式,哈哈。

接着使用以下命令将时间参数同步到rtc1:

hwclock -w -f /dev/rtc1

在/etc/profile文件末尾添加如下代码,用于当Linux启动后自动从rtc1同步时间到系统:

hwclock-s-f/dev/rtc1

完成后如下所示:

#/etc/profile:system-wide.profilefilefortheBourneshell(sh(1))
#andBournecompatibleshells(bash(1),ksh(1),ash(1),...).

if["${PS1-}"];then
if["${BASH-}"]&&["$BASH"!="/bin/sh"];then
#Thefilebash.bashrcalreadysetsthedefaultPS1.
#PS1='h:w$'
if[-f/etc/bash.bashrc];then
./etc/bash.bashrc
fi
else
if["`id-u`"-eq0];then
PS1='#'
else
PS1='$'
fi
fi
fi

if[-d/etc/profile.d];then
foriin/etc/profile.d/*.sh;do
if[-r$i];then
.$i
fi
done
unseti
fi

#用于将外部RTC时间同步到linux系统。
hwclock-s-f/dev/rtc1 &

总结

本文是一例在实际工作中所遇到的RTC问题的解决方法总结,没有其他的了。

补充:『date命令帮助』

Usage:date[OPTION]...[+FORMAT]
or:date[-u|--utc|--universal][MMDDhhmm[[CC]YY][.ss]]
DisplaythecurrenttimeinthegivenFORMAT,orsetthesystemdate.

Mandatoryargumentstolongoptionsaremandatoryforshortoptionstoo.
-d,--date=STRINGdisplaytimedescribedbySTRING,not'now'
--debugannotatetheparseddate,
andwarnaboutquestionableusagetostderr
-f,--file=DATEFILElike--date;onceforeachlineofDATEFILE
-I[FMT],--iso-8601[=FMT]outputdate/timeinISO8601format.
FMT='date'fordateonly(thedefault),
'hours','minutes','seconds',or'ns'
fordateandtimetotheindicatedprecision.
Example:2006-08-14T0256-06:00
-R,--rfc-emailoutputdateandtimeinRFC5322format.
Example:Mon,14Aug20060256-0600
--rfc-3339=FMToutputdate/timeinRFC3339format.
FMT='date','seconds',or'ns'
fordateandtimetotheindicatedprecision.
Example:2006-08-140256-06:00
-r,--reference=FILEdisplaythelastmodificationtimeofFILE
-s,--set=STRINGsettimedescribedbySTRING
-u,--utc,--universalprintorsetCoordinatedUniversalTime(UTC)
--helpdisplaythishelpandexit
--versionoutputversioninformationandexit

补充:『hwclock命令帮助』

BusyBoxv1.34.1(2022-08-121432CST)multi-callbinary.

Usage:hwclock[-swul][--systz][-fDEV]

Showorsethardwareclock(RTC)

-sSetsystemtimefromRTC
-wSetRTCfromsystemtime
--systzSetin-kerneltimezone,correctsystemtime
ifRTCiskeptinlocaltime
-fDEVUsespecifieddevice(e.g./dev/rtc2)
-uAssumeRTCiskeptinUTC
-lAssumeRTCiskeptinlocaltime
(ifneitherisgiven,readfrom/var/lib/hwclock/adjtime)





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3568

    浏览量

    129238
  • RTC
    RTC
    +关注

    关注

    2

    文章

    529

    浏览量

    66318
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21619

原文标题:嵌入式linux的RTC可以这样“玩”

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    最新可用隔离元件的性能提升如何帮助替代架构不影响安全性的前提下提升系统性能

    本文探讨了系统架构选择对电源和控制电路设计以及系统性能的影响。本文还将说明最新可用隔离元件的性能提升如何帮助替代架构不影响安全性的前提下提升系统性能
    的头像 发表于 10-13 06:12 7824次阅读
    最新可用隔离元件的性能提升如何帮助替代架构<b class='flag-5'>在</b>不影响安全性的<b class='flag-5'>前提下</b>提升系统性能

    STM32跟wifi模块通过USB没有host的前提下如何交互呢?

    后不需要再插拔。是不是可以通过USB简单的进行设备与设备的连接,不用考虑是否是host? 2. 如果1假设成立,那STM32跟wifi模块通过USB没有host的前提下如何交互呢?
    发表于 05-13 08:25

    PCB上不拆掉集成块的前提下怎么能测其好坏?

    想请问一下,PCB上不拆掉集成块的前提下怎么能测其好坏,谢谢了
    发表于 09-02 07:56

    不影响选择原有器件前提下KEIL下增加STC单片机

    本帖最后由 eehome 于 2013-1-5 09:49 编辑 不影响选择原有器件前提下KEIL下增加STC单片机针对KEIL UV4 有效1、 X:\Keil\c51
    发表于 05-10 15:18

    如何简单检测段式LCD的分压方式,没有LCD资料的前提下...

    如何简单检测段式LCD的分压方式,没有LCD资料的前提下。谢谢有知道的告诉下
    发表于 01-14 17:08

    CC2530如何低功耗前提下有什么办法唤醒终端?

    一定的时间内得不到响应就开始使它不断的复位,保持唤醒状态,但这样造成的后果是功耗非常大(正常工作状态下工作电流大概是2ma,复位状态下是30ma)。请问如何低功耗
    发表于 03-22 11:52

    cy8cmbr3116:不改变灵敏度的前提下,是否有其它方式可降低功耗?

    配置如附件所示,功耗为30UA是否正常,不改变灵敏度的前提下,是否有其它方式可降低功耗
    发表于 08-02 18:23

    求教大神们,不退出软件的前提下,怎么实现用户的退出和再登入?

    labview建立了运行时菜单,包含用户登录和退出,求教大神们,不退出软件的前提下,怎么实现用户的退出和再登入?
    发表于 05-03 15:46

    can底层驱动配置好的前提下,向DSP发送任何数据,can就能接收到数据吗

    我想问下在can底层驱动配置好的前提下,我向DSP发送任何数据,can就能接收到数据吗,然后将RMP=1即ECanaShadow.CANRMP.bit.RMP1 = 1;还是说必须发送的数据符合一定的格式,can邮箱才能将RMP
    发表于 07-08 15:39

    Date功能:ISE中如何在未综合实现的前提下打开ChipScope ?

    ISE中如何在未综合实现的前提下双击Analyze Design Using ChipScope打开ChipScope ?
    发表于 02-10 15:48 1405次阅读
    Date功能:ISE中如何在未综合实现的<b class='flag-5'>前提下</b>打开ChipScope ?

    什么是驱动程序

    驱动程序一般指的是设备驱动程序,是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的
    的头像 发表于 09-06 18:31 3.5w次阅读

    如何为Linux编写用户空间设备驱动程序

    了解如何为Linux编写用户空间设备驱动程序用户空间驱动程序为某些设备提供内核
    的头像 发表于 11-22 07:04 3715次阅读

    如何在避免接触的前提下高效地完成体温检测?

    当测温成为商业综合体每天必须面对的大工程,如何在避免接触的前提下高效地完成体温检测?广州,高新兴5G防疫机器人承担起这项任务。
    的头像 发表于 08-24 11:46 2047次阅读

    网卡驱动程序正常的解决办法

    网卡驱动程序异常上不了网怎么办 网卡驱动程序正常的解决办法
    发表于 09-28 09:49 1次下载

    linux驱动程序运行在什么空间

    Linux 驱动程序是操作系统的一部分,负责管理硬件设备与操作系统之间的交互。驱动程序运行在内核空间(Kernel Space),这是操作系统的核心部分,与用户
    的头像 发表于 08-30 14:37 304次阅读