Handspring-Visor mini-HOWTO
Ryan VanderBijl
v0.4, Aug 7, 2000
Using the Visor with Linux and your USB port
______________________________________________________________________
Table of Contents
1. Introduction
1.1 About this Document
1.2 Disclaimer
1.3 History
1.4 What is missing from this document?
1.5 Copyright
2. Installing Stuff
2.1 Requirements
2.2 Kernel Stuff
2.3 Installing ColdSync
2.4 Almost Done! (aka testing)
3. Links/References
______________________________________________________________________
1. Introduction
1.1. About this Document
This document was first created by Ryan VanderBijl, April 6, 2:00am.
It has been edited by Miles Lott, and I have recieved hints from
others.
I recieved my Handvisor today, and have struggled getting it to work,
and found no good HOWTO yet, so thought i'd make one. By some random
mutation, you might be able to find a new version on my web page, but
that is up to chance. Test your luck at:
http://www.calvin.edu/~rvbijl39/
or
http://usbvisor.sourceforge.net
I used the vi editor. Anything else would have been evil. No spell
check has yet been run on this document. So, if you have a problem
with my spellling, tuff luck.
1.2. Disclaimer
Hmm... what did I claim? Oh well. I am really a newbie at this
usb/visor stuff, so i really couldn't answer to many of your
questions. There are people who could help you much better, who
maintain the sites I refer to at the end of the document. However,
feel free to send me questions, or updates to this document. My email
address is: rvbijl39@calvin.edu
1.3. History
· v0.1 - initial release
· v0.2 - HTML-ized version
· v0.3 - SGML-ized, Added modifications by Miles Lott
· v0.4 - clarifications, updates, suggested by Matt Shook, Steven
Coffman, Miles Lott, and info from Greg KH.
1.4. What is missing from this document?
I actually "lost" my machine with USB capabilities, so I am no longer
able to test the USB stuff out. It would be very nice if people could
send in documentation on how to get PPP connections working. (Or any
other related cool thing working).
1.5. Copyright
This document is Copyright 2000, by Ryan VanderBijl. You may
distribute freely under the terms of the GPL
(http://www.gnu.org/copyleft/gpl.html
).
2. Installing Stuff
2.1. Requirements
Some obvious things are required, such as a computer, USB ports, hand
visor (and USB cradle), Linux, etc. You also should know how to
compile and install stuff, like the kernel. If you do not, perhaps
the kernel-HOWTO will be helpful:
http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html
.
2.2. Kernel Stuff
First, you will need to get a kernel which supports USB. You can
either get the "latest" development kernel, which is version
2.4.0-test5 (as of this writing, Aug 7, 2000). You may get the latest
version from ftp://ftp.kernel.org/pub/linux/kernel/v2.4/
. Otherwise you need to
get the latest stable kernel version, and the latest backport of the
USB code. The latest (as of Aug 7, 2000) stable kernel is 2.2.16, and
can be gotten from ftp://ftp.kernel.org/pub/linux/kernel/v2.2/
. The latest backport can
be gotten from the linux-usb project, and is found here:
http://www.suse.cz/development/usb-backport/
The current version
(Aug 7, 2000) is: usb-2.4.0-test2-pre2-for-2.2.16-v3. There may be
patches to the backport available. You should be able to find them at
http://sourceforge.net/patch/?group_id=1404
. Download and install
the source, including the usb back port if you are using version 2.2.
Below shows an example of installing the the 2.2 source code, and the
backport.
cd /usr/src
tar xzvf linux-2.2.14.tar.gz
cd linux
gzip -dc ../usb-2.3.50-1-for-2.2.14.diff.gz | patch -p1
make distclean
Next, a critical step, is determining which type of USB host
controller you have. The USB host controller is the hardware in your
computer which handles USB input/output. Intel chipset motherboards,
i.e. the BX chipset, are typically UHCI controllers. Most addon cards
are OHCI controllers. You can determine the type of USB hardware
available by using: 'lspci -v'. (See the Links/References if you do
not have lspci). If you see something like:
USB Controller: ......
Flags: .....
I/O ports at ....
Then you have a UHCI based controller. If you see something like:
USB Controller: .....
Flags: ....
Memory at .....
Then you have a OHCI based controller. (Documentation to figure out
type type of controller was leached from the kernel documentation,
Documentation/usb/scanner.txt). You could refer to http://www.linux-
usb.org for further details. The kernel
documentation in the directory (Documentation/usb/usb.txt) may also be
helpful in determining which type of controller you have.
If you dont have a USB controller you need either buy the serial
cradle for the Visor (what are you doing reading this?), or buy a USB-
capable device (ie. add-on card or motherboard).
Now we need to configure, and make your kernel. During configuration,
make sure you enable:
· USB support (CONFIG_USB),
· the appropriate controller - UHCI, alternate UHCI, or OHCI
(CONFIG_USB_UHCI, CONFIG_USB_UHCI_ALT, or CONFIG_USB_OHCI)
· USB Serial Converter support (CONFIG_USB_SERIAL)
· USB Handspring Visor Driver (CONFIG_USB_SERIAL_VISOR) (serial
converter's sub-option)
(I'm not sure what the difference between UHCI drivers are, nor which
one is recommended for use. Anyone?) I have compiled these into the
kernel, and as modules. Both work. The developer(s) prefer the module
method, but that is up to you.
After you did that, finish installing your kernel, and reboot.
Not done yet! To make the Visor driver work, we need to finish making
the USB Serial driver to work. For that, you can refer to the Linux
Kernel Documentation: Documentation/usb/usb-serial.txt. Basically,
what it tells you to do is to make the devices. You can do this by
excuting the commands, as root:
mknod /dev/ttyUSB0 c 188 0
mknod /dev/ttyUSB1 c 188 1
etc...
chmod 666 /dev/ttyUSB*
Right now the code is limited to 16 connections/ports/devices, so only
0 to 15 need to be done. The chmod is to allow users to be able to
access the Visor device. It is the opinion of the author of this
document that this should be save for a personal computer. Multiuser
computers may want to look into this.
When a Visor connects, there are two "ports" opened. (For most people,
this will be /dev/ttyUSB0, and /dev/ttyUSB1 or similar). The first
port (zero), is a generic connection. The second port is the hotsync
port. This feautre allows for future developments, like, for example,
to export a filesystem from the Visor. A usefull thing to do is to
create a link to the hotsync port so that synchronization software
will use the approriate device be default. You can do this by:
cd /dev
ln -s /dev/ttyUSB1 pilot
Just for fun, you might also want to create a link from /dev/visor to
/dev/ttyUSB1, just, well, because we have a visor, not a pilot (or
Palm(tm)). The actual device number may change, depending on how many
(active?) USB-serial devices you have on your system. A message
containg the device actually used is displayed when the craddle
hotsync button is pressed.
For people who compiled the USB code in as modules, you will also need
to insert the modules into the running kernel. As root, run:
/sbin/modprobe usb-uhci
/sbin/modprobe usb-ohci
/sbin/modprobe usb-serial
2.3. Installing ColdSync
ColdSync is a software package which contains programs to talk with
you're Visor (or your Palm(tm), if you have one of those). Another
relatively popular package to do this is pilot-link. However, there
seems to be some bugs in how pilot-link works, especially with the USB
drivers. Thus ColdSync is the recommended package. UHCI-based systems
seem to be working completely fine with coldsync, while OHCI-based
systems still seem to have some problems. (Both are worse using pilot-
link). For details, look at the visorusb devel list:
http://www.geocrawler.com/lists/3/SourceForge/1169/
.
As of this writing (aug 7, 2000), the latest stable version of
ColdSync is 1.2.5. The latest version (as far as I know) of pilot-
link, is 0.9.3. The one advantage of pilot-link is that there are more
graphical interfaces which use the pilot-link libraries than coldsync.
The programs can be found here:
· http://www.ooblick.com/software/coldsync/
· ftp://ryeham.ee.ryerson.ca/pub/PalmOS/pilot-link.0.9.3.tar.gz
or
perhaps: http://pilot-link.sourceforge.net/
Download and install the program you wish to use. (coldsync has some
INSTALL notes, which you should read.)
cd /usr/src
gzip -dc coldsync-1.2.5.tar.gz | tar xvf -
cd coldsync-1.2.5
./configure
make
make install
If you choose to be lazy, there are probably redhat and debian
packages which you may download and install. I dont support those.
2.4. Almost Done! (aka testing)
We are pretty much done. Now we need to test it. Of course, the visor
needs to be in the cradle, and the cradle needs to be plugged into
your USB port.
To test, we can use the coldsync. For the computer to realize that the
visor really is there, you need to hit the hotsync button on the
cradle. (When a USB device connects, I've noticed that a bunch of info
is dumped to the screen. Update: this is when debugging is enabled).
Eventually, the visor driver will make an entry into the
/proc/drivers/visor, which will list the minor number and purpose.
More on that later. Then you can run coldsync:
coldsync -p /dev/visor
(Remember, /dev/visor is a symbolic link to /dev/ttyUSB1). From here,
use other documentation. Manpages are useful.
3. Links/References
For this document, I used:
· ColdSync: http://www.ooblick.com/software/coldsync/
· PalmOS HOWTO: http://www.orbits.com/Palm/
· Pilot-link: ftp://ryeham.ee.ryerson.ca/pub/PalmOS
· Pilot-link: http://pilot-link.sourceforget.net
· Linux Kernel: ftp.kernel.org/pub/linux/kernel/
· Kernel USB backport: http://www.linux-usb.org
· USB Visor page: http://usbvisor.sourceforge.net
· lspci tool: http://atrey.karlin.mff.cuni.cz/~mj/pciutils.html