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:
- Temperature: -40°C to +85°C
- Humidity (non-condensing): 20% to 90%
- MTBF (mean time before failure): 60 Years at 55°C
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.
- Clone the latest OpenWRT git tree
- cd openwrt
- make menuconfig
- Target system Intel IXP4xx
- Target profile [YOUR DESIRED ROUTER]
- Exit and save config
- (build build build build)
- Usable images appears in
- You want to place the zImage in the linux partition of your flash and the squashfs in the rootfs partition.
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.
- OpenWrt big endian toolchain
- My ixp4.mak Makefile
- rootfs-ixp4xx.cpio.gz IXP4xx OpenWrt rootfs on cpio.gz format (2022-09-10)
- rootfs-ixp4xx.tar.gz IXP4xx OpenWrt rootfs on tar.gz format (2022-09-10)
- ixp4xx-firmware.tar.gz with firmware for the NPE:s
IXP4xx Kernel TODO
Switch to using device tree only (fixed for kernel v5.18)
- Define some static clocks in the device tree
- Get rid of the no-clock framework hacks in drivers/usb/gadget/udc/pxa25x_udc.c