RATOC CFU1U USB Host adapter on HP iPAQ hx4700

(13 December 2006)

The RATOC CFU1U adapter allows certain PDAs to act as a USB host. By default, Linux doesn't really understand what it is; these instructions should help you compile the correct kernel modules to support this card, opening up the possibility of using your PDA with mass storage devices and various other USB dongles you might have.

Note that a PDA cannot support the power requirements of some devices, so depending on what you're trying to run, you might need an externally powered USB hub. Small things, like most pen drives, seem to work fine.

Prerequisites

The following assumes you're already running Familiar Linux on your iPAQ hx4700. I'm currently running Familiar 0.8.4 (but you must use the SDG bootloader; note that the official Familiar instructions do not cover installation on an hx4700, so please look at all instructions provided via both those links if you are going to install. If in doubt, ask questions, or you may kill your iPAQ, and it won't be my fault).

You need a toolchain capable of creating binaries for the hx4700. Download the appropriate arm-linux-gcc.

You'll also need kernel sources. Grab the latest "-hh" version; for reference, I used 2.6.16-hh3 when writing this. The CFU1U module is included as part of the standard kernel codebase, but it is not selected by default.

Compilation and installation

Take a look at kernel compilation instructions; read the instructions, and make sure you're comfortable with what you're about to try. Note that, if your compile goes the same way as mine, you will have to install a new kernel image, even if you're compiling modules for the same kernel version as you're currently running.

The default kernel config is close to what you want, but not quite. From make menuconfig, I changed the following options, and left all others as they were. I've included module names, where appropriate, in brackets:

Required: M - Support for Host-Side USB (usbcore)
Optional: Y - USB device filesystem
Optional: Y - USB selective suspend/resume and wakeup
Required: M - SL811HS HCD support (sl811_hcd)
Required: M - CF/PCMCIA support for SL811HS HCD (sl811_cs)
Optional: M - USB Mass Storage Support (usb-storage)
Optional: M - USB Human Interface Device (usbhid)
Optional: Y - HID input layer support
Optional: M - USB Serial Converter support (usbserial)
Optional: Y - USB Generic Serial Driver

Follow the install instructions as per the kernel instructions page, and you should be good to go.

Successful output

On a successful install, I get the following output from dmesg on insertion of the CFU1U card:

pccard: PCMCIA card inserted into slot 0
pcmcia: registering new device pcmcia0.0
usbcore: registered new driver usbfs
usbcore: registered new driver hub
sl811: driver sl811-hcd, 19 May 2005
sl811_cs: index 0x04: Vcc 3.3, irq 92, io 0xc4820000-0xc4820007
sl811-hcd sl811-hcd: SL811HS v1.5
sl811-hcd sl811-hcd: new USB bus registered, assigned bus number 1
sl811-hcd sl811-hcd: irq 92, io mem 0xc4820000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected

On inserting a pen drive into the USB slot, I then get the following output as I'd expect:

usb 1-1: new full speed USB device using sl811-hcd and address 2
usb 1-1: configuration #1 chosen from 1 choice
SCSI subsystem initialized
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
  Vendor: CREATIVE  Model: NOMAD_MUVO        Rev: 0001
  Type:   Direct-Access                      ANSI SCSI revision: 04
usb-storage: device scan complete

That looks good to go. For completeness, the following commands were required for access to the filesystem:

modprobe sd_mod
mount /dev/sda1 /media/card/

Resources