PCEngines Alix and other AMD Geode single board computers

PCEngines Alix and other AMD Geode single board computers

Back to homepage

28.10.2026: Updated the post with some notes about Soekris net4801, another Geode computer in my collection

PC Engines Alix

The PC Engines Alix series were a popular x86 low power single board computers used in some hobby and science applications. These computers were used in various applications, among others, as unattended network nodes or routers back in their day. You could say they were a spiritual predecessor to the Raspberry Pi and it's clones of today.

Alix 3D

Alix 3D front

I have a few of them and I find them very well designed and pleasant to work with. They are based on AMD Geode CPUs and use the Geode Companion Device as what is often referred to as the "chipset". I've done a bit of work on Geode based devices in the past, for example on the Winterm S10 computers. They are quite interesting systems.

I have four Alix computers in my collection so far. One is the Alix 3D (in the picture above). On the outside it has got a single Ethernet interface, a DC in and a serial port, as well as two USBs. The VGA port is not populated in my version. Inside there are two miniPCI slots dedicated for Wi-Fi cards. In it's day this computer would likely be used to build Wi-Fi access points or bridges, taking advantage of the two wireless cards. The system is stored on the CF card.

Alix 2C

The other three are Alix 2C, an earlier design supporting up to 3 Ethernet interfaces, two miniPCI slots (for similar purposes as in the 3D) two USBs and a serial port. These were also network oriented, likely used to build router-access point combos. I have three of them, one has a 700MHz CPU, the other two 800MHz. Two of these came to me broken, I managed to fix one.

Alix 2C

None of these computers has a VGA port. The 2C has none at all, and on the 3D it's optional and not populated on my unit. The VGA port however, is a mandatory part of the IBM PC specification. Nearly every OS for x86 PCs uses the VGA for it's interface, even if it displays a console. How did PC Engines get away with making a PC compatible machine with no graphics output capability?

The answer lies in the firmware. The Alix series have a very simple BIOS which translates text mode VGA interface into a serial console. This works surprisingly well, even for software which draws complicated interfaces like GNU GRUB. I think that the Alix firmware hooks the standard BIOS VGA routines and emulates them on the serial port. These are enabled as long as the OS does not initialize the serial port.

Operating systems

I've done some work on the Geodes regarding booting various OSes. Over the years I managed to boot (in easiest first order) MS-DOS (easy peasy, needs nothing, runs on everything), Linux (there are some quirks) and NetBSD (i had to disable some conflicting drivers).

On the Alix 2C I last had NetBSD/i386 9.3 running (above), which works nicely on the 700MHz Geode. If it hangs on disk init, you have to disable the viaide driver in userconf. I think I used QEMU to install it to the CF card, as the Alix does not support USB boot.

linux1

For the Alix 3D, I decided to turn it into an SDR receiver. This is still a work in progress, I hope the 800MHz Geode will be able to run rtl_tcp to stream the radio data to the LAN. For now I managed to build a simple Linux 6.6.22 system with lightweight musl-based userspace (which so far includes busybox and bash). On the image above you can see the system running bash on a HP serial terminal. Both the terminal and my PC's serial port have some issues running at 38400 baud, and corrupt characters when large blocks of data are transferred.

As you can see in the free -h output, this system uses only 6MB of memory doing nothing. This is my personal best in terms of minimizing memory usage on Linux.

I've used buildroot to make the system. The config is available here. It boils down to:

    serial --unit=0 --speed=38400
    terminal_input serial; terminal_output serial

Packing the image (kernel, grub and rootfs)

This script packs the full boot disk image into a `disk.img` file. It needs to be run from the buildroot directory. #!/bin/bash IMAGE=disk.img SIZE=2047248 # SECTORS ROOTFS=output/images/rootfs.ext2 if [ ! -f $IMAGE ]; then echo "[*] Creating $IMAGE..." dd if=/dev/zero of=$IMAGE bs=512 count=$SIZE echo "[*] Partitioning $IMAGE..." /sbin/parted $IMAGE -s "mklabel msdos mkpart pri 64M 100%" fi echo "[*] Mounting $IMAGE..." sudo losetup -P -f $IMAGE LOOP=`sudo losetup -a | grep $(realpath $IMAGE) | cut -d: -f1 | head -n1` echo "[i] Mounted $IMAGE as $LOOP." echo -n "[*] Installing GRUB..." sudo ./output/host/sbin/grub-bios-setup -b ./output/build/grub2-2.12/build-i386-pc/grub-core/boot.img -c ./output/images/grub.img -d . $LOOP if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR"; exit 1; fi echo "[*] Copying rootfs" sudo dd if=$ROOTFS of=${LOOP}p1 bs=512 status=progress echo "[*] Detaching $LOOP" sudo losetup -d $LOOP echo "[i] $IMAGE stats:" /sbin/fdisk -l $IMAGE

Update: 13.09.24

I updated the config to add a few packages to use this box as an SSH jumphost. Among other things it has dropbear, openssh client and darkhttpd.

Upon further setup I noticed that the ethernet interface is not present. The Alix.3D uses a VIA VT6105M chip (it's under the WiFi card). This can be fixed by enabling Via RHINE chipset drivers, which are not enabled by default on Linux 6.6.22.

The steps to do this are

make linux-menuconfig
* search for RHINE and enable CONFIG_VIA_RHINE
it is located in Device Drivers/Network device support/Ethernet driver support/VIA devices/VIA Rhine support

Soekris Engineering net4801

The Soekris net4801 is another Geode-based single board computer in my collection. This is a peculiar one, since it has a full-size PCI slot. That's the horizontal connector. Not only it has 3 ethernet interfaces, Soekris also made an additional 4-port Fast Ethernet card that would plug into the slot (and fit a matching, extended chassis). A total of 7 100Base-T ports and one miniPCI slot made the net4801 a very popular machine for all sorts of servers. Back in it's heyday it was often used for PTP servers and firewall/router machines.

The net4801 is run by an older 266MHz Geode, branded National Semiconductor (before they sold off the Geode business to AMD in 2003).

The usual boot device is the onboard CF-card. There is a 44-pin IDE connector if you with to use a laptop mIDE hard disk (or a second CF card).

The PCI slot is standards compliant, although installing cards may be difficult due to unusual mounting method. Soekris' card had standoffs and fit into their special chassis. You can install any PCI card in there if you fix it or make some supports for it.

net4801 bootloader log and cpuinfo By default, BIOS (monitor) is at 19200 bauds. comBIOS ver. 1.28 20050529 Copyright (C) 2000-2005 Soekris Engineering. net4801 0128 Mbyte Memory CPU Geode 266 Mhz Slot Vend Dev ClassRev Cmd Stat CL LT HT Base1 Base2 Int ------------------------------------------------------------------- 0:00:0 1078 0001 06000000 0107 0280 00 00 00 00000000 00000000 0:06:0 100B 0020 02000000 0107 0290 00 3F 00 0000E101 A0000000 10 0:07:0 100B 0020 02000000 0107 0290 00 3F 00 0000E201 A0001000 10 0:08:0 100B 0020 02000000 0107 0290 00 3F 00 0000E301 A0002000 10 0:18:2 100B 0502 01018001 0005 0280 00 00 00 00000000 00000000 0:19:0 0E11 A0F8 0C031008 0117 0280 08 38 00 A0003000 00000000 11 1 Seconds to automatic boot. Press Ctrl-P for entering Monitor. NSC DP83815/DP83816 Fast Ethernet UNDI, v1.03 Copyright (C) 2002, 2003 National Semiconductor Corporation All rights reserved. Pre-boot eXecution Environment PXE-2.0 (build 082) Copyright (C) 1997-2000 Intel Corporation PXE-E61: Media test failure, check cable PXE-M0F: Exiting MacPhyter PXE ROM. No Boot device available, enter monitor. comBIOS Monitor. Press ? for help. > `/proc/cpuinfo` from Linux 6.6.22 # cat /proc/cpuinfo processor : 0 vendor_id : Geode by NSC cpu family : 5 model : 4 model name : Geode(TM) Integrated Processor by National Semi stepping : 0 cpu MHz : 266.622 physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fdiv_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu tsc msr cx8 cmov mmx cpuid bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown bogomips : 533.24 clflush size : 32 cache_alignment : 32 address sizes : 32 bits physical, 32 bits virtual power management: # uname -a Linux mordecai-ng 6.6.22mordecai-polprog #1 SMP PREEMPT_DYNAMIC Wed Aug 13 11:09:50 CEST 2025 i586 GNU/Linux dmesg is [here](soekris-dmesg.log)

From my experience, the BIOS is quite picky and does not boot some CF cards. As seen in the log, there is a PXE option too.

Running Linux

I was running a Linux 6.6.22 system based on Buildroot v2024.02.1. The 6.6.22 did not see the CF card until I enabled the CONFIG_PATA_SC1200 option. The kernel would also hang unless you pass it the idle=poll bootarg. This took me some time, I dont remember how I found out the comment from 2006 in linux/drivers/clocksource/scx200_hrt.c:

   2/*
   3 * Copyright (C) 2006 Jim Cromie
   4 *
   5 * This is a clocksource driver for the Geode SCx200's 1 or 27 MHz
   6 * high-resolution timer.  The Geode SC-1100 (at least) has a buggy
   7 * time stamp counter (TSC), which loses time unless 'idle=poll' is
   8 * given as a boot-arg. In its absence, the Generic Timekeeping code
   9 * will detect and de-rate the bad TSC, allowing this timer to take
  10 * over timekeeping duties.
  11 *
  12 * Based on work by John Stultz, and Ted Phelps (in a 2.6.12-rc6 patch)
  13 */

The bootarg can be passed in GRUB config. This config also enables serial port output, taking over the VGA emulation by Soekris' BIOS:

grub.cfg serial --unit=0 --speed=38400 terminal_input serial; terminal_output serial set default="0" set timeout="5" menuentry "Mordecai/net4801" { linux /boot/bzImage root=/dev/sda1 rootwait console=ttyS0,38400 idle=poll }

I put some significant amount of work to slim down the 6.6.22 kernel so it runs nicely on the puny 266MHz CPU and 128MB of RAM. The kernel config can be found here

I'm using the same pack-image.sh script as before.

Back to homepage