The TimeNIC PCIe card is designed to bring precision timing and advanced network functionality to any platform with a PCIe slot. A small form factor PCIe NIC, the TimeNIC integrates a high-performance I226 Ethernet NIC with precise timing inputs and outputs via SMA connectors. Itβs a powerful tool for building small form-factor PTP (Precision Time Protocol) clients or even grandmasters, ideal for time-sensitive networking applications.
Order from Tindie: https://www.tindie.com/products/timeappliances/timenic-i226-pcie-nic-with-pps-inout-and-tcxo/
This guide shows how to install a patched version of the igc driver (used by Intel I225/I226 NICs) to support PPS input. It uses DKMS for rebuilds and ensures the custom driver loads at boot on Ubuntu 24.04.
Install dependencies:
sudo apt install openssh-server net-tools gcc vim dkms linuxptp linux-headers-$(uname -r)
cd ~ ; mkdir testptp; cd testptp
wget https://raw.githubusercontent.com/torvalds/linux/refs/heads/master/tools/testing/selftests/ptp/testptp.c
wget https://raw.githubusercontent.com/torvalds/linux/refs/heads/master/include/uapi/linux/ptp_clock.h
sudo cp ptp_clock.h /usr/include/linux/ptp_clock.h
gcc -Wall -lrt testptp.c -o testptp
sudo cp testptp /usr/bin/- Copy the zip to your machine and unzip it:
wget https://github.com/Time-Appliances-Project/TimeNIC/raw/refs/heads/main/intel-igc-ppsfix_ubuntu.zip
unzip intel-igc-ppsfix_ubuntu.zip
cd intel-igc-ppsfix- Build and install the patched
igcmodule using DKMS:
Replace
5.4.0-7642.46with the correct version if different.
sudo dkms remove igc -v 5.4.0-7642.46
sudo dkms add .
sudo dkms build --force igc -v 5.4.0-7642.46
sudo dkms install --force igc -v 5.4.0-7642.46- Backup the current in-kernel
igcmodule:
sudo cp /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/igc/igc.ko.zst \
/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/igc/igc.ko.zst.bak- Override it with the DKMS-built module:
sudo cp /lib/modules/$(uname -r)/updates/dkms/igc.ko.zst \
/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/igc/igc.ko.zstsudo depmod -a
sudo update-initramfs -usudo rebootAfter reboot, confirm the driver in use is your custom one:
modinfo igc | grep filename
ethtool -i <your-interface> # e.g., enp1s0Can test with testptp , use loopback cable between the two SMAs
sudo testptp -d /dev/ptp0 -L0,2
sudo testptp -d /dev/ptp0 -p 1000000000
sudo testptp -d /dev/ptp0 -L1,1
sudo testptp -d /dev/ptp0 -e 5- This method overrides the kernelβs default igc module at boot.
- To persist across kernel updates, repeat steps 2β4 and run
update-initramfs -uafter each kernel change.
This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0).
You are free to:
Share β copy and redistribute the material in any medium or format Adapt β remix, transform, and build upon the material Under the following terms:
Attribution β You must give appropriate credit, provide a link to the license, and indicate if changes were made. NonCommercial β You may not use the material for commercial purposes. For full details, see: https://creativecommons.org/licenses/by-nc/4.0/
As the project creator, I reserve the right to use this material commercially or under any other terms.
