如何在 Linux 系統(tǒng)中配置雙向?qū)r(shí)服務(wù)(同時(shí)支持 GPS 和 NTP)
在許多工業(yè)、通信和科研應(yīng)用場景中,時(shí)間同步至關(guān)重要。為了確保設(shè)備的時(shí)鐘準(zhǔn)確,通常會使用網(wǎng)絡(luò)時(shí)間協(xié)議(NTP)來同步設(shè)備時(shí)間。然而,如果系統(tǒng)不僅需要通過 GPS 接收時(shí)間,還需要對其他設(shè)備提供 NTP 服務(wù),Linux 系統(tǒng)可以通過適當(dāng)?shù)呐渲脕韺?shí)現(xiàn)這一需求。
本文將詳細(xì)介紹如何在 Linux 系統(tǒng)中配置從 GPS 接收時(shí)間并提供 NTP 對時(shí)服務(wù)給其他設(shè)備的完整操作步驟。整個(gè)過程包括安裝和配置 GPS 時(shí)間源,以及配置 NTP 服務(wù)來同步和廣播時(shí)間。
一、準(zhǔn)備工作
1. 硬件需求
GPS 接收器:具有 NMEA 輸出接口,并能通過串口或 USB 連接到 Linux 系統(tǒng)。
Linux 服務(wù)器:安裝了標(biāo)準(zhǔn)的 Linux 發(fā)行版,如 Ubuntu 或 CentOS。
NTP 服務(wù):Linux 系統(tǒng)需要安裝并配置 NTP 服務(wù),以便對其他設(shè)備提供時(shí)間同步。
2. 軟件需求
gpsd:用于解析 GPS 接收器的數(shù)據(jù)。
ntpd:用于管理 NTP 協(xié)議時(shí)間同步。
二、安裝并配置 GPS 設(shè)備
1. 安裝 gpsd
`gpsd` 是 Linux 系統(tǒng)下的一個(gè)守護(hù)進(jìn)程,用于解析 GPS 接收器輸出的 NMEA 數(shù)據(jù),并提供 GPS 時(shí)間信息給其他程序使用。
在大多數(shù) Linux 發(fā)行版中,你可以通過包管理器安裝 `gpsd`:
sudo apt update
sudo apt install gpsd gpsd-clients
對于 CentOS 系統(tǒng),使用以下命令:
sudo yum install gpsd gpsd-clients
2. 連接并檢測 GPS 設(shè)備
將 GPS 接收器通過串口或 USB 連接到系統(tǒng)后,可以使用 `dmesg` 命令確認(rèn)設(shè)備是否正確識別:
dmesg | grep tty
輸出類似以下內(nèi)容:
[ 1234.567890] usb 1-1: pl2303 converter now attached to ttyUSB0
這表明 GPS 接收器已經(jīng)連接到 `ttyUSB0` 端口。
3. 配置 gpsd
編輯 `/etc/default/gpsd` 文件以指定 GPS 設(shè)備:
sudo nano /etc/default/gpsd
修改以下內(nèi)容:
DEVICES="/dev/ttyUSB0"
GPSD_OPTIONS="-n"
其中 `ttyUSB0` 是你的 GPS 設(shè)備的端口,`-n` 選項(xiàng)表示即使沒有客戶端連接,gpsd 也應(yīng)讀取 GPS 數(shù)據(jù)。
啟動并啟用 gpsd:
sudo systemctl enable gpsd
sudo systemctl start gpsd
4. 驗(yàn)證 GPS 數(shù)據(jù)
可以使用 `cgps` 工具來驗(yàn)證 GPS 是否正確工作:
cgps -s
你應(yīng)該能夠看到 GPS 接收到的衛(wèi)星數(shù)據(jù)和時(shí)間信息。如果數(shù)據(jù)未顯示,檢查 GPS 設(shè)備連接情況以及 gpsd 服務(wù)狀態(tài):
sudo systemctl status gpsd
三、配置 NTP 服務(wù)
1. 安裝 NTP 服務(wù)
在大多數(shù) Linux 系統(tǒng)中,NTP 服務(wù)可以通過以下命令安裝:
sudo apt install ntp
在 CentOS 上:
sudo yum install ntp
2. 配置 NTP 使用 GPS 作為時(shí)間源
在 `/etc/ntp.conf` 文件中,將 GPS 配置為 NTP 的時(shí)間源。首先,注釋掉所有不必要的時(shí)間源配置,如:
#server 0.ubuntu.pool.ntp.org
#server 1.ubuntu.pool.ntp.org
接著,添加以下內(nèi)容來使用 GPS 作為 NTP 時(shí)間源:
# GPS 時(shí)間源 (通過 gpsd)
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 time1 0.0 refid GPS
# GPS PPS 時(shí)間源 (精確時(shí)間脈沖)
server 127.127.28.1 minpoll 4 maxpoll 4
fudge 127.127.28.1 refid PPS
在上面的配置中,`127.127.28.0` 是 gpsd 提供的 NMEA 數(shù)據(jù)源,`127.127.28.1` 是 GPS 的 PPS(脈沖信號)接口,用于更加精確的時(shí)間同步。
3. 啟動并啟用 NTP 服務(wù)
保存配置文件后,啟動并啟用 NTP 服務(wù):
sudo systemctl enable ntp
sudo systemctl restart ntp
4. 驗(yàn)證 NTP 狀態(tài)
可以使用 `ntpq -p` 命令來查看 NTP 同步狀態(tài):
ntpq -p
輸出內(nèi)容應(yīng)包含類似以下的條目,顯示 GPS 作為時(shí)間源:
remote refid st t when poll reach delay offset jitter
==============================================================================
*GPS_NMEA(0) .GPS. 0 l 5 64 377 0.000 0.000 0.001
如果 GPS 正常工作,并提供時(shí)間同步服務(wù),你會看到 `*` 表示 NTP 使用 GPS 作為首選時(shí)間源。
四、提供 NTP 對時(shí)服務(wù)給其他設(shè)備
一旦 NTP 服務(wù)成功通過 GPS 獲取時(shí)間,你可以將這臺 Linux 服務(wù)器作為 NTP 服務(wù)器,供局域網(wǎng)內(nèi)的其他設(shè)備同步時(shí)間。
1. 允許外部設(shè)備訪問 NTP 服務(wù)
在 `/etc/ntp.conf` 中,添加允許其他設(shè)備訪問的配置。例如:
restrict default kod nomodify notrap nopeer noquery
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
以上配置允許 192.168.1.0/24 網(wǎng)絡(luò)段內(nèi)的設(shè)備訪問這臺 NTP 服務(wù)器。
2. 檢查防火墻設(shè)置
確保防火墻允許 NTP 端口 123 的 UDP 流量通過:
sudo ufw allow 123/udp
對于 CentOS,使用 `firewalld`:
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload
3. 驗(yàn)證其他設(shè)備的時(shí)間同步
在局域網(wǎng)中的另一臺設(shè)備上,運(yùn)行以下命令來同步時(shí)間:
sudo ntpdate 192.168.1.100
其中 `192.168.1.100` 是配置了 NTP 服務(wù)的 Linux 服務(wù)器的 IP 地址。
通過本文的步驟,我們就可以在 Linux 系統(tǒng)中配置從 GPS 接收時(shí)間,同時(shí)通過 NTP 服務(wù)將時(shí)間提供給其他設(shè)備。這一配置在工業(yè)、科研和通信等場景中具有廣泛應(yīng)用,能夠確保整個(gè)網(wǎng)絡(luò)的時(shí)間同步性和精確性。