This page is about using ARM machines as diskless workstations (or more general, as LTSP clients).

At first, this page will only be about the Efika MX plattform, other hardware needs available hardware samples first. Contact me if you are able to help.


In documentation phase (aka in development). In theory (and practice) Debian Edu is Debian, Debian supports ARM processors, LTSP is processor agnostic and Debian runs on the Efika MX. In practise, this shall be shown here.

Using the Efika MX as an LTSP client


The Efika MX has current hardware specs, no movable parts, a case which is smaller than a DVD case (160x115x20mm) and is low on power-consumption: 4 Watts for the external power supply (when the device is powered off), 9 Watts for running idle and 11 Watts running under full (CPU) load. So it should be a pretty nice LTSP client :-)

Setting up an ARM LTSP chroot

Note: the following examples use Squeeze, which has not been released yet. So this shouldn't be used in production :-)

To be described here. There are two approaches: build it on an armel machine (like the Efika) or using qemu.

the QEMU approach

Using qemu-user-static on i386, cross-architecture building for armel is rather simple, the steps are:

# apt-get install qemu-user-static ltsp-server
# ltsp-build-client --arch armel

This may require adding the --kernel-package parameter, as no default kernel exists for armel. As a workaround, you could specify "--kernel-package $any_package_name", and then manually install a kernel.

Since squeeze is not yet released, some packages may fail to install properly. To get a smaller LTSP chroot, add "--early-packages ltsp-client-core".

on the Efika MX

Requirements: a working Debian squeeze install, with the pre-installed OS you can use debootstrap to create one.

# apt-get install ltsp-server
# ltsp-build-client 


Network booting the Efika MX

The bootloader used on the Efika MX is called u-boot. Since the Efika MX uses the asix USB network interface and USB support in u-boot is rather new, and so it's broken for this piece of hardware. Future release of u-boot might fix this, but it's not clear if (or rather, how...) u-boot can be updated.

So the options available today are basically to load the kernel via SD card or the built-in flash, or load a kernel using kexec, which then downloads the real kernel and initramfs over the network and executes the new kernel (proof of concept initramfs-tools hook and script) . (And of course fixing u-boot or using another bootloader...) Per default the Efika MX boots from SD card if available, else from built-in flash.

Setting up the kernel for LTSP

download the boot and modules tarballs from:

  # move to the LTSP armel dir
  cd /opt/ltsp/armel

  # extract the uImage
  tar xvpf boot- --lzma

  # extract the modules and firmware
  tar xvpf modules- --lzma

  # get the kernel image out of the uImage file
  dd if=boot/uImage of=/opt/ltsp/armel/boot/vmlinuz- \
      bs=64 skip=1

  # get initramfs-tools hook that adds the usb network driver
  # (manual_add_modules asix)
  wget \
      -O /opt/ltsp/armel/usr/share/initramfs-tools/hooks/
  chmod +x /opt/ltsp/armel/usr/share/initramfs-tools/hooks/usbnet

  ltsp-chroot --arch armel update-initramfs -c -k

  # wrap the initramfs in uboot headers
  mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 \
      -n uInitrd -d boot/initrd.img- boot/uInitrd

Installing the LTSP kernel on a SD card

  mount /dev/mmcblk0p1 /mnt
  cp /opt/ltsp/armel/boot/uImage /opt/ltsp/armel/boot/uInitrd /mnt/
  umount /mnt

Configuring and Running from U-Boot

Power on the device and hit space quickly to get to the uboot prompt.

Set some variables at the uboot prompt (adjust for your network settings, be wary of line breaks):

setenv bootdelay 10
setenv bootargs_base_nfs 'setenv bootargs console=ttymxc0,115200 console=tty1'
setenv nfs_boot 'run bootargs_base_nfs bootargs_nfs'                         
setenv boot_nfs 'run base_cmds;mmcinit;fatload mmc 0:1 ${loadaddr} ${kernel}; fatload mmc 0:1 0xa2000000 ${initramfs}; bootm ${loadaddr} 0xa2000000'
setenv bootargs_nfs 'setenv bootargs ${bootargs} root=/dev/nfs nfsroot= console=ttyS0,115200 boot=nfs ip=dhcp ${bootinfo};run boot_nfs'

save the configuration:


to boot from the uboot prompt (how to make default?):

run nfs_boot

Installing the LTSP kernel on built-in flash