0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在RTC驅(qū)動(dòng)程序正常工作的前提下用戶空間中如何配置時(shí)間參數(shù)

嵌入式小生 ? 來(lái)源:嵌入式小生 ? 作者:iriczhao ? 2022-11-25 09:06 ? 次閱讀

導(dǎo)讀

嵌入式系統(tǒng)中,設(shè)備時(shí)間是一個(gè)重要的參數(shù)。一般情況下,為了讓設(shè)備在斷電情況下,系統(tǒng)能正常走時(shí),會(huì)采用外部RTC芯片為系統(tǒng)提供斷電后的系統(tǒng)走時(shí)。

linux內(nèi)核中,內(nèi)核對(duì)RTC的支持分成了兩層:

(1)與硬件無(wú)關(guān)的頂層字符驅(qū)動(dòng)程序:用于實(shí)現(xiàn)內(nèi)核的RTC相關(guān)的API。

(2)與硬件相關(guān)的底層驅(qū)動(dòng)程序:用于和底層總線進(jìn)行通信

RTC API保證了用戶空間的程序(工具)獨(dú)立于底層平臺(tái)和特定的RTC芯片,例如:hwclock則遵循這些API 接口對(duì)/dev/rtc進(jìn)行操作。這些API也定義了sys(/sys/class/rtc)和proc(/proc/driver/rtc)文件系統(tǒng)中的屬性。

linux內(nèi)核的RTC框架支持各種各樣的RTC:集成到SOC中的RTC,支持I2C、SPI或者其他總線通信的單獨(dú)RTC芯片等。對(duì)于用戶空間來(lái)說(shuō),RTC框架會(huì)提供三種接口:

(1)/dev/rtcN。N表示RTC在系統(tǒng)上的序號(hào)。

(2)/sys/class/rtc/rtcN

(3)/proc/driver/rtc

本文不去具體描述RTC的框架細(xì)節(jié)和如何設(shè)計(jì)RTC驅(qū)動(dòng)程序,而是描述:在RTC驅(qū)動(dòng)程序正常工作的前提下,對(duì)于多個(gè)rtc,在用戶空間中如何配置時(shí)間參數(shù)。

背景描述

在一塊搭載rk3568處理器的硬件板卡上,需要使用RTC為系統(tǒng)提供斷電后的時(shí)間走時(shí),在對(duì)應(yīng)硬件板卡的Linux內(nèi)核中,針對(duì)rk3568開發(fā)了兩款rtc驅(qū)動(dòng):rtc0和rtc1:

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

在Linux啟動(dòng)過(guò)程中,內(nèi)核會(huì)自動(dòng)使用rtc0設(shè)置系統(tǒng)時(shí)間,該時(shí)間是一個(gè)默認(rèn)狀態(tài)時(shí)間參數(shù),當(dāng)系統(tǒng)斷電后,發(fā)現(xiàn)時(shí)間不會(huì)自動(dòng)走時(shí),因此在每次系統(tǒng)啟動(dòng)后,使用date命令查看系統(tǒng)時(shí)間,時(shí)間都是最初的默認(rèn)參數(shù)。實(shí)際上rtc1才代表外部的RTC芯片,所以此處可以在linux內(nèi)核啟動(dòng)后,進(jìn)入根文件系統(tǒng)服務(wù)啟動(dòng)過(guò)程中,在配置腳本中將rtc1的時(shí)間參數(shù)同步到系統(tǒng)。

解決方法

具體操作如下:

在命令行使用以下命令設(shè)置rtc1的時(shí)間:

date-s"具體時(shí)間參數(shù)"

時(shí)間參數(shù)格式為:“年-月-日 時(shí):分:秒”

在設(shè)置系統(tǒng)時(shí)間的時(shí)候,可以手動(dòng)設(shè)置,這樣在秒上可能存在誤差。如果系統(tǒng)板卡在開發(fā)階段可以連接網(wǎng)絡(luò),通過(guò)網(wǎng)絡(luò)更新系統(tǒng)時(shí)間也是一種較好的方式,哈哈。

接著使用以下命令將時(shí)間參數(shù)同步到rtc1:

hwclock -w -f /dev/rtc1

在/etc/profile文件末尾添加如下代碼,用于當(dāng)Linux啟動(dòng)后自動(dòng)從rtc1同步時(shí)間到系統(tǒng):

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時(shí)間同步到linux系統(tǒng)。
hwclock-s-f/dev/rtc1 &

總結(jié)

本文是一例在實(shí)際工作中所遇到的RTC問(wèn)題的解決方法總結(jié),沒(méi)有其他的了。

補(bǔ)充:『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

補(bǔ)充:『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)





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3535

    瀏覽量

    129003
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    519

    瀏覽量

    66151
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21588

原文標(biāo)題:嵌入式linux的RTC可以這樣“玩”

文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    最新可用隔離元件的性能提升如何幫助替代架構(gòu)不影響安全性的前提下提升系統(tǒng)性能

    本文探討了系統(tǒng)架構(gòu)選擇對(duì)電源和控制電路設(shè)計(jì)以及系統(tǒng)性能的影響。本文還將說(shuō)明最新可用隔離元件的性能提升如何幫助替代架構(gòu)不影響安全性的前提下提升系統(tǒng)性能
    的頭像 發(fā)表于 10-13 06:12 ?7788次閱讀
    最新可用隔離元件的性能提升如何幫助替代架構(gòu)<b class='flag-5'>在</b>不影響安全性的<b class='flag-5'>前提下</b>提升系統(tǒng)性能

    STM32跟wifi模塊通過(guò)USB沒(méi)有host的前提下如何交互呢?

    后不需要再插拔。是不是可以通過(guò)USB簡(jiǎn)單的進(jìn)行設(shè)備與設(shè)備的連接,不用考慮是否是host? 2. 如果1假設(shè)成立,那STM32跟wifi模塊通過(guò)USB沒(méi)有host的前提下如何交互呢?
    發(fā)表于 05-13 08:25

    PCB上不拆掉集成塊的前提下怎么能測(cè)其好壞?

    想請(qǐng)問(wèn)一下,PCB上不拆掉集成塊的前提下怎么能測(cè)其好壞,謝謝了
    發(fā)表于 09-02 07:56

    不影響選擇原有器件前提下,KEIL下增加STC單片機(jī)

    本帖最后由 eehome 于 2013-1-5 09:49 編輯 不影響選擇原有器件前提下,KEIL下增加STC單片機(jī)針對(duì)KEIL UV4 有效1、 X:\Keil\c51
    發(fā)表于 05-10 15:18

    如何簡(jiǎn)單檢測(cè)段式LCD的分壓方式,沒(méi)有LCD資料的前提下...

    如何簡(jiǎn)單檢測(cè)段式LCD的分壓方式,沒(méi)有LCD資料的前提下。謝謝有知道的告訴下
    發(fā)表于 01-14 17:08

    CC2530如何低功耗前提下有什么辦法喚醒終端?

    一定的時(shí)間內(nèi)得不到響應(yīng)就開始使它不斷的復(fù)位,保持喚醒狀態(tài),但這樣造成的后果是功耗非常大(正常工作狀態(tài)下工作電流大概是2ma,復(fù)位狀態(tài)下是30ma)。請(qǐng)問(wèn)如何低功耗
    發(fā)表于 03-22 11:52

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

    配置如附件所示,功耗為30UA是否正常,不改變靈敏度的前提下,是否有其它方式可降低功耗
    發(fā)表于 08-02 18:23

    求教大神們,不退出軟件的前提下,怎么實(shí)現(xiàn)用戶的退出和再登入?

    labview建立了運(yùn)行時(shí)菜單,包含用戶登錄和退出,求教大神們,不退出軟件的前提下,怎么實(shí)現(xiàn)用戶的退出和再登入?
    發(fā)表于 05-03 15:46

    can底層驅(qū)動(dòng)配置好的前提下,向DSP發(fā)送任何數(shù)據(jù),can就能接收到數(shù)據(jù)嗎

    我想問(wèn)下在can底層驅(qū)動(dòng)配置好的前提下,我向DSP發(fā)送任何數(shù)據(jù),can就能接收到數(shù)據(jù)嗎,然后將RMP=1即ECanaShadow.CANRMP.bit.RMP1 = 1;還是說(shuō)必須發(fā)送的數(shù)據(jù)符合一定的格式,can郵箱才能將RMP
    發(fā)表于 07-08 15:39

    Date功能:ISE中如何在未綜合實(shí)現(xiàn)的前提下打開ChipScope ?

    ISE中如何在未綜合實(shí)現(xiàn)的前提下雙擊Analyze Design Using ChipScope打開ChipScope ?
    發(fā)表于 02-10 15:48 ?1394次閱讀
    Date功能:ISE中如何在未綜合實(shí)現(xiàn)的<b class='flag-5'>前提下</b>打開ChipScope ?

    什么是驅(qū)動(dòng)程序

    驅(qū)動(dòng)程序一般指的是設(shè)備驅(qū)動(dòng)程序,是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序。相當(dāng)于硬件的接口,操作系統(tǒng)只有通過(guò)這個(gè)接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的
    的頭像 發(fā)表于 09-06 18:31 ?3.5w次閱讀

    如何為L(zhǎng)inux編寫用戶空間設(shè)備驅(qū)動(dòng)程序

    了解如何為L(zhǎng)inux編寫用戶空間設(shè)備驅(qū)動(dòng)程序。 用戶空間驅(qū)動(dòng)程序為某些設(shè)備提供內(nèi)核
    的頭像 發(fā)表于 11-22 07:04 ?3689次閱讀

    如何在避免接觸的前提下高效地完成體溫檢測(cè)?

    當(dāng)測(cè)溫成為商業(yè)綜合體每天必須面對(duì)的大工程,如何在避免接觸的前提下高效地完成體溫檢測(cè)?廣州,高新興5G防疫機(jī)器人承擔(dān)起這項(xiàng)任務(wù)。
    的頭像 發(fā)表于 08-24 11:46 ?2025次閱讀

    網(wǎng)卡驅(qū)動(dòng)程序正常的解決辦法

    網(wǎng)卡驅(qū)動(dòng)程序異常上不了網(wǎng)怎么辦 網(wǎng)卡驅(qū)動(dòng)程序正常的解決辦法
    發(fā)表于 09-28 09:49 ?1次下載

    linux驅(qū)動(dòng)程序運(yùn)行在什么空間

    Linux 驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,負(fù)責(zé)管理硬件設(shè)備與操作系統(tǒng)之間的交互。驅(qū)動(dòng)程序運(yùn)行在內(nèi)核空間(Kernel Space),這是操作系統(tǒng)的核心部分,與用戶
    的頭像 發(fā)表于 08-30 14:37 ?240次閱讀