Running Debian on ERLite-3

Updated: 25 Oct 2015


EdgeRouer Lite (ERLite-3), Cavium OCTEON SoC
MIPS64 500MHz 2-core

Binaries for Debian

These kernels are for both NFS boot and USB boot. The supported file systems are ext3, ext4, fuse and nfsroot.

Serial Console Setup

  1. Plug off the power cable.
  2. Setup your CISCO console cable.
  3. Open serial terminal such as minicom. The serial configuration is 115200bps 8N1. Don’t forget turning off HW/SW flow controls.
  4. Plug in the power cable. Then the boot loader will put messages.
  5. Send Control-C to hook the boot loader. Then you’ll see the prompt:
Octeon ubnt_e100# 

USB Stick Setup

Prior to USB boot, you have to do following steps. If you don’t want to use USB boot, please ignore this section.

  • Detach the USB stick from ERLite3.
  • Mount the USB stick on your PC. You’ll see two partitions. The first one is FAT and the second one is ext3.
  • On the first partition, replace the Linux kernel file “vmlinux.64” with new version.
  • On the second partition, erase all existing files, then extract debian rootfs.

USB Boot (single user mode)

Go to the serial console and type:

fatload usb 0 $loadaddr vmlinux.64
bootoctlinux $loadaddr coremask=0x3 root=/dev/sda2 rootdelay=15 rw single

You’ll see the debian init process in your serial console. Initially, password for root is blank. After creating users, you can remove “single” keyword from the boot command line.

Network Boot (single user mode)

Prior to network boot, you have to setup tftp server, NFS server and optionally DHCP server.

If you use dhcp server,

tftpboot $loadaddr vmlinux
bootoctlinux $loadaddr coremask=0x3 root=/dev/nfs rw ip=dhcp single

Or manually, [ is gw, is tftp/nfs server, 192.168.3 is ERLite-3]

setenv serverip
setenv ipaddr
tftpboot $loadaddr vmlinux
bootoctlinux $loadaddr coremask=0x3 ip= root=/dev/nfs rw nfsroot=,tcp,vers=3 single

Saving Boot Settings

After confirming boot process, you can save your favorite boot command lines.

setenv bootcmd 'dhcp;tftpboot $loadaddr vmlinux;bootoctlinux $loadaddr coremask=0x3 root=/dev/nfs rw ip=dhcp'

Restoring Boot Settings

You can restore boot command lines with the initial value.

setenv bootcmd 'fatload usb 0 $loadaddr vmlinux.64;bootoctlinux $loadaddr coremask=0x3 root=/dev/sda2 rootdelay=15 rw'

Avoiding USB Problem 1

Even on official 2.6.32-UBNT kernel, you probably get many errors with any USB devices except the flash memory which comes from the board. I found that using USB1.1 HUB avoids this problem.

Actually, is configured without CONFIG_USB_EHCI_HCD. In other words, that kernel doesn’t have USB2.0 functionality though chip supports it. [see discussion]

I guess ERLite-3 board has electric problem to support high transfer speed. For me, some CAT5e flat cables are not capable to support 1000Mbps link with ERLite-3. This suggests ERLite-3 is electrically noisy.

Avoiding USB Problem 2

In addition, you’ll get “parent hub has no TT’” errors in kernel 3.11+. Here is a one-line workaround for this problem:

*** ./drivers/staging/octeon-usb/octeon-hcd.c.orig
 --- ./drivers/staging/octeon-usb/octeon-hcd.c
 *** 696,699 ****
 --- 696,700 ----
         hcd->uses_new_polling = 1;
 +       hcd->has_tt = 1;
         priv = (struct octeon_hcd *)hcd->hcd_priv;

I’m not sure whether the device really has TT, but it works with USB devices.

For more information, see http://www.serverphorums.com/read.php?12,274616

USB Extension Example

DSC_0012My ERLite-3 has now USB1.1 hub! I punched a hole on the box. Don’t worry, I have another ERLite-3.

Suitable USB Stick

As Gentoo people says, Sandisk Cruzer Fit 16GB works for me. It costs less than $10.

Bus 001 Device 002: ID 0781:5571 SanDisk Corp. Cruzer Fit

Toolchain for Kernel

mips64-unknown-linux-gnu-” cross gcc and binutils work fine to build linux kernel. If you don’t want to build the cross toolchain by yourself, you can download it from cnusers. It takes a few days to complete registration.

Userland GCC

Debian has 32-bit userland on MIPS port. Thus by defaut, “gcc” generates 32-bit code on the platform. To compile 64-bit applications, install “gcc-multilib” and “libc6-dev-mips64” packages, then call gcc with options such as “-march=mips64r2 -mabi=64“.


For Japanese users: See also this post

Any comments and questions are welcome!