|
|
$Id: README.usb,v 1.14 2007/02/16 18:26:41 desrod Exp $
|
|
|
======================================================================
|
|
|
README.usb
|
|
|
Author: David A. Desrosiers
|
|
|
Updated: Sun Feb 4 16:10:15 EST 2007
|
|
|
----------------------------------------------------------------------
|
|
|
TODO:
|
|
|
- Create README.porting as referenced in this HOWTO
|
|
|
|
|
|
======================================================================
|
|
|
This README will describe in detail, the process and programs required
|
|
|
to get pilot-link 0.12.0 and later working with standard usb
|
|
|
connectivity on Linux and Mac OS X machines.
|
|
|
|
|
|
Since the release of version 0.10.99 of pilot-link, USB-based Palm
|
|
|
handheld devices are fully supported by the entire suite of pilot-link
|
|
|
tools, conduits and bindings.
|
|
|
|
|
|
To get this working may require a few things to be configured on your
|
|
|
desktop or server machine first, and you should verify a few items to
|
|
|
make sure that it is working properly.
|
|
|
|
|
|
Currently (as of 2/4/2007), USB connections are supported on Mac OS X,
|
|
|
Linux and BSD-based operating systems on several hardware different
|
|
|
architectures.
|
|
|
|
|
|
Porting it to work with Win32 or and any other POSIX-compliant
|
|
|
environment (such as OS/2 or BeOS) should not be much harder. Please
|
|
|
see README.porting in the pilot-link docs subdirectory for more details
|
|
|
on how to help with these efforts.
|
|
|
|
|
|
|
|
|
Mac OS X USB Configuration
|
|
|
--------------------------
|
|
|
There is nothing specific to do at all. No really, its just
|
|
|
that easy.
|
|
|
|
|
|
When you compile pilot-link on Mac OS X, the darwinusb driver
|
|
|
code under ./libpisock/ is detected and built and supports USB
|
|
|
handhelds as well as the PalmConnect USB serial adapter.
|
|
|
|
|
|
All pilot-link command line tools take a special port "name" as
|
|
|
their sole port argument. This is different from Linux where
|
|
|
there is a very specific entry in /dev to manage, depending on
|
|
|
your particular handheld (more on this point later).
|
|
|
|
|
|
In OS X, there is no /dev filesystem, so we use a magic port
|
|
|
designation which talks to the bus directly.
|
|
|
|
|
|
On OS X, use the port designation of "-p usb:" if your Palm
|
|
|
handheld is connected through a USB cradle, cable or a
|
|
|
PalmConnect serial-to-USB adapter. That's it.
|
|
|
|
|
|
Note that USB support on OS X requires Mac OS X 10.2 or later,
|
|
|
and will not work on MacOS 9 or earlier versions.
|
|
|
|
|
|
If you are running Mac OS X, you can ignore all the rest of
|
|
|
this document, your job is done here; It Should "Just
|
|
|
Work(tm)".
|
|
|
|
|
|
|
|
|
Linux USB Configuration
|
|
|
-----------------------
|
|
|
Roll up your sleeves, this could get a bit confusing... but
|
|
|
don't fret, I'm thorough and I'll walk you through every single
|
|
|
step.
|
|
|
|
|
|
First, in order to get USB working with your Palm device, your
|
|
|
desktop machine must support the USB subsystem. Depending on
|
|
|
your machine's configuration, this may require enabling USB in
|
|
|
the machine's BIOS, or in your Linux kernel configuration, or
|
|
|
perhaps just as simple as loading the required modules for your
|
|
|
USB subsystem. Many of these are supported by current Linux
|
|
|
kernels and recent Linux distributions (as of 2/2007).
|
|
|
|
|
|
If you should find that your kernel is older than 2.4.21 (as of
|
|
|
the date of this README), you will need to do a kernel upgrade
|
|
|
to something more recent.
|
|
|
|
|
|
Using kernels older than 2.4.21 are not recommended and may not
|
|
|
work for newer Palm devices, as the kernel-level visor module
|
|
|
that is required may not have support for your newer Palm
|
|
|
device. In short, the kernel was released before your Palm
|
|
|
device was released, so it doesn't know how to speak to it.
|
|
|
|
|
|
With each new Palm device that is released, the vendor and
|
|
|
product identifiers in the hardware have to be added to the
|
|
|
visor module to allow it to recognize the device at connect
|
|
|
time. See the "Loading visor" section below for more detail.
|
|
|
|
|
|
First, verify that you have USB functioning properly on your
|
|
|
system. If you're using a USB-based keyboard or a USB mouse and
|
|
|
it works properly, you already have functioning USB support in
|
|
|
your linux kernel, which was probably provided through your
|
|
|
Linux distribution by default.
|
|
|
|
|
|
If you are not using a USB device already, you can try to probe
|
|
|
for the USB host controller that your system supports (you do
|
|
|
have a system with USB ports on it, right? =) with the
|
|
|
following syntax, as the 'root' user (only root can load and
|
|
|
unload kernel modules in Linux):
|
|
|
|
|
|
|
|
|
For 2.4.xx kernels
|
|
|
-----------------------
|
|
|
# /sbin/modprobe usb-ohci
|
|
|
|
|
|
or..
|
|
|
|
|
|
# /sbin/modprobe usb-uhci
|
|
|
|
|
|
or..
|
|
|
|
|
|
# /sbin/modprobe usb
|
|
|
|
|
|
For 2.6.xx kernels
|
|
|
-----------------------
|
|
|
|
|
|
# /sbin/modprobe uhci_hcd
|
|
|
|
|
|
or..
|
|
|
|
|
|
# /sbin/modprobe ehci_hcd
|
|
|
|
|
|
Each motherboard will have a specific chipset that one of these
|
|
|
modules should support. You will only need one, so please don't
|
|
|
be alarmed if you try to modprobe one of the above, and receive
|
|
|
errors. If you do, it simply means that the host controller
|
|
|
isn't what the module expects; try one of the others.
|
|
|
|
|
|
Once you have that working (verified to be loaded with
|
|
|
lsmod(1), you can then try loading the USB serial support
|
|
|
layer, using:
|
|
|
|
|
|
# /sbin/modprobe usbserial
|
|
|
|
|
|
If this is successful, you should see the following in the
|
|
|
system logs (usually /var/log/messages):
|
|
|
|
|
|
kernel: usb.c: registered new driver serial
|
|
|
kernel: usbserial.c: USB Serial support registered for Generic
|
|
|
kernel: usbserial.c: USB Serial Driver core v1.4
|
|
|
|
|
|
Then on top of that, load the visor module.
|
|
|
|
|
|
The name of the module is called "visor" for historical
|
|
|
reasons, here's why: The very first Palm device to support USB
|
|
|
was a Handspring Visor.
|
|
|
|
|
|
Since then, many vendors such as Sony, Palm, and others have
|
|
|
provided Palm handhelds with USB support, and this "visor"
|
|
|
module should contain the proper code to sync and communicate
|
|
|
with them as well; the code is still inside the module but it
|
|
|
retains its legacy name.
|
|
|
|
|
|
# /sbin/modprobe visor
|
|
|
|
|
|
If successful, you should see the following entries in the
|
|
|
logs:
|
|
|
|
|
|
kernel: usbserial.c: USB Serial support registered for Handspring Visor / Treo / Palm 4.0 / Cli<6C> 4.x
|
|
|
kernel: usbserial.c: USB Serial support registered for Sony Cli<6C> 3.5
|
|
|
kernel: visor.c: USB HandSpring Visor, Palm m50x, Treo, Sony Cli<6C> driver v1.7
|
|
|
|
|
|
Don't be alarmed if your version does not show these exact
|
|
|
strings. As long as you see the usbserial and visor module
|
|
|
load successfully, without reporting any errors or unresolved
|
|
|
symbols, the system is ready for the next step.
|
|
|
|
|
|
Now if you do an '/sbin/lsmod' you should see something similar to this:
|
|
|
|
|
|
Module Size Used by Tainted: PF
|
|
|
visor 9036 0 (unused)
|
|
|
usbserial 19904 0 [visor]
|
|
|
usb-ohci 18080 0 (unused)
|
|
|
usb-uhci 23012 0 (unused)
|
|
|
|
|
|
|
|
|
Loading visor dynamically with custom device ids
|
|
|
------------------------------------------------
|
|
|
If you're running Linux kernel 2.4.22 or higher, you can add
|
|
|
your vendor_id and product_id at module load time by passing
|
|
|
the values to modprobe(1) as follows:
|
|
|
|
|
|
modprobe visor product=0x70 vendor=0x80
|
|
|
|
|
|
If you do not know the values that your device requires, you
|
|
|
can check your system logs in /var/log/messages after you
|
|
|
hit HotSync on your Palm device. It should show something
|
|
|
like this:
|
|
|
|
|
|
usb.c: USB device 11 (vend/prod 0x830/0x61)
|
|
|
is not claimed by any active driver.
|
|
|
|
|
|
In that case, you know you want to pass the following values
|
|
|
to modprobe:
|
|
|
|
|
|
modprobe visor product=0x61 vendor=0x830
|
|
|
|
|
|
Or you can put it in your /etc/modules.conf file as well,
|
|
|
using a similar syntax as follows:
|
|
|
|
|
|
options visor vendor=0x54c product=0x144
|
|
|
|
|
|
Simple, right? Yes.
|
|
|
|
|
|
|
|
|
Verifying device inode creation (non-udev)
|
|
|
------------------------------------------
|
|
|
Next we must verify that the actual USB devices are created
|
|
|
and registered in /dev for you.
|
|
|
|
|
|
In your kernel source directory, under the kernel source
|
|
|
directory Documentation/usb/usb-serial.txt, is an overview
|
|
|
of how to create the proper USB devices on your system.
|
|
|
|
|
|
For Palm devices, you will need no more than two of these
|
|
|
devices, dev/ttyUSB0 and /dev/ttyUSB1, depending on your
|
|
|
Palm device manufacturer (as of the time of this README, two
|
|
|
Sony models use dev/ttyUSB0, and the rest of the Sony and
|
|
|
Palm models seem to be using /dev/ttyUSB1)
|
|
|
|
|
|
# /bin/mknod /dev/ttyUSB0 c 188 0
|
|
|
# /bin/mknod /dev/ttyUSB1 c 188 1
|
|
|
|
|
|
If you are using devfs (currently not recommended for
|
|
|
security reasons), the devices supported will show up as
|
|
|
/dev/usb/tts/0 and /dev/usb/tts/1 respectively. More on
|
|
|
devfs issues will be covered later in this README.
|
|
|
|
|
|
Also, make sure your user has read and write permissions to
|
|
|
those device nodes:
|
|
|
|
|
|
# the '?' used below is a wildcard and will chmod all
|
|
|
# ttyUSB* devices with a single digit (USB1, USB2,
|
|
|
# USB3, and so on).
|
|
|
|
|
|
# /bin/chmod 0666 /dev/ttyUSB?
|
|
|
..or
|
|
|
|
|
|
# /bin/chmod a+rw /dev/ttyUSB?
|
|
|
|
|
|
Configuring udev to create inodes dynamically for you
|
|
|
-----------------------------------------------------
|
|
|
With the newer Linux distributions, you can take advantage
|
|
|
of udev(1), which will create and name devices for you
|
|
|
dynamically. Using udev, you don't have to create the
|
|
|
devices in /dev manually, nor do you have to create symlinks
|
|
|
to /dev/pilot if you want to use that interface.
|
|
|
|
|
|
Configuring udev is fairly straightforward:
|
|
|
|
|
|
1. Install the latest udev package for your Linux distribution
|
|
|
|
|
|
2. Create a file in /etc/udev/rules.d called
|
|
|
pilot.rules, with the following information in it
|
|
|
(all on one line, and do not make a typo or it will
|
|
|
not work properly):
|
|
|
|
|
|
BUS=="usb", SYSFS{product}=="Palm Handheld*|Handspring *", KERNEL=="ttyUSB*", NAME="ttyUSB%n", SYMLINK="pilot", GROUP="usb", MODE="0666"
|
|
|
|
|
|
Yep, that's it.
|
|
|
|
|
|
3. Restart udev using whatever service restart tools
|
|
|
your distribution provides. You do not have to
|
|
|
reboot for this to take effect.
|
|
|
|
|
|
|
|
|
Linux Kernel Configuration
|
|
|
---------------------------
|
|
|
If your distrubution-supplied Linux kernel does not have native
|
|
|
USB support, you will have to build it into your kernel first.
|
|
|
Building a Linux kernel is not as hard or as daunting as it
|
|
|
seems, and is in fact, quite rewarding. Not only do custom
|
|
|
kernels perform better, but they tend to be faster, because
|
|
|
they only include support for hardware _on_ your system, and
|
|
|
not hardware you don't. You wouldn't build a kernel for SCSI
|
|
|
support, if you didn't have SCSI drives in your system, would
|
|
|
you?
|
|
|
|
|
|
There is a very comprehensive and concise kernel-building-HOWTO
|
|
|
which will walk you through the entire process, in
|
|
|
non-confusing language, found here:
|
|
|
|
|
|
http://howto.gnu-designs.com/kernel-HOWTO
|
|
|
|
|
|
Once you have built a kernel, and tested it, you can easily add
|
|
|
the necessary support for USB devices and USB host controller
|
|
|
support into it afterwards.
|
|
|
|
|
|
After configuring your Linux kernel, you will find in your
|
|
|
kernel source directory, is a file called .config ("dot
|
|
|
config"). In this file, are several parameters you will need to
|
|
|
add/change to enable proper USB support.
|
|
|
|
|
|
CONFIG_USB=y
|
|
|
CONFIG_USB_DEBUG=y
|
|
|
CONFIG_USB_DEVICEFS=y
|
|
|
CONFIG_USB_UHCI=m
|
|
|
CONFIG_USB_UHCI_ALT=m
|
|
|
CONFIG_USB_OHCI=m
|
|
|
|
|
|
CONFIG_USB_SERIAL=m
|
|
|
CONFIG_USB_SERIAL_GENERIC=y
|
|
|
CONFIG_USB_SERIAL_VISOR=m
|
|
|
|
|
|
If you would like to support for other USB devices (such as a
|
|
|
USB-based digital camera, or scanner) you can add it here as
|
|
|
well.
|
|
|
|
|
|
Rebuild your kernel as specified in your favorite kernel HOWTO,
|
|
|
and then proceed to the previous section to verify that all
|
|
|
required USB bits are functioning.
|
|
|
|
|
|
|
|
|
Talking to your Palm over USB
|
|
|
-----------------------------
|
|
|
To now "speak" to these devices you've created, using the
|
|
|
drivers you loaded, you must hit the HotSync button on your
|
|
|
cradle first, before launching any of pilot-link's various
|
|
|
utilities, if your version of pilot-link is earlier than
|
|
|
0.11.8.
|
|
|
|
|
|
When you hit the HotSync button on the cradle or by tapping on
|
|
|
your HotSync icon on the Palm itself, you should see something
|
|
|
similar to the following in the system logs (/var/log):
|
|
|
|
|
|
kernel: Manufacturer: Palm, Inc.
|
|
|
kernel: Product: Palm Handheld
|
|
|
kernel: SerialNumber: L0JH14R12345
|
|
|
kernel: usbserial.c: Handspring Visor / Palm 4.0 / Cli<6C> 4.x converter detected
|
|
|
kernel: visor.c: Handspring Visor / Palm 4.0 / Cli<6C> 4.x: Number of ports: 2
|
|
|
kernel: visor.c: Handspring Visor / Palm 4.0 / Cli<6C> 4.x: port 1, is for Generic use and is bound to ttyUSB0
|
|
|
kernel: visor.c: Handspring Visor / Palm 4.0 / Cli<6C> 4.x: port 2, is for HotSync use and is bound to ttyUSB1
|
|
|
kernel: usbserial.c: Handspring Visor / Palm 4.0 / Cli<6C> 4.x converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
|
|
|
kernel: usbserial.c: Handspring Visor / Palm 4.0 / Cli<6C> 4.x converter now attached to ttyUSB1 (or usb/tts/1 for devfs)
|
|
|
kernel: usb.c: serial driver claimed interface c76aa160
|
|
|
|
|
|
If you received errors or see a message similar to the following:
|
|
|
|
|
|
kernel: usb.c: USB device 28 (vend/prod 0x54c/0x95) is not claimed by any active driver
|
|
|
|
|
|
...see the "Loading visor dynamically with custom ids" section
|
|
|
above.
|
|
|
|
|
|
Once your module is loaded, and you see the successful message
|
|
|
when you hit HotSync, you can now launch any of pilot-link's
|
|
|
various conduits such as:
|
|
|
|
|
|
$ pilot-dlpsh -p /dev/ttyUSB1
|
|
|
|
|
|
..or
|
|
|
|
|
|
$ pilot-dlpsh -p /dev/pilot
|
|
|
|
|
|
export PILOTPORT=/dev/ttyUSB1
|
|
|
$ pilot-xfer -l
|
|
|
|
|
|
It should connect and allow you to talk to your Palm device.
|
|
|
The PILOTPORT environment variable will be read if the '-p'
|
|
|
option is not specified. If you do not specify either,
|
|
|
/dev/pilot will be used if it exists. Substitute ttyUSB1 for
|
|
|
your port, based on the DeviceMatrix above.
|
|
|
|
|
|
|
|
|
FreeBSD USB Configuration
|
|
|
-------------------------
|
|
|
This information copyright 2002 Anish Mistry & David A.
|
|
|
Desrosiers. All rights reserved. Written by Anish Mistry of AM
|
|
|
Productions (http://am-productions.yi.org)
|
|
|
|
|
|
Configuring FreeBSD to speak to your Palm device over USB is a
|
|
|
bit different from Linux and OSX. Here are the quick steps:
|
|
|
|
|
|
1. Create a small shell script to be executed from your
|
|
|
usbd.conf.
|
|
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
# export the following enviornmental variables to enable full
|
|
|
# logging of a connection
|
|
|
#
|
|
|
# export PILOT_LOGFILE=$HOME/.pilot/pilot-link.log
|
|
|
# export PILOT_LOG=1 # set to 0 to disable logging
|
|
|
# export PILOT_DEBUG="DEV SLP CMP PADP NET SOCK"
|
|
|
# export PILOT_DEBUG_LEVEL="DEBUG"
|
|
|
/usr/local/bin/pilot-xfer -p usb:/dev/$1 --sync $HOME/.pilot/
|
|
|
|
|
|
2. You will need to su to root and add the following to your
|
|
|
/etc/usbd.conf before the passthrough entry. Your entry may
|
|
|
vary depending on your handheld.
|
|
|
|
|
|
In order to find out what your particular Palm handheld
|
|
|
requires for 'vendor' and 'product' below, make sure your
|
|
|
kernel has support for 'ucom' and 'uvisor', and run 'usbdevs
|
|
|
-v' AFTER hitting HotSync on your Palm device. The fields
|
|
|
will be displayed, simply copy them into the appropriate
|
|
|
places as shown below.
|
|
|
|
|
|
##########################
|
|
|
## Handspring visor (PDA)
|
|
|
device "Handspring Visor"
|
|
|
devname "ugen0"
|
|
|
vendor 0x082d
|
|
|
product 0x0100
|
|
|
release 0x0100
|
|
|
# pilot-link
|
|
|
# attach "/home/dir/.pliot/pilot-sync.sh ${DEVNAME}"
|
|
|
|
|
|
3. Kill and restart the usbd daemon with the following (as
|
|
|
root)
|
|
|
|
|
|
# killall usbd && usbd
|
|
|
|
|
|
Verify that usbd properly restarted with:
|
|
|
|
|
|
# ps ax | grep usbd
|
|
|
|
|
|
4. Press the HotSync button again on your cradle.
|
|
|
|
|
|
5. Launch the application of your choice to syncronize with
|
|
|
your Palm handheld. 'pilot-xfer' and 'dlpsh' are two common
|
|
|
ones to try. The correct syntax is:
|
|
|
|
|
|
$ /usr/local/bin/pilot-xfer -p /dev/ucom0 -b $HOME/.pilot/
|
|
|
|
|
|
$ /usr/local/bin/dlpsh -p /dev/ucom0
|
|
|
|
|
|
The first sync can take a while, so please be patient.
|
|
|
|
|
|
Alternately, you can uncomment the 'attach' line in
|
|
|
/etc/usbd.conf above and restart usbd as explained in
|
|
|
step 3 above.
|
|
|
|
|
|
6. You're done. Enjoy! (This is the most important item.)
|
|
|
|
|
|
|
|
|
USB Palm Handheld Device Kernel Matrix
|
|
|
--------------------------------------
|
|
|
Many thanks go to Greg Kroah for his tireless work supporting
|
|
|
these new devices as they come out. The matrix of which kernels
|
|
|
support which Palm handheld device can be found at the
|
|
|
pilot-link wiki, at the following URL:
|
|
|
|
|
|
http://www.pilot-link.org/DeviceMatrix
|
|
|
|
|
|
If you see your Palm in this list, you must be running the
|
|
|
corresponding kernel version to be able to use it with
|
|
|
pilot-link or ColdSync using the USB interface.
|
|
|
|
|
|
If you don't see your Palm device there, feel free to add your
|
|
|
entry so others can benefit from the vendor and product
|
|
|
information you've added.
|
|
|
|
|
|
|
|
|
None of this is working! Where do I go for help now?
|
|
|
--------------------------------------------------------------------------
|
|
|
There are mailing lists and an irc channel that can help. You
|
|
|
can find those at the following places:
|
|
|
|
|
|
General discussion, problems, configuration issues
|
|
|
------------------------------------------------------
|
|
|
http://www.pilot-link.org/mailman/listinfo/pilot-link-general
|
|
|
|
|
|
Development-related issues and discussion, i.e. "code"
|
|
|
------------------------------------------------------
|
|
|
http://www.pilot-link.org/mailman/listinfo/pilot-link-devel
|
|
|
|
|
|
pilot-link irc channel
|
|
|
------------------------------------------------------
|
|
|
We can also be found on irc, at irc.pilot-link.org in the
|
|
|
channel #pilot-link
|
|
|
|
|
|
If your irc client supports SSL, you can point to port 994 on
|
|
|
irc.pilot-link.org and have a secured session (no cleartext).
|
|
|
|
|
|
If you cannot use SSL, use port 6667 for "normal" irc.
|
|
|
|
|
|
Lastly, I can be reached directly at desrod@gnu-designs.com if
|
|
|
nothing else works for you. Try the mailing lists and irc first
|
|
|
though, as I might be hard to reach at times.
|
|
|
|
|
|
|
|
|
Donating to pilot-link
|
|
|
--------------------------------------------------------------------------
|
|
|
Do you like our work? Do you rely on the code we release for
|
|
|
your daily work or for your own commercial or OSS project?
|
|
|
|
|
|
Please consider donating to keep the project going. We're 100%
|
|
|
self-funded, and we see a LOT of traffic from users and
|
|
|
downloads. Every contribution helps, whether to pay for
|
|
|
bandwidth or to buy devices for testing.
|
|
|
|
|
|
You can help support us by visiting the pilot-link.org site and
|
|
|
clicking on the "Donate" button on the left side of the page.
|
|
|
|
|
|
We thank you for your contributions, whatever you can offer.
|
|
|
|
|
|
|
|
|
Thanks go to...
|
|
|
--------------------------------------------------------------------------
|
|
|
Justin Paulsen, "Petaris" on irc, for his tireless testing
|
|
|
efforts, mirroring pilot-link releases, helping out users on
|
|
|
irc, and keeping things lively in general.
|
|
|
|
|
|
Florent Pillet, "fpillet" on irc, for helping fix up libpisock
|
|
|
to work on OSX and doing testing on newer devices to work out
|
|
|
the various Heisenbergs found in there. His work has been
|
|
|
invaluable over the last year or two with usb, devices and OS X
|
|
|
support.
|
|
|
|
|
|
Zephania Hull, "Mercury" on irc for spending the time and
|
|
|
effort to get libusb worked out on the Linux side. Without his
|
|
|
effort, libusb wouldn't be where it is today.
|
|
|
|
|
|
Other thanks go to Knghtbird, Nicholas Piper, Adriaan de Groot,
|
|
|
John Marshall, Kenneth Albanowski and many others through the
|
|
|
years for helping bring this to where it is today. If I've
|
|
|
forgotten to mention you, just let me know.
|