硬件實時時鐘(RTC)詳解
硬件實時時鐘(Real-Time Clock,RTC)是計算機主板上的一個獨立計時芯片,用于在系統關機后持續記錄時間。它不依賴操作系統,由紐扣電池(如CR2032)供電,保證時間數據持久化。
1. RTC 核心特性
特性 | 說明 |
---|---|
獨立性 | 不依賴CPU或操作系統,斷電后仍運行(靠電池供電) |
精度 | 通常誤差 ±2ppm(約每月±5秒),高精度RTC(如DS3231)可達 ±0.5ppm |
接口 | 通過I2C或SPI與系統通信 |
時鐘源 | 32.768kHz晶振(分頻后生成1Hz信號) |
電池壽命 | 典型CR2032電池可使用3-10年 |
2. Linux 中的 RTC 操作
(1) 查看系統時間與硬件時間
# 系統時間(軟件時鐘)
date# 硬件時間(RTC)
sudo hwclock --show
(2) 同步時間
# 將系統時間寫入RTC
sudo hwclock --systohc# 從RTC讀取時間到系統
sudo hwclock --hctosys
(3) 檢查RTC設備
# 列出RTC設備
ls /dev/rtc*# 查看RTC詳細信息
sudo dmesg | grep rtc
3. RTC 與系統時鐘的關系
-
系統時鐘:
由Linux內核維護,依賴CPU計時和NTP同步,關機后失效。
(可通過date
命令修改) -
硬件時鐘(RTC):
物理芯片記錄的時間,持久化存儲。
(通過hwclock
命令管理)
同步流程:
- 開機時:RTC時間 → 系統時間(若未配置NTP)
- 關機時:系統時間 → RTC時間(需手動或自動同步)
4. 配置自動時間同步
(1) 啟用NTP與RTC同步
編輯 /etc/systemd/timesyncd.conf
:
[Time]
NTP=pool.ntp.org
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org
重啟服務:
sudo timedatectl set-ntp true
sudo systemctl restart systemd-timesyncd
(2) 設置時區
sudo timedatectl set-timezone Asia/Shanghai
(3) 檢查時間同步狀態
timedatectl status
輸出示例:
Local time: Wed 2023-10-04 15:30:00 CSTUniversal time: Wed 2023-10-04 07:30:00 UTCRTC time: Wed 2023-10-04 07:30:00Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yesNTP service: activeRTC in local TZ: no
5. 常見問題
(1) RTC時間與系統時間不一致
原因:
- 未啟用NTP同步
- 時區配置錯誤
- RTC電池電量不足
解決:
# 強制同步
sudo hwclock --systohc
(2) RTC時間顯示為UTC
若希望RTC存儲本地時間(不推薦):
sudo timedatectl set-local-rtc 1
(3) RTC設備未識別
檢查內核日志:
dmesg | grep rtc
若未檢測到,可能是主板驅動問題或電池失效。
6. 嵌入式開發中的RTC
在嵌入式Linux中,需確保:
- 內核啟用RTC驅動:
make menuconfig # 勾選 Device Drivers → Real Time Clock
- 設備樹(DTS)配置RTC節點:
&i2c1 {rtc@68 {compatible = "maxim,ds3231";reg = <0x68>;}; };
7. 總結
操作 | 命令 | 說明 |
---|---|---|
查看RTC時間 | sudo hwclock --show | 顯示硬件時鐘 |
系統時間→RTC | sudo hwclock --systohc | 同步到硬件 |
RTC時間→系統 | sudo hwclock --hctosys | 同步到系統 |
啟用NTP自動同步 | sudo timedatectl set-ntp true | 依賴網絡時間協議 |