rtc(real time clock) ,實時時鐘。在linux核心中即為外部時鐘源,由32.768khz晶振產生;內部時鐘源是系晶元自帶24mhz時鐘分頻而來。
rtc優點如下:
1)消耗功率低(需要輔助電源,一般是鈕扣電池)
2)讓主系統處理更需時效性的工作
3)有時會比其他方式的輸出要更準確
linux**路徑:drivers/rtc,如下圖所示
可以看到主要rtc晶元:pcf系列、rx系列和ds系列,這些都需要外掛程式到i2c匯流排下,也就是說會用到i2c的介面。有些rtc晶元沒有掛在i2c匯流排下,直接封裝到內部ic裡,可以直接讀寫對應的暫存器進行操作,具體看硬體電路設計。
下圖是乙個rtc基本框架圖,網上也有類似的圖
主要還是看這幾個結構體 rtc_time 、rtc_wkalrm、rtc_device、rtc_class_ops
標頭檔案路徑:include/uapi/linux/rtc.h include/linux/rtc.h
rtc_time,最基本的結構體,呼叫時間都要用到
struct rtc_time ;
鬧鐘結構體,就是enabled、加上pending還有時間。
struct rtc_wkalrm ;
rtc_class_ops,裡面都是是樁函式,也叫鉤子函式,具體的驅動需要實現對應的讀寫介面。
struct rtc_class_ops ;
rtc_device,具體rtc驅動用到
struct rtc_device ;
主要看對應的probe函式,以rtc-s3c.c為例。
具體註冊流程看devm_rtc_device_register裡面的rtc_device_register實現。主要流程如下圖
先看核心列印驅動開起來了沒有
dmesg | grep -i rtc
date 顯示當前時間
設定當前時間,時間格式形如***x-xx-xx xx:xx:xx
date -s "2021-1-1 10:10:10"
root@zzz-virtualbox:/# date -s "2021-1-1 10:10:10"
2023年 01月 01日 星期五 10:10:10 cst
同步系統時間到rtc時間
hwclock -w
設定鬧鐘,例如當前rtc時間的20s後
echo +20 /sys/class/rtc/rtc0/wakealarm
檢視對應的proc介面
由於是虛擬機器,空有這些介面,根本沒有所謂irq和pending。
乙個簡單的用例如下rtc_test.c
#include #include #include #include #include #include #include #include #include #include struct rtc_time test_time = , , ,
, , ,
, , ,
, , ,
, ,, , ,
, , ,
, , ,
, , ,
, ,
, , ,
, ,
, , ,
, ,
, , ,
};struct rtc_time rtc_tm =;
struct rtc_wkalrm alrm = ;
void print_time(struct rtc_time *tm)
void print_alarm(struct rtc_wkalrm *alrm)
void transfer_time(struct rtc_time *tm)
int read_rtc_time_test(struct rtc_time *tm)
ret = ioctl(fd, rtc_rd_time, tm);
close(fd);
return ret;
}int set_rtc_time_test(struct rtc_time *tm)
ret = ioctl(fd, rtc_set_time, tm);
close(fd);
return ret;
}int main(void)
printf("\n");
}printf("-----end-----\n");
}
使用makefile進行編譯,如下所示
cc = gcc
cflags = -wall -o -g
rtc_test: rtc_test.o
$(cc) -o rtc_test rtc_test.o
rtc_test.o : rtc_test.c
$(cc) $(cflags) rtc_test.c
clean:
rm -rf rtc_test rtc_test.o
cc這裡去要根據對應的驅動編譯工具鏈去指定,由於本地環境已經裝了gcc,在系統環境中,所以直接用gcc即可。
編譯報錯沒有 對應的檔案,需要構建對應的核心編譯工具鏈。
tips:
1. rtc是硬體時鐘,linux核心中rtc是utc時間,系統時間是cst時間(北京時),原因是已經做了時區轉換,cst = utc + 8
2. linux核心中會進行時間轉換,統一換成距epoch的絕對秒數。
linux時間子系統之(一):時間的基本概念
30.linux-rtc驅動分析及使用 - 諾謙 -
linux rtc裝置驅動_paomadi的專欄-csdn部落格
linux RTC驅動移植
rtc real time clock 實時時鐘,主要作用是給linux系統提供時間。rtc因為是電池供電的,所以掉電後時間不丟失。linux核心把rtc用作 離線 的時間與日期維護器。當linux核心啟動時,它從rtc中讀取時間與日期,作為基準值。在執行期間核心完全拋開rtc,以軟體的形式維護系統...
測試驅動開發和IOC
我們說測試驅動可以是xp的一部分,xp講究的是適當設計 很多時候被人理解為不設計或草設計 同樣要實現tdd也要進行設計,這個設計就要考慮到 的可測試性,這就是我們所說的利於測試的設計。mock物件的提出和mock工具的使用又為我們提供了隔離測試 模擬複雜物件的平台。有時我們的 會讓mock物件也無能...
測試驅動需求分析 需求文件評審例項
需求文件評審例項 軟體的開發文件質量一般只能通過評審來進行保證,如何有效發現文件中的問題,是乙個令許多人頭疼的問題。先看一段關於日誌檔案的需求描述如下 軟體要將所有的訪問者都要記錄下來,對每次訪問要記錄訪問開始時間 訪問結束時間 訪問者的 ip位址這三個資訊作為一條日誌記錄。要求以天為單位每天生成乙...