Return to main page.
SynCE - Linux USB HOWTO

Please note that this HOWTO is not yet finished!

The purpose of this HOWTO is to connect a single Windows CE device with USB support to a PC running a Linux distribution with a 2.6.x kernel, as this is assumed to be the most common setup for SynCE users.

If this does not apply to your system, go to the No HOWTO page.

In case you are not on a 32-bit x86 system but for example using a 64-bit system (such as AMD64) or a big-endian system (such as PowerPC), there might be some additional quirks. You are very welcome to write to the synce-users@lists.sourceforge.net list about your experiences with SynCE on such systems!

You must also be running a Linux kernel build that supports loadable modules. (If you don't know what this means, you probably don't have to worry about this!)
1. Special note for owners of Microsoft Smartphone devices

These devices are not guaranteed to work with any released Linux kernel! Read on for the solution!

This note is known or probable to apply to the following devices, but may also apply to others:

    * HTC Canary/Tanager (also known as i-Mate Smartphone, Orange SPV/SPV e100, Qtek 7070)
    * HTC Voyager (also known as i-Mate Smartphone 2, Orange SPV e200, Qtek 8080)
    * HTC Typhoon (also known as Orange c500, Qtek 8010) -- Dave Jenkins reports that it works with an unpatched 2.6.11-1.1369_FC4 kernel.
    * Motorola MPx200

Without a fix for this problem, synce-serial-start just hangs, because pppd will not be able to setup a PPP connection.

If you follow the USB debug instructions for any of the device you will see something very similar to this in the debug log, here with the most important line marked with red color:

pppd[1061]: pppd 2.4.2 started by root, uid 0
kernel: usbserial.c: serial_open
kernel: ipaq.c: ipaq_open - port 0
kernel: host/usb-uhci.c: interrupt, status 3, frame# 1541
kernel: ipaq.c: ipaq_read_bulk_callback - port 0
kernel: ipaq.c: ipaq_read_bulk_callback - nonzero read bulk status received: -84
kernel: usbserial.c: serial_ioctl - port 0, cmd 0x5416
kernel: usbserial.c: serial_ioctl - port 0, cmd 0x5401
kernel: usbserial.c: serial_ioctl - port 0, cmd 0x5401
kernel: usbserial.c: serial_ioctl - port 0, cmd 0x5404
kernel: usbserial.c: serial_chars_in_buffer = port 0
kernel: ipaq.c: ipaq_chars_in_buffer - queuelen 0
kernel: usbserial.c: serial_set_termios - port 0
kernel: usbserial.c: serial_ioctl - port 0, cmd 0x5401
kernel: usbserial.c: serial_open
kernel: usbserial.c: serial_close - port 0

If you have a device with the error above, download kernel-2.6-driver.tar.gz, extract and follow the instructions in the README file in order for your device to work with SynCE!

Note: The support for Microsoft Smartphone will be simplied in the future!
2. Installation of the SynCE software

Please note that this HOWTO is not yet finished!

For the time being, this part is very brief!

If you are running an RPM-based Linux distributions such as the ones in this list, install the latest RPM version of SynCE:

    * Fedora
    * RedHat
    * Suse
    * Mandrake

If you are running Debian Testing or Unstable, the latest version of SynCE should be available in your repository.

If you are running Gentoo, there is an ebuild for SynCE, but make sure it uses the latest SynCE version!

If any of the above does not apply to you for some reason, you can compile SynCE yourself.
3. Configuration of the kernel driver

Please note that this HOWTO is not yet finished!

These actions described in this section have to be performed every time you upgrade your Linux kernel!

SynCE uses a Linux kernel driver called ipaq in order to handle the USB connection. You may need to patch this driver before you can make a successful USB connection.

Everything in this section should be performed as the root user.
If you compile the kernel yourself...

Pre-compiled Linux kernels usually includes the ipaq and ppp_async Linux kernel drivers that are required to use SynCE.

If you compile the Linux kernel yourself, make sure that these drivers are included in your kernel configuration as loadable modules:

    Device Drivers --->
    USB Support --->
    USB Serial Converter support --->
    USB PocketPC PDA Driver

    Device Drivers --->
    Networking support --->
    PPP (point-to-point protocol) support
      PPP support for async serial ports

Kernel version

Note: The recommended Linux kernel version for SynCE is 2.6.10 or later!

Run this command to find out your kernel version:

    uname -r

Read more in the apropriate section below:

    2.4.x Your kernel is not supported by this HOWTO, sorry. Use the No HOWTO page.

    2.5.x kernel Your kernel is not supported at all by SynCE. We suggest that you upgrade to a 2.6.x kernel!

    2.6.x kernel Keep going!

Linux distribution

If your Linux distribution is one of these and you have a kernel version prior to 2.6.9 you need to patch your Linux kernel:

    * Suse 9.1
    * Gentoo
    * Debian Unstable

If this applies to you, download kernel-2.6-driver.tar.gz, extract and follow the instructions in the README file.
Find out USB information about your device

In order to find out if your Linux kernel is ready for your Windows CE device you shall connect the Windows CE device to the PC with the USB cable, but first you should save a list of the current USB devices, to make it easy to find the new device. Run this command:

    cat /proc/bus/usb/devices > /tmp/before

Now connect your Windows CE device and make sure it is turned on. Wait a few seconds and run a similar command to get the list of USB devices including the Windows CE device:

    cat /proc/bus/usb/devices > /tmp/after

After running the command above you should disconnect your Windows CE device.

Now you shall compare the two files to find out the USB information about your device:

    diff /tmp/before /tmp/after

The output from the above command will look something like this:

23a24,31
> T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 10 Spd=12  MxCh= 0
> D:  Ver= 1.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS= 8 #Cfgs=  1
> P:  Vendor=049f ProdID=0003 Rev= 0.00
> C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
> I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ipaq
> E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  16 Ivl=0ms
>

Important parts of the output have been marked with red color, and may be referenced in the instructions below.
Special note for Windows Mobile 2005 users

Your device may not work over USB!

Does your USB device presents itself like this? Especially compare the parts marked with red color.

T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  9 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ef(unk. ) Sub=01 Prot=01 MxPS=16 #Cfgs=  1
P:  Vendor=0bb4 ProdID=0b01 Rev= 0.00
S:  Manufacturer=MSFT
S:  Product=PocketPC USB Sync
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(unk. ) Sub=01 Prot=01 Driver=(none)
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=1ms
I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms

If your device is similar it will most likely crash your kernel when you run ''synce-serial-start''. This issue is being investigated. See bug report 1332550. You are very welcome to amend your experiences to the bug report!
The number of USB configurations

First look at the value of #Cfgs=. If it's 1, skip to The Driver entry below! If it's 2 or more, continue this HOWTO but after you have finished it please send a mail to synce-devel@lists.sourceforge.net and tell us:

   1. brand and model of your device
   2. the output from diff /tmp/before /tmp/after
   3. if it worked properly with this HOWTO

The Driver entry

Second you look at the Driver entry. Read more in the apropriate section below.

    Driver=ipaq or Driver=usbserial Your kernel driver recognized your device, good!

    Driver=(none) Your kernel driver did not recognize your device. You need to perform some special configuration:

       1.

          Only if your Linux kernel is 2.6.10 or later: please send a mail to synce-devel@lists.sourceforge.net and tell us...
             1. your kernel version
             2. brand and model of your device
             3. vendor/product USB IDs for your device (see Vendor= and ProdID=)
       2.

          Follow the instructions in Appendix A to add options like this, but replace the red digits with the corresponding ones from the output from the command you ran earlier:

              vendor=0x049f product=0x0003

       3.

          If you have the file /etc/rc.local, open it with a text editor and add this line in order to have things working directly next time you restart your computer:

              /sbin/modprobe ipaq

       4.

          Now run these commands to reload the ipaq module:

rmmod ipaq
modprobe ipaq

          If you get the message ERROR: Module ipaq does not exist in /proc/modules when running the rmmod command, just ignore it.
       5.

          If you got no output from the modprobe command (meaning it succeeded), restart this HOWTO from the Find out USB information about your device section.
       6.

          If you get the message FATAL: Module ipaq not found, download kernel-2.6-driver.tar.gz, extract and follow the instructions in the README file.
       7.

          If you got another error message, ask for help!

    Another Driver entry Ask for help!

The number of USB endpoints

Next you look at the #EPs= entry or count the number of lines beginning with E:, meaning the number of USB endpoints:

    Two or three USB endpoints Nothing to do here, good!

    Four USB endpoints You need some special action here. Either follow Stefan Langeland's instructions or these:

        First of all and unless you already did this previously, download kernel-2.6-driver.tar.gz, extract and follow the instructions in the README file to upgrade your kernel driver.

        Second, follow the instructions in Appendix A to add the following option to the kernel module:

            ttyUSB=1

        Now unload the kernel module and load it again:

rmmod ipaq
modprobe ipaq

        No output from the above commands means success.

        Note: The support for devices with four USB enpoints will be simplied in the future!

    Another number of endpoints Ask for help!

4. Configuration of the connection

Please note that this HOWTO is not yet finished!

Everything in this section should be performed as the root user.

   1. Connect your Windows CE device
   2.

      Try the following synce-serial-config commands until one of them succeed:
          * synce-serial-config ttyUSB0
          * synce-serial-config tts/USB0
          * synce-serial-config usb/tts/0
          * synce-serial-config usb/ttyUSB0

      Important! If you had four USB endpoints in the USB information for your device instead of the usual two, you should use 1 instead of 0 in the command above!

      If you get the error message synce-serial-config was unable to find a character device named..., ask for help!

This does not have to be done again on your system unless your device appears on a different tty for some reason.
5. Configuring the firewall

New section of the HOWTO!

SynCE requires the following TCP ports to be open in the firewall between your PC and the PDA:

    From PDA to PC

        * 5678
        * 5679

    From PC to PDA

        * 990

Refer to the documenation of your Linux distribution for details on how to allow traffic on these ports between your PC and PDA. Some details that might be of interest when configuring the firewall:

When the synce-serial scripts are used, the PDA is connected via PPP. The default local IP address of the PPP connection is 192.168.131.102 and the default remote IP address is 192.168.131.201. These IP addresses can be changed by passing different parameters to the synce-serial-config tool. Run synce-serial-config without parameters or read its man page to know more.

If the synce-serial-start script (see the next section, "Starting the connection") detects any firewall rules whatsoever you will see this message:

Warning!

You have firewall rules that may prevent SynCE from working properly!

This is just a warning and can be ignored if you know that your firewall will not block the ports needed by SynCE.
6. Starting the connection

For the time being, this part is very brief!

   1.

      As your own user (not root), start dccm:

          dccm (if your device is not password-protected)
          dccm -p password (if your device is password-protected)

      This must be done after each time you have rebooted your computer.
   2. Connect your Windows CE device
   3.

      As root, run this command:

          synce-serial-start

   4. If synce-serial-start just hangs with the message "synce-serial-start is now waiting for your device to connect" and you have a Smartphone, did you really follow the instructions in section 1 of this HOWTO?

7. Testing the connection

Applications and tools (except for synce-serial-*) that use SynCE must be executed by the same user as is running dccm (not root).

As your own user (not root), try this command:

    pstatus (not on Debian)
    synce-pstatus (on Debian, in the librapi2-tools package)

If you successfully got information about your device, congratulations for enduring all the quirks involved in setting up SynCE! :-)

Now is a good time to play with the other command line tools included with SynCE. However, don't forget steps 7 and 8 below!

If you get the message below, the connection failed, and you should make sure that you followed all the steps in this HOWTO properly.

    pstatus: Unable to initialize RAPI: An unspecified failure has occurred

If you truly did follow the HOWTO, you may want to get help.
8. Disconnection

In order to properly disconnect your device, you should first close the network connection between Windows CE and SynCE. There are a couple of ways to do this.

Just unplugging the USB cable is not proper disconnection when using SynCE. (This will hopefully be fixed in the kernel driver some day.)

Before you unplug the cable you should do one of these actions, in order of preference:

   1. Disconnect with the GNOME Tray Icon or with SynCE-KDE
   2. Disconnect with the appropriate action on your PDA
   3. Run killall -HUP dccm from the command line
   4. Run synce-serial-abort. Please note that this command is only to be used when everything else fails. It also seems like it only works for USB connections while the USB cable is connected.

9. Donation

To show how grateful you are for SynCE, you can donate!
Appendix A. Adding kernel module options

This is a special appendix because the actions here varies between distros.

First select the first alternative to exist on your Linux distribution:

   1. The directory /etc/modprobe.d
   2. The directory /etc/modutils
   3. The file /etc/modprobe.conf.local
   4. The file /etc/modprobe.conf
   5. The file /etc/modules.conf

If one of the directories exists on your Linux distribution, use a text editor to create the file synce in that directory. If you didn't have any of the directories, open the file you have with a text editor.

Add a line like this, but replace options with the actual options you need to add to the kernel module:

    options ipaq options

If you created or edited the /etc/modutils/synce file, run the update-modules command.
Examples

If you have a device with vendor ID 0x1114 and product id 0x0006 that is not recognized by the kernel driver:

    options ipaq vendor=0x1114 product=0x0006

If you have a device with four USB endpoints:

    options ipaq ttyUSB=1


Return to main page.
Last modified: October 20 2005
-- MarcRStockmeier - 02 Nov 2005
Topic revision: r1 - 2005-11-02, MarcRStockmeier
 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding GSI Wiki? Send feedback
Imprint (in German)
Privacy Policy (in German)