Ubuntu (Dapper) on the PC Engines Alix 3D1 October 25, 2009

The Alix 3D1 is a small PC with an LX700 AMD Geode cpu. It costs $75 USD and can, with enough patience, run just about any mainstream Linux OS that you can think of. That is thanks to the AMD Geode processor, which is i386/x86 compatible, so you won’t need any special ARM distributions or the like to get the thing going.
This is a tutorial on installing specifically the Ubuntu Dapper distro on the Alix 3D1 with the help of a Windows PC.
For some reason mainstream Ubuntu installs after Dapper have issues completing the installation procedure and will likely cause problem for you. If you are able to install something released after Dapper, please let me know!
Where to buy an Alix 3D1
First of all, I’ll post some info about where to get the Alix 3D1. It is made by a company called PC Engines and there are 3 different versions of the board. The cheapest is the 3D1 ($75).
This tutorial also should apply to the 3D2 model. The 3D3 model has an Award BIOS and a VGA port, so things might be a little different with that one (and likely easier). Available distributors:
What you need to get with the Alix 3D1
The 3D1 comes in a cardboard box with nothing but the motherboard and some anti-static packaging, so you’re going to need to order a few accessories with it too:
- A power supply
- An enclosure. You can’t go wrong with the metal waterproof one, it’s very nice.
- If you’re planning on doing 802.11, you’ll want the type-N coaxial pigtails for any NICs you are adding to the 3D1′s 2 miniPCI slots.
- A Compact Flash (CF) card preferably about 4GB or larger
Total cost for the Alix 3D1, power supply, waterproof closure with mounts and 2 type-N 802.11 pigtails was only $146.90 USD.
Accessing the Serial Console

First thing you will need to do is to get access to the console on the 3D1. I’m using Windows, so the best terminal program out there (AFAIK) is PuTTY. You can download PuTTY from:
After you have PuTTY installed, you will need a serial cable with a null-modem adapter. Connect the serial cable with null-modem to the 3D1 to your Windows PC and start up PuTTY. Select ‘Serial’ for connection type and put the baud rate at 38400 and type in the COM port (COM[1-X]). 38400 is the default baud rate of the 3D1.
PC Engines ALIX.3 v0.99 640 KB Base Memory 130048 KB Extended Memory 01F0 Master 848A SAMSUNG CF/ATA Phys C/H/S 992/16/32 Log C/H/S 992/16/32
Booting Ubuntu (Dapper) via PXE
The best way I’ve found to load a Linux distro on the box is to use the built-in PXE boot functionality of the BIOS. When the BIOS on the 3D1 boots, it does a DHCP broadcast to find any available PXE boot servers out there. You don’t have to worry about other DHCP servers on your network responding unless they are especially setup to do PXE. PXE uses your specialized DHCP server + TFTP (setup below) to bootstrap the device. If everything is setup correctly below, your DHCP server responds and provides an image for the device to download and run (bootstrap). After the image is downloaded and executed, then the fun begins.
This seems like a lot of stuff to get configured to do this, but luckily, there is some software that makes this pretty straight foward. The best utility I’ve found to do this a Windows program called TFTPD32:
You will first need to prepare a directory on your Windows PC for the TFTP server to serve out a kernel and a boot image. Create a directory on your windows machine for the files. I called mine C:\tftpd.
Downloading and preparing Ubuntu Dapper netboot.tar.gz
Download the following package to your C:\tftpd directory:
You will need a program to unzip .gz and extrat .tar files. A great one for Windows is 7-Zip, which is available here:
After the archive is in the directory, extract the .gz, then the .tar underneath the c:\tftpd directory. After this is done, you’re ready to prepare your TFTP and DHCP servers.
Setting up TFTPD32
You will need to setup your TFTPD32 application as follows. You are going to need to enable ‘PXE Compatibility‘ as well as make sure that DHCP and TFTPD servers are enabled. Also, be sure to set the path correctly for your ‘base directory‘ as shown, as well as setup your new DHCP server to give normal addresses on your network. The DHCP server that you setup here will serve up the correct boot image when an address is given out to the 3D1. There is an area to to input what image you want to provide to new DHCP hosts. In this textbox under the DHCP tab of TFTPD32, enter ‘pxelinux.0‘. Make sure that your default gateway, actual DNS server, subnet and IP ranges all make sense in the configuration. If you have problems getting PXE booting to work, be sure to look at your logs tabs. They are invaluable for debugging what is wrong.

Starting up the Alix 3D1!
When you first startup the 3D1, you are going to need to modify the BIOS config to allow PXE booting. To do this, type ‘S’ when the 3D1 is testing memory. This should bring up a menu of options. To toggle PXE booting, type ‘N’, then save the configuration to the BIOS.
PC Engines ALIX.3 v0.99 640 KB Base Memory 130048 KB Extended Memory 01F0 Master 848A SAMSUNG CF/ATA Phys C/H/S 992/16/32 Log C/H/S 992/16/32 BIOS setup: (9) 9600 baud (2) 19200 baud *3* 38400 baud (5) 57600 baud (1) 115200 baud *C* CHS mode (L) LBA mode (W) HDD wait (V) HDD slave (U) UDMA enable (M) MFGPT workaround (P) late PCI init *R* Serial console enable *E* PXE boot enable (X) Xmodem upload (Q) Quit Save changes Y/N ? Writing setup to flash...
When the 3D1 boots back up it, should start checking for a DHCP server, see the TFTPD services you have running, grab an available IP address from your DHCP server and start to load the kernel.
PC Engines ALIX.3 v0.99 640 KB Base Memory 130048 KB Extended Memory 01F0 Master 848A SAMSUNG CF/ATA Phys C/H/S 992/16/32 Log C/H/S 992/16/32 Intel UNDI, PXE-2.0 (build 082) Copyright (C) 1997,1998,1999 Intel Corporation VIA Rhine III Management Adapter v2.43 (2005/12/15) CLIENT MAC ADDR: 00 0D B9 13 CD 7C CLIENT IP: 192.169.0.20 MASK: 255.255.255.0 DHCP IP: 192.169.0.250 GATEWAY IP: 192.169.0.1
Monitoring the TFTPD32 Logs
You should now see some activity in the TFTPD32 logs. The following would be a good sign:
Read request for file <pxelinux.cfg/default>. Mode octet [25/10 17:20:35.078] OACK: <tsize=1821,> [25/10 17:20:35.078] Using local port 2360 [25/10 17:20:35.078] <pxelinux.cfg\default>: sent 4 blks, 1821 bytes in 0 s. 0 blk resent [25/10 17:20:35.140] Connection received from 192.169.0.20 on port 57099 [25/10 17:20:35.140] Read request for file <ubuntu-installer/i386/boot-screens/boot.txt>. Mode octet [25/10 17:20:35.140] OACK: <tsize=301,> [25/10 17:20:35.156] Using local port 2361 [25/10 17:20:35.156] Connection received from 192.169.0.20 on port 57100 [25/10 17:20:35.234] <ubuntu-installer\i386\boot-screens\boot.txt>: sent 1 blk, 301 bytes in 0 s. 0 blk resent [25/10 17:20:35.234] Read request for file <ubuntu-installer/i386/boot-screens/splash.rle>. Mode octet [25/10 17:20:35.250] OACK: <tsize=8023,> [25/10 17:20:35.250] Using local port 2362 [25/10 17:20:35.250] TIMEOUT waiting for Ack block #0 [25/10 17:20:50.343]
Ok, here’s the tricky part
Ubuntu will by default try and send the console output to a VGA source. Since there is not a VGA source on the 3D1, you are going to have to do tell it to send the console to the serial port. Problem is, you cannot see that it is currently at a boot prompt asking you what to do. In the TFTPD server logs, you should be able to see that it has grabbed the pxelinux.0 file and is waiting on something. This is your queue!. Type into PuTTY the following (you will not be able to see the output of your typing):
linux console=ttyS0,38400
..and hit Enter.

Within about 10 seconds, you should see the console outputting to your PuTTY window and the kernel booting. Your 3C1 should now have a valid IP, Netmask, router and DNS server configuration and it should continue to install Ubuntu from the Ubuntu network archives server. The rest is a piece of cake!
Credits
The following site(s) were very helpful in creating this tutorial
What are you going to use this for?
It’s going on my roof so that I can keep real short 802.11 coaxial cables from my antennas.
to get this to work with Karmic rather than typing
linux console=ttyS0,38400
you need to press TAB then enter this
console=ttyS0,38400
I don’t think you need the space at the start but it won’t hurt.
Where are you getting the Alix boards for $75? :)
mini-box.com was selling them for $75 a month ago.. Looks like they are now out of them =( You can still find them on eBay for that though.
Hi Rob,
Just to let you know I needed to type:
linux console=ttyS0,38400 initrd=initrd.gz
to get the Alix board to boot properly on 10.04.1 (Lucid) otherwise it would hang as it couldn’t find a root device.
I use you howto for a Alix 2D2.
To make it work I had to use the v3.35 of http://tftpd32.jounin.net/ and extract all the linux files in a shorter path from c:\ (otherwise some files couldn’t be loaded at startup on the Alix board.
Thkx for the help, it works fine now
im having this error when trying:
Read request for file . Mode octet [24/04 20:06:56.699]
File : error 2 in system call CreateFile O sistema não conseguiu localizar o ficheiro especificado. [24/04 20:06:56.699]
Connection received from 10.0.0.22 on port 57090 [24/04 20:06:56.709]
Read request for file . Mode octet [24/04 20:06:56.719]
File : error 2 in system call CreateFile O sistema não conseguiu localizar o ficheiro especificado. [24/04 20:06:56.729]
This is perfect for getting Ubuntu on Alix the easy way…
I’ve installed it right on the CF from a serial console using a PXE server (Serva32)that took me 10 minutes to set-up !
get the software and how-to here
http://www.vercot.com/~jeoss/