Seabright Technology Header Image

Using CDC ACM devices on the N800/N810

The CDC ACM is a standard profile for USB to serial adapters such as the one built in to the  u-blox range of GPSs. This page has instructions and drivers for plugging such a device into a  Maemo  Diablo based device such as the Nokia  N800 or  N810.

Quick start:

  • Download diablo-usb-drivers-1.tar.gz
  • Copy it onto your N800 (try  scp or a SD card)
  • Log in as  root
  • Extract the tarball
  • Change to lib/modules/2.6.21-omap1/kernel/drivers/usb/class
  • Install the module using insmod cdc-acm.ko
  • Enable  host mode on the USB port using echo host > /sys/devices/platform/musb_hdrc/mode
  • Plug in your device over  a suitable cable. You may need a powered hub in between.
  • The device should appear as /dev/ttyACM0. Check dmesg if it doesn't

Drives for the FTDI range and other USB to serial adapters are also included.

Building the modules without scratchbox

Scratchbox is clever but an overkill for compiling the kernel. If you have a Debian/Ubuntu? based system then you can make do with just the toolchain.

The standard instructions  are on The Debian packages are in

In particular you want the CodeSourcery 2005q3 release at

Installing this should give a GCC toolchain in /scratchbox/compilers/cs2005q3.2-glibc2.5-arm. Add this to your path using

export PATH=$PATH:/scratchbox/compilers/cs2005q3.2-glibc2.5-arm/bin

Test it by running arm-linux-gcc

The kernel source is in

Download the  dsc,  diff, and  original kernel source

Unpack using dpkg-source

dpkg-source -x kernel-*.dsc

This should give you a kernel source tree in kernel-source-diablo-2.6.21/kernel-source/. Change to that directory.

The rest is downhill from here. Pull in the default configuration

make nokia_2420_defconfig

Bring up the configuration UI and select the drivers that you want

make menuconfig

Make and install the modules in a local directory

make INSTALL_MOD_PATH=n800 modules modules_install

List of modules

For reference the tarball contains the following modules:

  • net:
    • ipv4/tunnel4.ko
    • ipv6/xfrm6_mode_transport.ko
    • ipv6/xfrm6_mode_tunnel.ko
    • ipv6/sit.ko
    • ipv6/xfrm6_mode_beet.ko
    • ipv6/ipv6.ko
    • ipv6/netfilter/ip6_tables.ko
    • ipv6/netfilter/ip6table_filter.ko
  • arch:
    • arm/plat-omap/omap_sec.ko
    • arm/mach-omap2/omap2_hs.ko
    • arm/mach-omap2/observability.ko
    • arm/mach-omap2/peeknpoke.ko
    • arm/mach-omap2/snapshot.ko
  • fs:
    • ext2/ext2.ko
    • ext3/ext3.ko
    • jbd/jbd.ko
    • mbcache.ko
  • drivers/net:
    • wireless/pc2400m/pc2400m.ko
  • drivers/char:
    • hw_random/rng-core.ko
    • hw_random/omap-rng.ko
  • drivers/usb:
    • gadget/g_ether.ko
    • gadget/g_file_storage.ko
    • gadget/gadgetfs.ko
    • misc/sisusbvga/sisusbvga.ko
  • drivers/usb/serial:
    • serial/io_ti.ko
    • serial/digi_acceleport.ko
    • serial/ipaq.ko
    • serial/visor.ko
    • serial/omninet.ko
    • serial/empeg.ko
    • serial/belkin_sa.ko
    • serial/kl5kusb105.ko
    • serial/aircable.ko
    • serial/funsoft.ko
    • serial/airprime.ko
    • serial/cypress_m8.ko
    • serial/hp4x.ko
    • serial/cp2101.ko
    • serial/navman.ko
    • serial/mct_u232.ko
    • serial/keyspan.ko
    • serial/kobil_sct.ko
    • serial/ir-usb.ko
    • serial/whiteheat.ko
    • serial/mos7840.ko
    • serial/safe_serial.ko
    • serial/mos7720.ko
    • serial/io_edgeport.ko
    • serial/ark3116.ko
    • serial/ftdi_sio.ko
    • serial/garmin_gps.ko
    • serial/keyspan_pda.ko
    • serial/pl2303.ko
    • serial/sierra.ko
    • serial/option.ko
    • serial/ti_usb_3410_5052.ko
    • serial/usbserial.ko
    • serial/cyberjack.ko
    • serial/ipw.ko
  • drivers/usb/class:
    • class/cdc-acm.ko
    • class/usblp.ko