Hi all,

This is the story of the hoops I had to jump through to get my USB GPS to work with Ubuntu 11.04 and NPTD without using GPSD. When I first set up the system, I couldn't get the GPS to work any way I tried. It turns out that the AppArmor system was preventing it from working. Another person on the list suggested checking the log files. I eventually figured it out, and I'm posting the procedure here. However, when I reboot, I lose some of these configuration steps, which I need help with figuring out how to make permanent. Hopefully, by sharing this information, it will help others in a similar situation. I used lots of internet sources for this data, and don't remember all the websites I went to.

AppArmor must be tweaked every time you want to add an NTPD external reference clock, otherwise, AppArmor won't allow NTPD to access the GPS. This assumes you already have NTP set up and running with internet servers.

Edit the AppArmor tunable file for ntpd with:

     gksu gedit /etc/apparmor.d/tunables/ntpd

Add lines to allow ntpd to access the port you want - in this case /dev/gps5. I'm using 127.127.20.5 as my GPS address in ntp.conf. In Windows, NTPD expects to find the GPS on COM5. The last digit of the address controls the COM number. On Linux, NTPD expects to see the GPS on /dev/gps5. The last digit of the address controls the number at the end of this string. This following modification to the AppArmor file will allow NTPD to access /dev/gps5, or 1, or whatever you have uncommented.

Here is the contents of my AppArmor file.

-------------------------

# Added by Ron - 2012-02-11
# Path to this file is: /etc/apparmor.d/tunables/ntpd
# Added /dev/gps1 and /dev/gps5
# /dev/null was the original line.  /dev/ttyS1 was there but commented out.
# Apparently only one device can be active.  Commented others out.

#Add your ntpd devices here eg. if you have a DCF clock
# @{NTPD_DEVICE}="/dev/ttyS1"
#@{NTPD_DEVICE}="/dev/null"

#@{NTPD_DEVICE}="/dev/gps1"
@{NTPD_DEVICE}="/dev/gps5"

-----------------------

Now, reinitialize AppArmor with:

     (You may have to cd to this directory.  I don't remember for sure.)
     sudo invoke-rc.d apparmor reload

Stop ntpd with:

     sudo /etc/init.d/ntp stop

Plug in the USB GPS. Wait a few seconds for it to initialize if it's been on recently, or up to 12 minutes (I think) for a full cold start and satellite data download. My GPS flashes a LED light about once / second when it has a position fix.

Set the parameters for the USB port with:

     (Customize your baud rate and USB port number.)
     stty -F /dev/ttyUSB0 57600 igncr clocal -echo -ixon

Now, the output of the GPS should be appearing on /dev/ttyUSB0. This must be sent to /dev/gps5 to satisfy NTPD.

Set up a symlink linking this port with /dev/gps5 with:

     sudo ln -T /dev/ttyUSB0 /dev/gps5

Check that the gps is outputting data on /dev/gps5 with:

     cat /dev/gps5

This should output something like (output will vary with different gps's). There should be no blank lines. I have my GPS set to output only the GPZDA sentences.

----------------------

ron@asus-k52f-1:/etc$ cat /dev/gps5
$GPZDA,184622.000,11,02,2012,,*5E
$GPZDA,184623.000,11,02,2012,,*5F
$GPZDA,184624.000,11,02,2012,,*58
$GPZDA,184625.000,11,02,2012,,*59
$GPZDA,184626.000,11,02,2012,,*5A
$GPZDA,184627.000,11,02,2012,,*5B

ctrl-c to stop

----------------------

Edit /etc/ntp.conf with:

     gksu gedit /etc/ntp.conf

Set up the gps lines:

---------------------

# Uncomment this if GPS is available, Tweak com no.  Unprefer NIST.
# GPS on COM5 - xxx.xxx.xxx.5 - Mode 16 = 9600 baud  Mode 64 = 57600
# Add 1 to mode to use GPRMC sentence - same as default
# Add 2 to mode to use GPGGA sentence - may have better timing
# Add 8 to mode to use GPZDA or GPZDG sentence - recommended by Trimble
# Mode 66 = 57600 baud and use GPGGA sentence
# Mode 72 = 57600 baud and use GPZDA or GPZDG sentence
# Fudge - Tweak the GPS input for less offset from nist

# GlobalSat BU-353 USB GPS - 57600 baud /dev/ttyUSB0 link to /dev/gps1 or /dev/gps5

# Linux settings
# Fudge factor using time2 for Linux   = 0.300

server 127.127.20.5                prefer minpoll 3 maxpoll 3 mode 72
fudge  127.127.20.5 time2 0.3000 refid GPS1

---------------------

Initialize the clock with:

     sudo ntpdate nist1-ny.ustiming.org

Restart the ntpd service with:

     sudo /etc/init.d/ntp start

Check the status of ntp with:

     ntpq -p

At this point, NTPD should be reading the GPS. You may have to wait several minutes for it to stabilize. Initial reports may be bogus.

---------------------

ron@asus-k52f-1:/etc$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*GPS_NMEA(5) .GPS1. 0 l 6 8 377 0.000 0.002 0.002 nist1-ny.ustimi .ACTS. 1 u 66 64 1 56.459 -1.558 0.000 216.119.63.113 .ACTS. 1 u 65 64 1 59.852 16.922 0.000 india.colorado. .ACTS. 1 u 64 64 1 65.036 -2.705 0.000 ping-audit-207- .ACTS. 1 u 3 64 3 85.151 -34.626 0.619

----------------------

If you wish, you can set ntpd startup options by amending the file /etc/default/ntp with:

gksu gedit /etc/default/ntp

Mine has:

     NTPD_OPTS='-g'

------------------------------------------------------------

Once all this is done, you should have NTPD reading the USB GPS without using GPSD. Writing this procedure was a bit difficult, but hopefully enough detail is there to be useful. Now, I need the help of the people on the list. I need to know how to make these things persistent, as right now, I lose them when I reboot. The changes to the config files should be persistent anyway, except possibly during an Ubuntu version upgrade. However, I think I need to somehow do the STTY command and set up the symlink on every reboot. This has to be done after the USB port with the GPS is initialized and thus /dev/ttyUSB0 will be active. If anybody can tell me how to do that automatically on bootup, that would be greatly appreciated. Also, I'd like to know how to have multiple USB serial devices plugged in, since, as I understand it, there's no guarantee that the same USB device will always be assigned to /dev/ttyUSB0.

Sincerely,

Ron


--

(PS - If you email me and don't get a quick response, don't be concerned.
I get about 300 emails per day from alternate energy mailing lists and
such.  I don't always see new messages very quickly.  If you need a
reply and have not heard from me in 1 - 2 weeks, send your message again.)

Ron Frazier
timekeepingdude AT c3energy.com

_______________________________________________
questions mailing list
[email protected]
http://lists.ntp.org/listinfo/questions

Reply via email to