Recent Linux on Intel IXP4xx Systems
Latest test on 2021-06-21 (kernel v5.13-rc1)

Avila

Avila 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 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.

NSLU2

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.

Vulcan

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 toolchain 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

OpenWRT TODO

Links