Pegasus High Altitude Balloon Project

Pegasus I, Pegasus II, Pegasus III, Pegasus IV, CF GPS Howto, #highaltitude Logs, Links, Ideas

CF GPS Howto

As promised here is how I solved the namespace clash between the pxa serial ports on the gumstix and a CF GPS (which acts as a serial port)

WARNING - do not attempt unless you are using USBNET, ETHERNET or BLUETOOTH to login cause by changing the pxa serial driver you could possible break the serial console (though it is fixable)

Background

The serial ports on a gumstix aren't normal serial ports that you get on a PC. Instead they are particular to the PXA processor that drives the board. Therefore in the linux kernel they have their own driver (pxa.c) and when compiled into the kernel (can't be a module it seems) sets up the serial ports as ttySX. Normally these ports can be treated like any normal serial port. Compact Flash GPS are serial gps units with a Serial->CF converter that when inserted emulates a serial port as if was directly attached. This requires serial_cs.ko module and with it the standard serial driver (the one for normal PCs) 8250.ko which also sets up serial ports to ttySX. This requirement results in the pxa and 8250 drivers clashing for ttySX in the namespace and therefore causing the system to hang when the driver is inserted.

Solution

I recommend that instead of just replacing the whole image which is created by the buildroot its worth just swapping your kernel as it maintains your working setup.

Therefore through lots of research especially on the ARM mailing list it became apparent that in the vanilla kernel there was no solution due to the lack of elegance. Therefore I had to settle for a dirty hack.

There were two options:

I chose the first option partially as its easier and also it was the most recommended route from the kernel developers. It was a simple hack of adjusting pxa to use ttySAX instead of ttySX - I seem to remember that all this required was a change in pxa.c in the source code to use the new device file.

Also the major and minor numbers need to be changed - both in the pxa.c file (search for major and minor and remember to check the necessary header files). Finally the device file had to be made - ttySAX exist with a major of 204 and minors of 5,6 and 7. Therefore:

mknod /dev/ttySA0 c 204 5

Now your serial ports will work as ttySA0 and when inserted your CF GPS will appear magically under ttyS0. A few more adjustments are required to fix the serial console such as changing the gettys in /etc/inittab.

Hope that helps - anymore help just get in touch jacoxon@googlemail.com

References