Holux GM-270 for the Sharp Zaurus
Disclaimer
The instructions given in this document are derived from experiments.
There is no guarantee that they will work for anybody else than the
author of this document.
Introduction
The GM-270 from HOLUX Technology, Inc. is a GPS receiver for the Compact
Flash port. It contains a SiRF II/Lp chipset which draws a relatively
low current (< 80 mA). This sounds nice for a Zaurus PDA which has
a somehow not-so-strong internal battery.
In theory, the SiRF II chipset is a good promise to get the receiver
working together with any Linux-operated hardware.
Further information can be found at
Motivation
Unfortunately, the GM-270 does not work out-of-the-box on a Zaurus
with the original Sharp ROM. My Zaurus SL-5500G runs 2.38G which is
the latest available German version at this time. If you have information
about other ROMs, please let me know.
Everything looks fine at the first glance when the GM-270 is plugged
into the rear CF slot. The CF card icon appears in the status bar at
the bottom and the red LED at the receiver is lit. But when you try
to read some data from /dev/ttyS3
which is the default terminal for CF emulated serial devices, you'll
see nothing but silence. Neither gpsd nor a terminal program receives
any life-sign from the GPS device.
Digging deeper reveals that the serial PCMCIA driver is in trouble and
complains about "Bad Vcc" in the system log:
serial_cs: RequestConfiguration:
Bad Vcc
You need to activate the syslog daemon manually to see such messages
(/var/log/*) in case this
service is not started automatically.
- Make sure that /etc/syslog.conf
contains the line
*.* /var/log/messages - Start the syslog daemon:
/etc/rc.d/init.d/syslog start
Here is some more information about the system status at this point:
# cardctl status
Socket 0:
3.3V 16-bit PC Card
function 0: [ready]
# cardctl config
Socket 0:
Vcc 3.3V Vpp1 3.3V
Vpp2 3.3V
Workaround
Hey, we run Linux on this device - there should always be a way out
:-)
I was wondering if Linux had made any progress since version 2.4.6 which
is the underlying OS of the Sharp ROM. So I took the recent kernel source
(linux-2.4.21-pre5) and compiled the serial_cs module on its own. The
header of serial_cs.c says it's version 1.138.
To make it short: replacing the original module with this new one got
me the GM-270 card working properly!
Meanwhile, I have received the confirmation from the Linux PCMCIA developers
that the "Bad Vcc" is a known bug when attaching mulifunction cards.
The fix has not been introduced in a stable 2.4 kernel yet, it will
be included in linux-2.4.21. It should be ok to use the new module together
with an old kernel.
Here are
the instructions:
The following is valid for the Sharp ROM 2.38G, you might observe different
behaviour with a different ROM.
- Locate a compiled serial_cs module.
Either take it from here: serial_cs.o
Or compile it on your own from the Linux source:
# cd /usr/src/linux/driver/char/pcmcia
# arm-linux-gcc -D__KERNEL__ -DMODULE -c serial_cs.c
You need the GCC distribution from Sharp and might have to add some links in /opt/Embedix/tools/arm-linux-include to the asm directories in the kernel source tree.
- Remove the original module on your Zaurus:
# cd /lib/modules/2.4.6-rmk1-np2-embedix/kernel/drivers/char/pcmcia
# rm serial_cs.o
Don't worry, you are only deleting a link to the file located in ROM. You can always restore this link if you want to do so.
- Copy the new serial_cs.o
to this location.
- Unplug the GM-270 and make sure that the module is not loaded. A
'lsmod' should show no line with serial_cs. Do a 'rmmod serial_cs'
if the module is still loaded.
- Insert the GM-270. You should observe the following:
- CF card icon appears in the status bar
- The red LED at the GM-270 flashes once and remains inactive
- The GM-270 is suspended:
# cardctl status
Socket 0:
3.3V 16-bit PC Card [suspended]
- Upon resume, the red LED is lit and the card is configured properly:
# cardctl resume
# cardctl status
Socket 0:
3.3V 16-bit PC Card
function 0: [ready], [bat dead], [bat low]
# cardctl config
Socket 0:
Vcc 3.3V Vpp1 0.0V Vpp2 0.0V
interface type is "memory and I/O"
irq 35 [exclusive] [level]
Speaker output is enabled
function 0:
config base 0x00f8
option 0x41 status 0x08 pin 0x00 copy 0x00
io 0xf60003f8-0xf6000407 [8bit]
- There are messages in the system log that announce a new serial
device:
ttyS03 at port 0xf6000400 (irq = 35) is a 16C950/954
- Start your favourite GPS utility and wait for the first fix.
Serial port is /dev/ttyS3,
baud rate is 4800.
Good luck!
I have received several reports on ROM versions other than the Sharp 2.38G. Here is a list of what has been tested so far:
ROM version | Observation |
Reported by |
---|---|---|
OpenZaurus 3.1rc2 | Requires the updated
serial_cs.o module (also based on kernel 2.4.6). The card is not automatically suspended after insertion, although it's suspended after powering on the Zaurus. |
Jerome Marot |
OpenZaurus 3.2 |
Same as OZ 3.1rc2 |
Jerome Marot |
Sharp
3.10 |
No patch required,
although it is based on kernel 2.4.18. |
|
ROM 1.20 JP for C700 |
Patch required. |
Jerome Marot |
Familiar Linux V0.6 on iPAQ H3660 |
Requires the patch
within the 2.4.18-rmk3-hh24 environment. |
Furthermore, there are issues with different GPS and non-GPS units:
Unit |
Description |
Reported by |
Audiovox
RTM-8000 GSM/GPRS CF-Card |
GSM card with serial
interface. Has persistent "Bad Vcc" problems after exchanging serial_cs.o. Please report if you have found a way to get working. |
|
iTrek
CF GPS |
This GM-270 clone
works without problems under Sharp 3.10. No information available whether the patch is required under 2.38. |
|
GlobalSat
CF GPS |
Patch is required under 2.38. |
In case of any questions please
don't hesitate to contact me.