Files
minimal-setups/content/snippets/0240-timeserver.md
Wolfgang Hottgenroth b2249c06e9
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
mdwiki test starts
2025-04-14 22:22:45 +02:00

3.9 KiB

This server utilizes ntpsec on Debian on a BeagleBone Black with a UBlox GPS module.

It has been joined the NTP pool, the statistics are available at https://www.ntppool.org/scores/93.241.86.156.

Some additional statistics graphs for the server are available at https://numbers.hottis.de/ntpserver.

Preparation of the BeagleBone

The GPS module is connected via serial line to the UART of the BB.

The additional connection of the PPS output with the PPS device of the Linux running on the BB via a GPIO must be prepared. A device tree overlay must be created and compiled:

/dts-v1/;
/plugin/;

/{
    compatible = "ti,beaglebone", "ti,beaglebone-black";
    part_number = "WN-PPS";
    version = "00A0";

    exclusive-use =
        "P8.7",
        "gpio2_2";

    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            bs_pinmode_P8_7_0x27: pinmux_bs_pinmode_P8_7_0x27 {
                pinctrl-single,pins = <0x090 0x27>;
            };
        };
    };

    fragment@1 {
        target = <&ocp>;
        __overlay__ {
            bs_pinmode_P8_7_0x27_pinmux {
                compatible = "pps-gpio";
                status = "okay";
                pinctrl-names = "default";
                pinctrl-0 = <&bs_pinmode_P8_7_0x27>;
                gpios = <&gpio2 2 0>;
                assert-rising-edge;
            };
        };
    };
};

This file shall be compiled using

dtc -O dtb -o WN-PPS-00A0.dtbo -b 0 -@ WN-PPS-00A0.dts

The binary dtbo file then copied into /lib/firmware and mentioned in the /boot/uEnv.txt:

uboot_overlay_addr0=/lib/firmware/WN-PPS-00A0.dtbo

After a reboot the device file /dev/pps0 should be available and using ppstest /dev/pps0 you can test the connection:

root@david:/boot# ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1739442756.999984966, sequence: 306598 - clear  0.000000000, sequence: 0
source 0 - assert 1739442757.999978472, sequence: 306599 - clear  0.000000000, sequence: 0
source 0 - assert 1739442758.999976057, sequence: 306600 - clear  0.000000000, sequence: 0
^C
root@david:/boot# 

Configuration of the ntpsec daemon

interface listen all
logconfig +all
logfile /var/log/ntp.log

statsdir /var/log/ntpsec/
statistics loopstats peerstats clockstats protostats sysstats rawstats
filegen loopstats file loopstats type day disable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
filegen protostats file protostats type day enable
filegen sysstats file sysstats type day enable
filegen rawstats file rawstats type day disable

driftfile /var/lib/ntpsec/ntp.drift
leapfile /usr/share/zoneinfo/leap-seconds.list

tos maxclock 11
tos minclock 4 minsane 3

refclock nmea unit 0 prefer mode 0x10 minpoll 4 maxpoll 4 path /dev/ttyO4 ppspath /dev/pps0 baud 9600 flag1 1 refid BBgp
# refclock shm unit 0 refid BBg minpoll 4 maxpoll 4 time1 0.1555
# refclock shm unit 2 refid BBp minpoll 4 maxpoll 4 prefer
# refclock pps unit 0 prefer refid BBp ppspath /dev/pps0 minpoll 4 maxpoll 4
# refclock gpsd unit 0 prefer refid BBgp mode 1 minpoll 4 maxpoll 4

server ntps1-1.uni-erlangen.de
server ntps1-0.cs.tu-berlin.de
server ptbtime1.ptb.de
server rustime01.rus.uni-stuttgart.de
server ntp1.sda.t-online.de
server ntps1.gwdg.de

restrict default kod nomodify nopeer noquery limited notrap
restrict 127.0.0.1
restrict ::1

Although the nmea reference clock driver is obsolete according to https://ntpsec.org/removal-plan.html, it works perfectly for me, in particular better then the other drivers. However, maybe I was not trying hard enough with the others.