This is an old revision of the document!
Enable PPS support in Raspian
DUNE has a task called Supervisors.ClockPPS that is used to dicipline the clock from both IMC::GpsFix messages and a PPS source. To get this to work, the kernel has to be compiled with two options not currently enabled by default:
- CONFIG_PPS (“PPS support” in “make menuconfig”)
- CONFIG_NTP_PPS (“PPS kernel consumer support” in “make menuconfig”)
Step 1: Download kernel
mkdir ppskernel cd ppskernel git clone https://github.com/raspberrypi/linux.git cd linux make mrproper zcat /proc/config.gz > .config make oldconfig
Then comes the hard part, setting the options. Normally this is straight forward, but due to some options only showing when others are disabled, it may be a little tricky.
make menuconfig
Go to General setup ---> Timers subsystem ---> and disable Old Idle dynticks config, then enter Timer tick handling and change it to Periodic timer ticks (constant rate, no dynticks)
Turn on PPS support:
PPS kernel consumer support is the option that should have become visible after changing the timer settings. If not, save and reload make menuconfig.
Device Drivers ---> PPS support --->
<M> PPS support
[ ] PPS debugging messages
[*] PPS kernel consumer support
*** PPS clients support ***
< > Kernel timer client (Testing client, use for debug)
<M> PPS line discipline
<M> PPS client using GPIO
*** PPS generators support ***
Save and exit. To verify, check the .config file that has been created in the same folder (nano .config). These options should be present somewhere in the file:
CONFIG_PPS=y CONFIG_NTP_PPS=y # # Timers subsystem # CONFIG_TICK_ONESHOT=y CONFIG_HZ_PERIODIC=y # CONFIG_NO_HZ_IDLE is not set # CONFIG_NO_HZ_FULL is not set # CONFIG_NO_HZ is not set CONFIG_HIGH_RES_TIMERS=y # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set