You can! I struggled a good deal to get my brand new Palm Zire 31 to sync with Linux and Kpilot, something that it is supposed to do, and does, but not neccesarily right away. Some of the tips and tricks I found on the net didn't work as smoothly as they "should". Here is what I did.
Credits: This page is a modified version of a page made by Yannick Copin, Palm Zire support under Linux 2.4.10, including his stylesheet. I am most grateful for the help that Copin's page has been to me! With the new model of Palm Zire, Palm Zire 31, and with limited skills in hacking, I learned a few tricks that Copin did not write in his page. I add those lessons here, to help new Zire 31 users to get their very nice, new PDA to hotsync with Linux. In the spirit of Free Software, I slightly rewrite Copin's page, and republish. But the main parts og this page is the work of Copin.
My one Linux box is a Red Hat Enterprise, with a 2.4.21-EL-kernel. My other is a SUSE 9.0, with about the same kernel. The problem is the same on both. The following solution is only tested on the Red Hat machine.
Palm Zire is supported from kernel 2.4.20, but Palm has expanded the "Palm Zire" model into three different models, Zire 21, Zire 31 and Zire 71. These models are still supported by the driver of kernel 2.4.20 and newer (even if I don't really know about Zire 21). The problem is that when you plug these PDAs into your USB port, they identify themselves with a number that the kernel does not recognize. In /var/log/messages you may get this message:
hub.c: new USB device 00:1f.2-2, assigned address 2 usb.c: USB device 2 (vend/prod 0x830/0x61) is not claimed by any active driver.
Assuming you have a 2.4.20 or newer, this message does not mean that you have no support. It means that you have a driver for your Zire 31, but that this driver (or the kernel) does not recognize the ID-number of your device. You solve this problem by writing that number into the source code of your driver. You recompile the driver, and install it. Here is what I did, as a wannabe geek, rather than a kernel hacker. Hopefully it might work for you as well!
The easiest way! For the kernel to recognize your Zire 31, this is the easy way to do it. Quoted from pilot-link.org/README.usb:
With kernels later than 2.4.21, you can insert this module with some parameters for your vendor and product id, without recompiling it, using the following syntax:# /sbin/insmod visor vendor=0x830 product=0x0061
But then, I did not get this "hack" to work, even if I have a kernel that should support it. (But I know that this may work, so it is definetly worth trying!)
Not succeding the easy way above, I followed Copin's page and directly hacked the original driver sources visor.c and visor.h. So, here are Copin's steps. I have kept Copin's origianl "recipe", now with the ID-number of Zire 31, and with some added a comments, where I had problems:#define PALM_ZIRE31_ID 0x0061
static __devinitdata struct usb_device_id palm_zire_id_table [] = {
[...]
{ USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID) },
{ } /* Terminating entry */ };
static struct usb_device_id id_table [] = {
[...]
{ USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID) },
make modules SUBDIRS=drivers/usb/serial make modules_install SUBDIRS=drivers/usb/serialBe cautious about the previous tips! "Make modules" recompile, as I understend it, all serial modules for your kernel. If you have installed your kernel using RPMs (or if it is installed by your distribution), then you first have to make a kernel .config-file. This is not trivial (and it is time-consuming) if you aren't a very skilled hacker. You have to know your hardware quite well. If you make a bad .config-file, you run the risk of corrupting some other serial modules in your kernel.
gcc -D__KERNEL__
-I/usr/src/linux-2.4.10.SuSE/include -Wall -Wstrict-prototypes
-Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing
-fno-common -pipe -mpreferred-stack-boundary=2 -march=i586
-DMODULE -c -o visor.o visor.c
(This is Copin's original command.
I got an error message concerning "-Wstrict-prototypes", and just skipped it.
It worked without.)
Then replace the initial module visor.o (most probably
somewhere like here: /lib/modules/2.4.21/drivers/usb/serial/) by
the brand new module.
bash-2.05b# insmod usbserial bash-2.05b# insmod visor
You should be all set: you can now hotplug your Zire 31. I sync it with KPilot. That works wonderfully! The only trick I did not manage to read right out of the Kpilot-litterature, was the presice order of the Hotsync sequence. Here is what I had to do (which is a bit contrary to how Kpilot is supposed to be working):
1: Plug in your device. 2: Make sure no Kpilot is running, including the kpilotDaemon. 3: Hit the hotsync-button on your Zire. 4: Immediatly after that: Start Kpilot. 5: Syncing starts.
By the way, the Palm Zire 31 looks like is a
cheap and nice little machine!
For the latest developments regarding these matters (driver model updates and prod/vendor ID strings), have a look at the Device matrix and Visor structures of the pilot-link.org WIKI (thanks to David A. Desrosiers, maintainer of pilot-link). Finally, thanks to Yannick Copin, for the web page that this page is based upon.
This page was last modified on Mon 25. October, 2004