Please note that this kernel is woefully out of date. Don't use it.
Your Raspberry Pi B+ and RPi2 will shed tears (not work), and you'll just want to break things (and me).
I'll get a proper kernel going sooner or later, but consider this archived.
Kernel image and modules with PPS-GPIO added (this tracks Adafruit's current Occidentalis kernel version and will probably be rebuilt when they next update). This will allow you to use PPS with NTP on a Raspberry Pi.
This repository is used as a part of this article, so check that out for help.
For source modifications, please see this page, branch: ppsgpio for the source this is based on.
To install this kernel, copy kernel.img to boot:
$ sudo su # mv /boot/kernel.img /boot/kernel.img.orig # mv kernel.img /boot/
Copy the modules:
# mv modules/* /lib/modules
pps-gpio module to
# echo "pps-gpio" >> /etc/modules
Once your system is back up, check to see that the kernel version has changed and that pps-gpio loaded:
$ uname -a Linux raspberrypi 3.1.9adafruit-pps+ #21 PREEMPT Sun Sep 2 10:57:58 PDT 2012 armv6l GNU/Linux $ dmesg | grep pps [ .. snip .. ] [ 10.339448] pps pps0: new PPS source pps-gpio.-1 [ 10.341591] pps pps0: Registered IRQ 108 as PPS source
PPS input will be available on pin 23 of the Raspberry Pi header.
Note: Ensure that your GPS unit's PPS output is 3.3v friendly!
If you're looking for a unit which fulfills this requirement, Adafruit's Ultimate GPS (all versions) has a 1PPS output which is around ~2.8V, and is compatible with the Raspberry Pi.
Once connected, install
pps-tools to test:
$ sudo aptitude install pps-tools [ .. snip .. ] Unpacking pps-tools (from .../pps-tools_0.20120406+g0deb9c7e-2_armhf.deb) ... Processing triggers for man-db ... Setting up pps-tools (0.20120406+g0deb9c7e-2) ..
Assuming that the pps line is on /dev/pps0:
$ sudo 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 [....], sequence: [....] - clear [....], sequence: [....]
If your output looks something like the above (brackets are numbers removed for clarity), you're all set. If not, verify that everything is connected and that the pps-gpio kernel module is loaded (along with the -pps kernel itself).
It may be helpful to scope the PPS line to see if the GPS module is actually sending a signal. On some units, the 1PPS output only becomes active after a fix.
All of these modifications were cobbled together by reading this thread and following its instructions.
See this repository, (branch: ppsgpio) for source code.