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)





审核编辑:刘清

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

    关注

    40

    文章

    3430

    浏览量

    128221
  • RTC
    RTC
    +关注

    关注

    2

    文章

    484

    浏览量

    65440
  • LINUX内核
    +关注

    关注

    1

    文章

    311

    浏览量

    21389

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

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

收藏 人收藏

    评论

    相关推荐

    不影响选择原有器件前提下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

    请问MIMO为什么能在不增加带宽的前提下成倍的提高信道容量呢?

    请问MIMO为什么能在不增加带宽的前提下成倍的提高信道容量呢?
    发表于 05-16 16:35

    AD7656BSTZ保证供电和输入模拟信号不超的前提下,什么原因会导致芯片±15V引脚被烧?

    您好,如题,AD7656BSTZ保证供电和输入模拟信号不超的前提下,什么原因会导致芯片±15V(VDD和VSS)引脚被烧,谢谢!手册中提到每个引脚最大的电流不能超过10mA。
    发表于 12-14 08:23

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

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

    如何使用MPLAB代码配置器生成外设驱动程序代码

    本文档介绍了如何使用MPLAB代码配置器生成外设驱动程序代码。 MPLAB代码配置器(MPLAB Code Configurator,MCC)是一款用于MPLAB X IDE的用户
    发表于 06-11 14:28 40次下载
    如何使用MPLAB代码<b class='flag-5'>配置</b>器生成外设<b class='flag-5'>驱动程序</b>代码

    什么是驱动程序

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

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

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

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

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

    不连外网的前提下能否使用数据可视化工具

    用户提问:看了这么多个数据可视化工具的介绍,似乎都需要有网络支持,但我们公司需要在不连外网的前提下做数据可视化分析,那怎么办?还能用数据可视化工具吗?
    发表于 10-09 10:58 243次阅读

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

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