在Linux中有硬件時鍾與系統時鍾等兩種時鍾。硬件時鍾是指主機板上的時鍾設備,也就是通常可在BIOS畫面設定的時鍾。系統時鍾則是指kernel中的時鍾。當Linux啟動時,系統時鍾會去讀取硬件時鍾的設定,之后系統時鍾即獨立運作。所有Linux相關指令與函數都是讀取系統時鍾的設定。
系統時鍾的設定就是我們常用的date命令,而我們寫的RTC驅動就是為硬件時鍾服務的,它有屬於自己的命令hwclock,因此使用date命令是不可能調用到我們的驅動的(在這點上開始把我郁悶到了,寫完驅動之后,傻傻的用date指令來測試,當然結果是什么都沒有),我們可以通過hwclock的一些指令來實現更新rtc時鍾——也就是系統時鍾和硬件時鍾的交互。
hwclock –r 顯示硬件時鍾與日期
hwclock –s 將系統時鍾調整為與目前的硬件時鍾一致。
hwclock –w 將硬件時鍾調整為與目前的系統時鍾一致。
linux系統有兩個時鍾:一個是由主板電池驅動的“Real Time Clock”也叫做RTC或者叫CMOS時鍾,
硬件時鍾。當操作系統關機的時候,用這個來記錄時間,但是對於運行的系統是不用這個時間的。
另一個時間是 “System clock”也叫內核時鍾或者軟件時鍾,是由軟件根據時間中斷來進行計數的,
內核時鍾在系統關機的情況下是不存在的,所以,當操作系統啟動的時候,內核時鍾是要讀取RTC時間
來進行時間同步。並且在系統關機的時候將系統時間寫回RTC中進行同步。
如前所述,Linux內核與RTC進行互操作的時機只有兩個:
1) 內核在啟動時從RTC中讀取啟動時的時間與日期;
2) 內核在需要時將時間與日期回寫到RTC中。
系統啟動時,內核通過讀取RTC來初始化內核時鍾,又叫牆上時間,該時間放在xtime變量中。