# Just another Stratum 1 Timeserver

Tue, Feb 11, 2025

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.