『壹』 求助,剛開始學linux,怎麼把硬體時鍾心為24小時制
先用date命令設置成24小時。然後再同步就可以了。
『貳』 Linux系統下的NTP配置
第一步,選擇最好的NTP服務地址
具體命令為ntpdate -q IP地址或域名
廣東地區NTP優選結果如下:
①time4.cloud.tencent.com
②server time.asia.apple.com
③server cn.ntp.org.cn
④server ntp.aliyun.com
⑤server cn.pool.ntp.org
檢查BIOS主板時間的命令
hwclock -r
NTP服務啟停命令
sudo systemctl start/stop ntpd
檢查查看ntp伺服器有無和上層ntp連通
ntpstat
查看ntp伺服器與上層ntp的狀態
ntpq -pn
===server選項格式===
server host [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]
其中host是上層NTP伺服器的IP地址或域名,隨後所跟的參數解釋如下所示:
◆ key: 表示所有發往伺服器的報文包含有秘鑰加密的認證信息,n是32位的整數,表示秘鑰號。
◆ version: 表示發往上層伺服器的報文使用的版本號,n默認是3,可以是1或者2。
◆ prefer: 如果有多個server選項,具有該參數的伺服器優先使用。
◆ mode: 指定數據報文mode欄位的值。
◆ minpoll: 指定與查詢該伺服器的最小時間間隔為2的n次方秒,n默認為6,范圍為4-14。
◆ maxpoll: 指定與查詢該伺服器的最大時間間隔為2的n次方秒,n默認為10,范圍為4-14。
◆ iburst: 當初始同步請求時,採用突發方式接連發送8個報文,時間間隔為2秒。
===同步硬體時鍾===
ntp服務,默認只會同步系統時間。
如果想要讓ntp同時同步硬體時間,可以設置/etc/sysconfig/ntpd文件,
在/etc/sysconfig/ntpd文件中,添加【SYNC_HWCLOCK=yes】這樣,就可以讓硬體時間與系統時間一起同步。
允許BIOS與系統時間同步,也可以通過hwclock -w 命令。
hwclock命令用來查詢和設置硬體時鍾。
hwclock -r 讀取並列印硬體時鍾
hwclock -s 將硬體時鍾同步到系統時鍾
hwclock -w 將系統時鍾同步到硬體時鍾
系統時鍾與硬體時鍾
在Linux中有硬體時鍾與系統時鍾等兩種時鍾。硬體時鍾是指主機板上的時鍾設備,也就是通常可在BIOS畫面設定的時鍾。系統時鍾則是指kernel中的時鍾。當Linux啟動時,系統時鍾會去讀取硬體時鍾的設定,之後系統時鍾即獨立運作。所有Linux相關指令與函數都是讀取系統時鍾的設定。
參考文檔:
Linux伺服器NTP客戶端配置——https://www.cnblogs.com/paul8339/p/10059364.html
NTP服務、客戶端配置詳解——https://blog.51cto.com/u_11392081/1784080
『叄』 linux的硬體時鍾
什麼是硬體時鍾?
記錄在CMOS中的時鍾,和系統是沒有關系的。是靠紐扣電池來保存和計數的。硬體時鍾能記錄的信息有且僅有一個時間值(注意,和時區沒有一毛錢關系)。所以,當我們設置硬體時鍾的時候,僅僅是設置了一個數值。當我們讀取硬體時鍾的時候,也僅僅是一個數值。
每次操作系統啟動的時候,都會讀取這個數值,然後同步到系統時鍾中。但是光讀取這個數值,對操作系統而言毫無意義(它不知道,你這個數值具體是哪個時區下的時間,自然就無法同步到系統時鍾)
那麼怎麼知道硬體時鍾記錄的時間是哪個時區的呢(local or utc)?只能是人為指定了(系統啟動的時候,自己指定。我認為系統自己指定也是人為指定的一種吧),我們下面看下例子(一個讀,一個寫),看看怎麼解釋(網上很多解釋我覺的不靠譜)
這里哪裡能看出人為指定的時區是什麼呢?
預設的就是這個文件/etc/adjtime指定的(很多人說centos 6中是/etc/sysconfig/clock這個文件。不解釋了,忘記這個文件吧)
看下/etc/adjtime的內容:
這里是UTC,所以上面的讀寫含義分別是
讀取出來的這個硬體時間是UTC的,直接同步到系統時間(我認為系統時間存的是UTC時間)。如果讀取出來的時間是LOCAL的,是不能直接同步系統時間的。先找到系統的時區文件/etc/localtime,根據當前時區計算出UTC時間,再同步到系統時間(還有一點,這里說一下, hwclock讀取的時候,最後都是以local時間顯示出來的,所以可能還有一層轉換)
把"2015-08-14 16:45:05"這個時間直接寫入硬體時鍾,同時更新/etc/adjtime的內容(方便下一次讀的時候,找到正確的時區)
那怎麼覆蓋/etc/adjtime的內容呢?
在讀寫的時候可以顯示指定,例如hwclock --local,hwclock --utc(如果不顯示指定,則使用/etc/adjtime的值)
『肆』 linux中的時間是哪個時區的
1、more /etc/sysconfig/clock
ZONE="Asia/Shanghai"
2、GMT + 8 = UTC + 8 = CST ,我們的linux系統時間和計算機硬體時間應該是cst時間,上海時區。
3、安裝CentOS/RHEL時候,應當取消」系統時鍾使用UTC時間」這個選項,如果忘了取消,系統時鍾會差8小時
#vi /etc/sysconfig/clock
把UTC=true 修改為 UTC=false,保存後重啟即可。
4、#ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5、系統時鍾
date -R
6、zmp – This utility prints the current time and date in the specified time zone. Example:
# zmp Japan
Japan Tue Feb 28 17:52:18 2017 JST
# zmp Iceland
Iceland Tue Feb 28 08:52:45 2017 GMT
zmp China
China Tue Feb 28 08:53:02 2017 China
7、CST/GMT/UTC/DST縮寫
CST China Standard Time UT+8:00
GMT 格林威治標准時間(Greenwich Mean Time,簡稱G.M.T.)
UTC 世界協調時間UTC比GMT來得更加精準
DST 夏日節約時間:所謂「夏日節約時間」Daylight Saving Time(簡稱D.S.T.),
RTC 硬體時鍾(Real Time Clock,簡稱RTC),相對應的系統時鍾(System Clock)。
『伍』 linux 嵌入式軟硬體時鍾 怎麼同步
置硬體時間,
開機時Linux會從硬體的rtc的時鍾晶元中獲取一次硬體時間,然後以此為基礎來運行系統時間。
settimeofday 相當於date shell命令,緊緊能設置系統時間。
如果想設置硬體時間,需要一個hwclock -w shell原理的函數來寫硬體的rtc。
扒一扒 busybox的 hwclock.c源碼(http://www.codeforge.cn/read/97203/hwclock.c__html)
可以知道這么抄寫功能源碼:
[cpp] view plain
static void write_rtc(time_t t, int utc)
{
int rtc;
struct tm tm;
if (( rtc = open ( "/dev/rtc", O_WRONLY )) < 0 )
{
if (( rtc = open ( "/dev/misc/rtc", O_WRONLY )) < 0 )
bb_perror_msg_and_die ( "Could not access RTC
『陸』 linux 怎麼設置硬體時鍾 UTC
一、首先要弄清幾個概念:
1. 「系統時間」與「硬體時間」
系統時間: 一般說來就是我們執行 date 命令看到的時間,linux系統下所有的時間調用(除了直接訪問硬體時間的命令)都是使用的這個時間。
硬體時間: 主板上BIOS中的時間,由主板電池供電來維持運行,系統開機時要讀取這個時間,並根據它來設定系統時間(注意:系統啟動時根據硬體時間設定系統時間的過程可能存在時區換算,這要視具體的系統及相關設置而定)。
2. 「UTC時間」與「本地時間」
UTC時間:Coordinated Universal 8 e2 i( H7 t0 ^/ ^Time 世界協調時間(又稱世界標准時間、世界統一時間),在一般精度要求下,它與GMT(Greenwich Mean Time,格林威治標准時間)是一樣的,其實也就是說 GMT≈UTC,但 UTC 是以原子鍾校準的,更精確。
本地時間:由於處在不同的時區,本地時間一般與UTC是不同的,換算方法就是
本地時間 = UTC + 時區 或 UTC = 本地時間 - 時區
時區東為正,西為負,例如在中國,本地時間都使用北京時間,在linux上顯示就是 CST(China Standard Time,中國標准時,注意美國的中部標准時Central Standard Time也縮寫為CST,與這里的CST不是一回事!),時區為東八區,也就是 +8 區,所以 CST=UTC+(+8小時) 或 UTC=CST-(+8小時)。
二、設置硬體時鍾 UTC
硬體時間 /sbin/hwclock
直接調用 /sbin/hwclock 顯示的時間就是 BIOS 中的時間嗎?未必!這要看 /etc/sysconfig/clock 中是否啟用了UTC,如果啟用了UTC(UTC=true),顯示的其實是經過時區換算的時間而不是BIOS中真正的時間,如果加上 --localtime 選項,則得到的總是 BIOS 中實際的時間.
[12-01 19:07> ~]# hwclock
2009年12月07日 星期一 14時28分43秒 -0.611463 seconds
[12-01 19:07> ~]# hwclock --utc
2009年12月07日 星期一 14時28分46秒 -0.594189 seconds
[12-01 19:07> ~]# hwclock --localtime
2009年12月07日 星期一 06時28分50秒 -0.063875 seconds
三、最後總結
1)/etc/sysconfig/clock 文件,只對 hwclock 命令有效,且只在系統啟動和關閉的時候才有用(修改了其中的 UTC=true 到 UTC=false 的前後,執行 hwclock (--utc, 或 --localtime) 都沒有變化,要重啟系統後才生效);
2)/etc/rc.d/rc.sysinit 文件,run once at boot time,其中有從硬體時鍾同步時間到系統時間的操作;
3)hwclock --localtime 的輸出,才是硬體時鍾真正的時間。如果輸出結果帶時區(比如CST),還要看/etc/sysconfig/clock里的UTC參數,如果 UTC=false,那時區有意義;如果 UTC=true,那時區沒意義,實際上是UTC時間。
4)在 /etc/sysconfig/clock 中 UTC=false 時,date、hwclock、hwclcok --localtime 輸出的時間應該都一致,且此時 hwclock --utc是沒有意義的;
5)在 /etc/sysconfig/clock 中 UTC=ture 時,date、hwclock 的輸出是一致的,hwclock --localtime 的輸出則是UTC時間;
6)如果不想在輸出中帶時區,則 export LANG=C ,然後再運行 hwclock 就沒有什麼CST了,免得時區誤導你;
7)hwclock --utc 容易理解出錯
8)系統關閉時會同步系統時間到硬體時鍾,系統啟動時會從硬體時鍾讀取時間更新到系統,這2個步驟都要根據 /etc/sysconfig/clock 文件中UTC的參數來設置時區轉換。
『柒』 Linux 時間同步
在Linux系統中存在兩個時鍾時間,分別是
硬體時鍾是指的在主板上的時鍾設備,也就是通常可以在BIOS畫面設置的時鍾,即使關機狀態也可以計算時間。
而系統時鍾則是指Kernel中的時鍾,其值是由1970年1月1日00:00:00 UTC時間至當前時間所經歷的秒數總和。當Linux啟動的時候,系統時鍾會讀取硬體時鍾的設定,之後系統時鍾獨立運作。長時間運行兩者可能將會產生誤差。另外所有的Linux相關指令都是讀取系統時鍾指定的,如date。
我們這里討論的是系統時間。
NTP,網路時間協議,使用 123/udp 埠進行網路時鍾同步;NTP 是仍在使用中的最古老的網路傳輸協議之一(1985 年前開始)。
以前Linux時間同步基本是使用 ntpdate 和 ntpd 這兩個工具實現的,但是這兩個工具已經很古老了。
【注】ntpdate和ntpd是互斥的,兩者不能同時使用。ntpd是步進式平滑的逐漸調整時間,而ntpdate是斷點式更新時間。
RHEL/CentOS 7.x 已經將 chrony 作為默認時間同步工具了。
其他Linux (如 ubuntu) 使用 systemd-timesyncd 服務。
chrony 是 RedHat 開發的,它是網路時間協議(NTP)的另一種實現;
RHEL/CentOS 7.x 的默認時間同步工具;
chrony 可以同時做為 ntp 服務的客戶端和服務端;安裝完後有兩個程序 chronyd、chronyc:
chronyd 是一個 daemon 守護進程,chronyc 是用來監控 chronyd 性能和配置參數的命令行工具。
系統版本:CentOS 7.5
chrony_server(relay):10.0.0.4
chrony_client:10.0.0.5
Edit file /etc/chrony.conf
默認已經啟動,不需要調整
example:
配置 chrony
edit file: /etc/chrony.conf
再次用chronyc 命令檢查,比較它與chronyd server的差異
systemd-timesyncd 是一個用於跨網路同步系統時鍾的守護服務。它實現了一個 SNTP 客戶端,但更輕量級,更集成systemd。
systemd-timesyncd 啟動時會讀取 /etc/systemd/timesyncd.conf 配置文件,內容如下:
你可以輸入你希望使用的其它時間伺服器,比如你自己的本地 NTP 伺服器,在 NTP= 行上輸入一個以空格分隔的伺服器列表。
如果伺服器可以直接連接internet,不用修改默認配置;如果在內網,需要單獨指定。
在最新的 Ubuntu 版本中,timedatectl 替代了老舊的 ntpdate。默認情況下,timedatectl 在系統啟動的時候會立刻同步時間,並在稍後網路連接激活後通過 socket 再次檢查一次。
timesyncd 替代了 ntpd 的客戶端的部分。默認情況下 timesyncd 會定期檢測並同步時間。它還會在本地存儲更新的時間,以便在系統重啟時做時間單步調整。
通過 timedatectl 和 timesyncd 設置的當前時間狀態和時間配置,可以使用 timedatectl status 命令來進行確認。
由於 timedatectl 的存在,各發行版已經棄用了 ntpdate,默認不再進行安裝。
timedatectl
timedatectl status ,查看時間同步狀態;
timedatectl set-ntp true ,開啟網路時間同步;
timedatectl set-timezone ZONE ,設置時區。
NTP synchronized: yes 表示時間是同步狀態。
查看服務狀態以及從哪個ntp server同步時間。
NTP:軟體層面實現,成本低。同步精度10ms左右。
PTP:需要網路介面具備在物理層提供時間戳的功能,同步精度優於100ns,區域網的節點需要使用支持PTP功能的交換機。區域網網路接點不支持PTP的話,只能同不到us,而且受網路背景流量影響。
『捌』 linux設置系統時區命令
修改系統時間。
linux系統時鍾有兩個,一個是硬體時鍾,即BIOS時間,就是我們進行CMOS設置時看到的時間,另一個是系統時鍾,是linux系統Kernel時間。當Linux啟動時,系統Kernel會去讀取硬體時鍾的設置,然後系統時鍾就會獨立於硬體運作。有時我們會發現系統時鍾和硬體時鍾不一致,因此需要執行時間同步,下面就分享一下時間設置及時鍾同步的命令使用方法。
date命令將日期設置為2014年6月18日
---- date -s 06/18/14
將時間設置為14點20分50秒
---- date -s 14:20:50
將時間設置為2014年6月18日14點16分30秒(MMDDhhmmYYYY.ss)
----date 0618141614.30
『玖』 有沒有辦法可以獲取linux開發板的硬體定時器頻率
有的。
具體步驟:
1、默認情況下系統節拍率選擇100Hz。
2、設置好後在Linux內核源碼根目錄下的config文件中可見系統節拍率被設置為100Hz。
3、Linux內核會使用CONFIGHZ來設置自己的系統時鍾,文件includeasmgenericparamh。
Linux內核使用全局變數jiffies來記錄系統從啟動以來的系統節拍數,系統啟動的時候會將jiffies。