Time(NTP+RTC)
系統時間 date
date
sudo date -s "2014-11-19 00:00:00"
sudo date 112900002014.00
NTP: Network Time Protocol
sudo apt-get install ntpdate
sudo ntpdate -u watch.stdtime.gov.tw
手動設定系統時間
sudo date -s "2011-01-01 01:01:01"
確認NTP服務裝態
sudo service ntp status
sudo service ntp start
sudo service ntp stop
台灣NTP server列表
- tock.stdtime.gov.tw
- watch.stdtime.gov.tw
- time.stdtime.gov.tw
- clock.stdtime.gov.tw
- tick.stdtime.gov.tw
Auto NTP
pi@raspberrypi:~ $ timedatectl
Local time: Tue 2016-08-30 17:27:05 CST
Universal time: Tue 2016-08-30 09:27:05 UTC
RTC time: n/a
Time zone: Asia/Taipei (CST, +0800)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
pi@raspberrypi:~ $ sudo timedatectl set-ntp yes
pi@raspberrypi:~ $ sudo timedatectl
Local time: Tue 2016-08-30 17:27:52 CST
Universal time: Tue 2016-08-30 09:27:52 UTC
RTC time: n/a
Time zone: Asia/Taipei (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
注意這行
NTP enabled: yes
另一個設定自動NTP的方式
sudo timedatectl set-ntp yes
NTP啟動/停止/看狀態
pi@raspberrypi:~ $ sudo service ntp start
...(skip)
pi@raspberrypi:~ $ sudo service ntp stop
...(skip)
pi@raspberrypi:~ $ sudo service ntp status
...(skip)
透過NTP更新時間
https://victorhurdugaci.com/raspberry-pi-sync-date-and-time
1) 查亞洲NTP伺服器
2) 修改ntp.conf
3) 設定時區檔 (應該是給ntpd程式去抓來用的,不設定的話ntpd會起不來)
4) 當系統時間與NTP報時差太多(預設1000秒)時,NTP會覺得其中有鬼而不敢更新系統時間。此時需手動強制同步。
實驗記錄
1) RTC設定錯誤時間,啟動時斷網,無NTP,啟動後系統時間為正確時間向前推一段短時間(約1小時內),猜測為樹莓久久會偷把系統時間更新於SD卡內。
2) RTC設定為錯誤時間,啟動時連網,有NTP,系統時間仍為錯誤。猜測為誤差時間過大,NTP不更新系統時間。
3) 延續2) 手動強制使用NTP更新系統時間 sudo ntp -gq 而後重啟動系統,系統時間恢復正確。RTC時間也被修正為正確時間。
結論1: 當NTP成功同步時,會連RTC一併同步
4) 有NTP(連網),RTC正確,系統時間錯誤,斷電重啟:系統時間錯誤,RTC錯誤。
x) 無NTP(未連網),RTC正確,系統時間錯誤,軟體重啟(不斷電):系統時間恢復正確。
x) 無NTP(未連網),RTC正確,系統時間錯誤,斷電重啟:系統時間錯誤,RTC錯誤。
TIPS:
修改系統時間
sudo date 112900002014.00
讀寫RTC
sudo hwclock -r
sudo hwclock --systohc
sudo hwclock --hctosys
啟動時載入RTC裝置
sudo vim /etc/rc.local
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
使用NTP Client同步時間
http://linux.vbird.org/linux_server/0440ntp.php
http://luijnijei.blog.163.com/blog/static/350245942010913912192/
pi@raspberrypi:~ $ sudo date 112900002014
Sat 29 Nov 00:00:00 CST 2014
pi@raspberrypi:~ $ date
Sat 29 Nov 00:00:02 CST 2014
pi@raspberrypi:~ $ sudo ntpdate asia.pool.ntp.org
20 Apr 17:35:52 ntpdate[1317]: step time server 211.233.84.186 offset 75490526.577625 sec
pi@raspberrypi:~ $ date
Thu 20 Apr 17:35:56 CST 2017
RTC(i2c)
[rpi+rtc](http://yehnan.blogspot.tw/2014/01/raspberry-pirtc.html)
[Adding a Real Time Clock to your Raspberry Pi](http://thepihut.com/blogs/raspberry-pi-tutorials/17209332-adding-a-real-time-clock-to-your-raspberry-pi)
安裝i2c工具程式
pi@raspberrypi:~ $ sudo apt-get install python-smbus i2c-tools
開啟I2C介面:開始程式集/Preferences/Raspberry Pi Configuration
測試是否偵測得到i2c晶片 (先確認I2C介面是否已開啟)
pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
手動插入驅動程式
pi@raspberrypi:~ $ sudo modprobe i2c-bcm2708
pi@raspberrypi:~ $ sudo modprobe i2c-dev
pi@raspberrypi:~ $ sudo modprobe rtc-ds1307
開機時自動載入驅動模組:編輯 /etc/modules,加入以下內容
i2c-bcm2708
i2c-dev
rtc-ds1307
提升權限並寫入設定值
pi@raspberrypi:~ $ sudo bash
root@raspberrypi:/home/pi# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
root@raspberrypi:/home/pi# exit
exit
開機時自動加入裝置並更新系統時間,修改/etc/rc.local,加入以下兩行
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
寫入RTC
pi@raspberrypi:~ $ sudo hwclock -r
Sat 01 Jan 2000 08:25:02 CST -0.664135 seconds
pi@raspberrypi:~ $ date
Wed 19 Apr 14:57:02 CST 2017
pi@raspberrypi:~ $ sudo hwclock -w
pi@raspberrypi:~ $ sudo hwclock -r
Wed 19 Apr 2017 14:57:19 CST -0.300283 seconds
同場加映
手動修改系統時間
pi@raspberrypi:~ $ date
Wed 19 Apr 15:27:04 CST 2017
pi@raspberrypi:~ $ sudo date -s "2011-01-01 01:01:01"
Sat 1 Jan 01:01:01 CST 2011
pi@raspberrypi:~ $ date
Sat 1 Jan 01:01:03 CST 2011
無法設定RTC解法:重新插入rtc-ds1307模組並提升權限並設定0x68。
pi@raspberrypi:~ $ sudo hwclock -r
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.
檢查驅動,重新設定
pi@raspberrypi:~ $ lsmod | grep i2c
i2c_bcm2708 4834 0
i2c_dev 5859 0
pi@raspberrypi:~ $ lsmod | grep rtc
rtc_ds1307 9521 0
pi@raspberrypi:~ $ sudo bash
root@raspberrypi:/home/pi# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
root@raspberrypi:/home/pi# exit
exit
pi@raspberrypi:~ $ sudo hwclock -r
Sat 01 Jan 2011 01:34:36 CST -0.952313 seconds
pi@raspberrypi:~ $ sudo hwclock -w
pi@raspberrypi:~ $ sudo hwclock -r
Wed 19 Apr 2017 16:05:32 CST -0.467660 seconds
猜測為開機時未加入ds1307裝置,修改rc.local為開機時自動加入ds1307
加入以下兩行:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
如下:
pi@raspberrypi:~ $ sudo cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
exit 0