When I switched my desktop over to Mandriva Linux 2008 I knew it wouldn't be without some shortcomings. One of the most frustrating experiences I had was connecting my HTC Touch phone (a Windows Mobile 6 PDA phone) to my Linux box in order to synchronize it. I stumbled along the way, finding the not too apparent solution to my problem.

First of all, the reason why Mandriva couldn't connect to the device was some apparently faulty version of rndis_host driver that came along with the distribution. As a result, every time you upgrade the kernel, you'll have to follow these steps.

Mandriva 2009 works with Windows Mobile 2003 / 5 / 6 out-of-the-box. Moreover, they now use HAL-based connection to your PocketPC, making odccm obsolete. You'd better stick to their approach, it's much more robust - and convenient!

Start by grabbing the latest rndis_host driver's sources, from the SynCE site and save it to /usr/src.

If you don't have the -devel package matching your kernel installed, do it so. If you're on a desktop computer, it will most probably be kernel-desktop-devel-latest and on a laptop it's kernel-laptop-devel-latest. You can install them either through the Mandiva Control Panel or from the command line, using urpmi, e.g. (as root) typing urpmi kernel-desktop-devel-latest

Now open a console, become root and start typing:

cd /usr/src
tar xvzf usb-rndis-lite-0.11.tar.gz
cd usb-rndis-lite-0.11
make clean
make
make install
cd /lib/modules/2.6.22.18-desktop-1mdv/
# (or whatever your kernel version is, you can figure out with uname -r)
cd kernel/drivers/net/usb/
mv rndis_host.ko.gz rndis_host.ko.gz.bak
depmod -ae

Now you have successfully installed the rndis driver. Just to be on the safe side, reboot.

After rebooting, you can type (as a root, in a console) :

modprobe rndis_host
odccm -f -l 6

When you connect your device you'll see a lot of information flowing. If it prints only a single line, open up TCP ports 990 and 7438 on your firewall! Congratulations, you've got a connection!

Making connections start automatically

Make the file /etc/init.d/wm6 with the following contents:

# Created On      : Sat Mar 01 17:18:10 2008
#---------------------------------------------------------------
# chkconfig: 5 50 30
# description: This startup script launches the WM6 support (odccm)
#---------------------------------------------------------------
#
### BEGIN INIT INFO
# Provides: odccm
# Should-Start: $network harddrake haldaemon
# Default-Start: 5
# Short-Description: Launches WM6 support
# Description: This startup script launches the WM6 support (odccm)
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions

ret=0

case $1 in
    start)
        modprobe rndis_host
        gprintf "Starting WM6 connectivity support: "
        odccm &
        success "WM6 Support"
        ret=$?
        echo
        if [ $ret = 0 ]; then
            touch /var/lock/subsys/wm6
        fi
        ;;
    stop)
        gprintf "Stopping WM6 connectivity support: "
        killproc odccm<
        ret=$?
        if [ $ret = 0 ]; then
            success "WM6 support"
            rm -f /var/lock/subsys/wm6
        else
            failure "WM6 support"
        fi
        echo
        ;;
    status)
        status odccm
        ;;
    reload)
        ;;
	restart)
        $0 stop
        sleep 5
        $0 start
        ret=$?
        ;;
    *)
        gprintf "Usage: %sn" "$(basename $0) {start|stop|restart|status}"
        exit 0
        ;;
esac
exit $ret
# wm6 ends here

Then, from a root console, just type chkconfig --level 5 wm6 on to make the connection script load at boot. You can start it manually by typing service wm6 start.

No comments