# Automatic Setting of GPS for clock
#
# Script Ver 1.0
# www.drbig.co.uk
#
# This is for Raspberry PI
#

#Update Raspberry PI First

sudo aptitude update -y
sudo aptitude dist-upgrade -y

#Check Time Zone set correctly

sudo dpkg-reconfigure tzdata

#Lets take backup copy first

sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt

#and now remove the unwanted txt from the file we just backed up

sudo sed -i “s/console=ttyAMA0,115200//g” /boot/cmdline.txt| sed ‘s/OverallStatus//’ | sed ‘s/IfName//’
sudo sed -i “s/kgdboc=ttyAMA0,115200//g” /boot/cmdline.txt| sed ‘s/OverallStatus//’ | sed ‘s/IfName//’

#Next we are going to comment out #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 from /etc/inittab

sudo sed -i “/T0:23:respawn/ s/^/#/” /etc/inittab

#Switching The KernelDoing this isn’t particularly hard. However, keep in mind that it will overwrite any special modifications you’ve already done to the kernel, and will break on upgrades to the kernel
#In order to keep things simple, I have a repository with pre-made kernel modules and kernel image. If you’d like to view the source this is based on, click here. [2]
#To grab the pre-compiled kernel and modules:

cd ~
sudo apt-get install git
git clone https://github.com/davidk/adafruit-raspberrypi-linux-pps.git

#Back up and copy the kernel image

cd adafruit-raspberrypi-linux-pps
sudo mv /boot/kernel.img /boot/kernel.img.orig
sudo cp kernel.img /boot

#Move the modules over

sudo mv modules/* /lib/modules

#Finally, add the pps-gpio module to /etc/modules.We run this command in a sub-shell so appending works

sudo sh -c “echo ‘pps-gpio’ >> /etc/modules”

#Now Reboot the PI

sudo reboot

#Automatically Making Links In /etc/udev

sudo touch /etc/udev/rules.d/80-gps-to-ntp.rules
sudo chmod 777 /etc/udev/rules.d/80-gps-to-ntp.rules
sudo echo ‘# Change MODE of ttyAMA0 so it is readable by NTP and provide a symlink to’ >> /etc/udev/rules.d/80-gps-to-ntp.rules
sudo echo ‘# /dev/gps0’ >> /etc/udev/rules.d/80-gps-to-ntp.rules
sudo echo ‘KERNEL==”ttyAMA0″, SUBSYSTEM==”tty”, DRIVER==””, SYMLINK+=”gps0″, MODE=”0666″‘ >> /etc/udev/rules.d/80-gps-to-ntp.rules
sudo echo ‘# Symlink /dev/pps0 to /dev/gpspps0’ >> /etc/udev/rules.d/80-gps-to-ntp.rules
sudo echo ‘KERNEL==”pps0″, SUBSYSTEM==”pps”, DRIVER==””, SYMLINK+=”gpspps0″, MODE=”0666″‘ >> /etc/udev/rules.d/80-gps-to-ntp.rules
sudo chmod 644 /etc/udev/rules.d/80-gps-to-ntp.rules

#Installing and Configuring NTPTo install NTP, we abuse the default install a bit since the repository version doesn’t really pick up on 1PPS. It will also take some time to do all of this since we’re compiling from scratch.
# Latest Version at time of writing this install script was 4.2.7p431 March 5th 2014

cd ~
sudo /etc/init.d/ntp stop
sudo apt-get -y update
sudo apt-get -y install libcap-dev
sudo apt-get -y install pps-tools
mkdir ntp
cd ntp
wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-dev/ntp-dev-4.2.7p319.tar.gz
tar -xvf ntp-dev-4.2.7p319.tar.gz
cd ntp-dev-4.2.7p319
./configure –prefix=/usr –enable-all-clocks –enable-parse-clocks \
–enable-SHM –enable-debugging –sysconfdir=/var/lib/ntp –with-sntp=no \
–with-lineeditlibs=edit –without-ntpsnmpd –disable-local-libopts \
–disable-dependency-tracking && make
sudo make install

#We weill now edit /etc/init.d/ntp and change the DAEMON line to reflec the changes

sudo cp /etc/ntp.conf /etc/ntp-original.conf
sudo sed -i “s@DAEMON=/usr/sbin/ntpd@DAEMON=/usr/bin/ntpd@g” /etc/init.d/ntp

#Once you have been dropped back to the terminal, edit /etc/ntp.conf and add the following (be sure to change the broadcast line if it differs for you)

sudo sed -i “s@restrict -4 default kod notrap nomodify nopeer noquery@#restrict -4 default kod notrap nomodify nopeer noquery@g” /etc/ntp.conf
sudo sed -i ‘/server 3.debian.pool.ntp.org iburst/a pool uk.pool.ntp.org iburst’ /etc/ntp.conf
sudo sed -i “s@server 0.debian.pool.ntp.org iburst@# http://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html explains these settings@g” /etc/ntp.conf
sudo sed -i “s@server 1.debian.pool.ntp.org iburst@#@g” /etc/ntp.conf
sudo sed -i “s@server 2.debian.pool.ntp.org iburst@server 127.127.28.0 mode 17 minpoll 3 maxpoll 4 iburst true prefer@g” /etc/ntp.conf
sudo sed -i “s@server 3.debian.pool.ntp.org iburst@fudge 127.1270.28.0 time1 0.000 refid SHM stratum 15@g” /etc/ntp.conf

#The next steps are to install the gpsd software, and start the gpsd service pointing to the device name just discovered:

sudo apt-get -y install gpsd gpsd-clients python-gps

sudo gpsd /dev/ttyAMA0 -n -F /var/run/gpsd.sock

#At this point, you should be able to see a text-mode output from your GPS receiver by running the command “cgps -s”, something like the following.

cgps -s

#Optional step to check for version and basic function to see if it is working

sudo /etc/init.d/ntp start

ntpq -crv -pn

#We are done so Reboot

sudo reboot

# Cleanup

#Remove NTP Compile directory

rm -r ntp