Recent Linux on Intel IXP4xx Systems
Latest test on 2022-09-10 (kernel v6.0-rc1)


Cambria IXP43x reference design

The IXP4xx is a series of XScale ARM chips from Intel that was created as part of their legacy when acquireing Digitals StrongARM line. This SoC has an ARMv4T ISA. It can sometimes be hard to find the right tools and no major distributions support the ARMv4 ISA. The typical userspace is built using OpenWrt or OpenEmbedded.

As of june 2021 we are working to modernize the IXP4xx port in the Linux kernel to use device tree and modern drivers for the entire set of systems supported by the Linux kernel boardfiles.

A major reason why IXP4xx silicon is still produced and deployed is the operating conditions. If you look at for example the Gateworks Cambria GW2358-4 network processor (apparently still for sale for new designs in 2017) you notice the strictly military operating conditions:

It is pretty easy for an experienced ARM kernel hacker to get any of these devices running with the latest kernel and full hardware support. Most of the heavy lifting is already done and landed upstream.

The UARTs on the IXP4xx uses 115200 baud.

Getting OpenWRT up on it

It is pretty straight forward to build the latest OpenWrt for IXP4xx.


The Linksys NSLU2 also known as "the slug" is a NAS box which has ethernet and two USB 2.0 plugs to run USB disk enclosures for storage. The simplicity of this platform created a huge hobbyist hacking community in the mid-2000s. I booted this from device tree on 2021-11-30 for a test, this is the dmesg!


A zImage for the Vulcan an IXP425-based single-board computer.

Compiling the kernel

This mostly details how to get an upstream bleeding-edge kernel compiled and booting on the Gemini devices.

I use this big-endian ARMv4 GCC 11.3.0 toolchain for XScale that was created using OpenWrt.

See obtaining an ARMv4 Toolchain for general help on old toolchains.

You can use my makefile and initramfs to get to a prompt. Copy the rootfs-gemini.cpio to your $HOME directory, then put the gemini.mak file in your Linux base directory and type:

  make -f gemini.mak config && make -f gemini.mak build

The initramfs config option to boot from a RAM resident busybox will take precedece, so if you want to use OpenWRT as rootfs you need to disable that in the kernel build.

IXP4xx Kernel TODO