Coreboot is awesome

Two weeks ago I was updating Award BIOS on Alix.1c board and failed — computer bricked 🙁

But there was a way to get it to working state again — PC Engines (vendor or Alix boards) has LPC1a adapter with extra BIOS chip. I contacted them and few days later it arrived here (I will send it back as it is loaned).

Use is simple: plug into LPC connector, boot machine, reprogram on-board flash chip, power off, unplug lpc1a, power on. But I decided to make a use of it and decided to migrate from Award BIOS to coreboot with some extra payload.

As I use only Linux on Alix I tried FILO first. It booted to prompt but refused to see files on CompactFlash card. GRUB v2 supports coreboot but did not run so I tried SeaBIOS instead. And that was it — clean, fast boot to GRUB from CF card.

There is one problem which I did not solved yet: VGA BIOS rom does not work for me. But I will rather do not spend time on it as framebuffer under Linux works without it and I do not plan to run FreeDOS or other systems which would do VGA BIOS calls. Other option is to use SGABIOS which redirects input/output from video card to serial port — works fine.

But the nicest moment was still before me. When I disabled all debug output in coreboot and SeaBIOS I got HUGE improvement in boot time. Linux was loading in a time which previously was needed for Award BIOS to make a beep sound…

New multi I/O card installed

Some days ago I exchanged my MOS9835 based I/O card with newer version based on MOS9845. Old one had one parallel port (which I never used) and two serial ports. New one do not have parallel port but has 6 serial ports instead. Why so much?

The answer is simple — more devices on desk require more ports. I could go into USB-serial adapters and buy bunch of them and create set of udev rules to make them stick with device node names. But I read too many stories when such adapters works when 2 of them are used but adding 3rd breaks config. So I bought PCI card.

Is it useful? Yes, it is. Does it add new problems? Few, but simple ones.

First problem is to get proper numbering of ports. As mainboard used in desktop has one serial port already I wanted it to be /dev/ttyS0 and additional ones to be /dev/ttyS[1-6]. But fun starts in kernel config…

There are few options which controls amount of serial ports in total (named CONFIG_SERIAL_8250_NR_UARTS) and amount of runtime registered ports (named CONFIG_SERIAL_8250_RUNTIME_UARTS). To get sane numbering I had to play with those values a bit. I set NR_UARTS to “10” (just in case) and then RUNTIME_UARTS to “7” so ports works like I wanted.

Next thing is guessing which port is which ttySx node. I did that by connecting devices and checking with “picocom” which one is which. Now connectors are signed with number on one side 😀

Serial cables needs to be described

Last thing was adding names to device nodes as it is easier to use /dev/ttyALIX then remember that Alix is connected to /dev/ttyS2 port. So currently I have this config:

Port device
ttyS1 BeagleBoard
ttyS2 Alix.1c
ttyS3 not used yet
ttyS4 at91sam9263ek
ttyS5 atngw100
ttyS6 edb9301

I use also serial cable with BUG but as it has female connector I use USB adapter with it. Have to buy female->male cable for it so it will use ttyS3…

This is how it looks on desktop side:

Connectors jungle in my desktop

And one more thing — few readers suggested to use cards which adds 8 serial ports. I have to admit that I was thinking about it but decided against it. I already have lot of cables under desk and adding such hydra (card connector -> 8 cables with DB9 connector) would make it even harder to organize.

Next cables to organize would be network — each device on desk wants at least one Ethernet cable…

Does Vortex86sx based devices are worth something?

At FOSDEM 2009 I grabbed one Vortex86SX based device — Koala Nano PC which is available at Koan software. Device came with Ångström distribution and was running 2.6.26 kernel. I wanted to get something more fresh on it and after some fighting I booted 2.6.29-rc5 kernel today.

Device use Vortex86SX SoC which is based on 486SX core. Yes — this is x86 machine without FPU. Overall speed of that is… nearly not existing.

First benchmark which came to my mind was “hdparm -T /dev/sda”. Results were dramatic: 9-13 MB/s for cached reads (with 133MHz memory and 300MHz cpu). I decided to compare against other devices:

Device Arch CPU CPU speed memory type cached reads
Koala Nano PC x86 vortex86sx 300MHz DDR2 9-13MB/s
old PC x86 pentium2 266MHz EDO DRAM 33MB/s
ATNGW100 av32 AT32AP700x 130MHz SDRAM 35MB/s
ASUS WL-500gP mips bcm3302 266MHz 46MB/s
Freecom FSG-3 arm ipx42x 266MHz 43MB/s
iBook G3 ppc g3 300MHz SDRAM 65MB/s
AT91SAM9263-EK arm at91sam9263 180MHz SDRAM 62-63MB/s
Compulab arm pxa270 312MHz SDRAM 74MB/s
NSLU2 arm ixp420 266MHz SDRAM 74MB/s
Koala nano33 x86 vortex86dx 1GHz DDR2 74MB/s
Nokia N810 arm omap2420 400MHz SDRAM 82MB/s
AT91SAM9G20-EK arm at91sam9G20 400MHz SDRAM 96MB/s
Linkstation pro duo arm ixp4xx 266MHz 147MB/s
BeagleBoard arm omap3530 500MHz mDDR 152MB/s
Alix.1c x86 geodelx 500MHz DDR 209MB/s
kirkwood reference board1 arm kirkwood 1200MHz DDR2 209MB/s
BUG arm i.mx31 533MHz DDR 294MB/s
my desktop x86 core2quad 2400MHz DDR2 3300-3500MB/s
Cliff’s desktop x86 Core-i7 920 Quad 2.67GHz DDR3 6400-7200MB/s

But remember that this test is not so good for benchmarking — I am preparing better set of tests to really compare speed of devices. So far it contains openssl speed and MP3 encoding/decoding.

But device has also few nice things. Everything is integrated so 12x12cm box is enough to keep everything inside. It has ATA controller, FastEthernet, graphics based on XGI core (with accelerated framebuffer able to do 1680×1050 resolution) and working USB. There is a place to put 2.5″ HDD inside (normally it boots from CompactFlash card), second Ethernet or WiFi are available options…

But what is use for such slow device? There are lot of ARM based ones which offer similar (or better) functionality and are faster… But wait — there is one use: event displays as this machine has nicely working framebuffer (I got even 1680×1050 resolution).

UPDATE: added results from iBook G3 300MHz and some other machines.

  1. kirkwood reference board uses same cpu as SheevaPlug device. 

Alix.1c and Koala MiniPC case

Today I got case for Alix.1c mainboard. For reminding: this is PC Engines board in mini-ITX format, powered by AMD Geode LX800.

Package arrived from Koan Software and contained one of their products: MiniPC 2PCI case.

Package contents

There were many addons in the box:

  • 60W 12V AC adapter
  • 2.5″ ATA -> Slim DVD/CD adapter
  • PCI riser for 2 slots
  • wall mounting elements
  • 2.5″ ATA 3.5″ ATA adapters
  • bracket for 3 DB9 connectors (additional serials anyone?)

AC adapter is added because case contains small PSU with few connectors. I do not use it because Alix.1c mainboard consists similar one already (and lack ATX power connector).

Inside view

Inside case there is a lot of space available:

There are mounting places for 3.5″ HDD, 2.5″ HDD and slim DVD/CD drive (signal adapter attached). There are also 2 fans (60mm each) but I left them not connected (Alix does not require cooling and lack sockets for fans).

Front panel

Front panel has 2 USB sockets, HDD and power leds and power button. As usual in mini-ITX cases there is no Reset button. Not present in my case (but available as option) is CompactFlash slot accessible from front. I did not ordered it because Alix has such one integrated.


Case is very high quality made — no sharp edges, easy access to all peripherals. And all those addons which are in a box makes overall cost smaller. If someone is searching for good mini-ITX case then MiniPC ones are good choice (and there is smaller version without place for PCI cards).

PCI 3.3V 🙁

As I wrote before I plan to make router based on Alix.1c — but after putting it into case I discovered one problem with board itself. It has 3.3V PCI slot so I have no use of PCI riser which was added to case. Will search for VIA one because it is universal (3.3V/5V) so I will get slots (but have to remember that cards have to accept 3.3V signals).

Is it time to replace WRT54GS?

Since few months I have 10/1Mbps network connection (downlink/uplink). Recently it was downgraded to 1/1Mbps and I had no idea why. Finally it appeared that my router was the problem…

Exact reason was QoS which I enabled few days ago. It looks like DD-WRT which I use now can not handle it on WRT54GS without degrading network speed. For now I disabled this but it is not an option because I plan to use VoIP more in next months so I need warranty that it will get all bandwidth it needs never mind what else would be running.

Current plans are to make use of Alix 1.c which I have from PC Engines. Soon I will have nice case for it so the only things to buy will be miniPCI WiFi card (friends suggested getting one of Atheros based ones) and 1GbE network card. I already have 2GB CompactFlash for rootfs and spare 2.5″ hdd which will be used for storage.

This configuration should be fast enough to have more functions then just router/AP. I plan to make it also printer/scanner server and probably there will be some more to add.

Bought case for Alix board

Today evening I was in IKEA shop near my house and bought GLIS box (blue). Tomorrow I plan to fit ALIX board into it — will require few holes (for Ethernet, VGA, USB, Power ports) and hard disk mounting but will fit and there will be space left. This will allow to put it under desk where is place for all my headless machines.

x86 architecture mess

x86 architecture is total mess when it comes to naming. Basically there were “i386”, “i486”, “i586”, “i686” — nothing more was used. But this gives lot of problems.

First one — which optimisations can be used on “i686”? It has MMX for sure but does it have SSE? SSEv2? SSEv3? 3DNow! technology? It depends on cpu… for example PentiumPro (the first “i686”) has MMX but lack any other addons. Athlon64 will have most of them (or even all in newest cores) but under 32bit Linux it still be “i686”.

Second thing is how Linux recognize CPU. On ALIX board I have AMD Geode LX which has MMX and 3DNow! but lack SSE. According to some data it is “i686” but under Linux it is “i586”:

root@alix:~$ uname -m

Currently I am running Ångström on it but is it built with “i686” optimisations…

Why Alix board is nice and why not quite

There are nice things in Alix board design and few not quite nice.

Nice ones:

  • only 12V voltage needed (small external PSU is in package)
  • DC-DC converter on board (so no need for ATX PSU or PicoPSU + 12V external PSU)
  • slot for CompactFlash storage on board (no need for CF->ATA adapter)
  • miniPCI slot
  • low profile (board has height of dual USB connector)
  • 22 GPIO lines
  • 256MB of RAM soldered on board (so no space taken by memory slot)
  • no fan, no heatsink

What I do not like:

  • lack of ATX back cover for ports (so when you put it in case you will get big hole for dust)
  • lack of memory slot (even SO-DIMM one if someone want more then 256MB RAM)
  • ATA connector is 44 pin one for 2.5″ harddisks (looks like it is impossible to buy 2.5″->2.5″ cable in Poland)

So if someone know where to buy 2.5″ -> 2.5″ ATA cable in Poland then please write in comment.

PC Engines Alix1c arrived

During GUADEC time Stelios Koroneos from Digital Opsis announced that PC Engines company donated two Alix1c boards to OpenEmbedded. As the board is interesting I wrote that if no one else will mail than I would like to play with it.

Today it picked it on post office and brought home. First reaction during unpacking: “Wow, this board is TINY!” because I had not used mini-ITX boards before. After connecting few cables (power, ethernet, vga, usb keyboard) and shorting “power switch” with screwdriver I got it booted and checked BIOS settings. Unfortunately I was unable to boot from PXE 🙁

I did search in drawer and took 256M CompactFlash card which I bought few years ago for “collie” and decided to install something on it. Decided that this time it will be Voyage Linux (Debian derived distribution for x86-based embedded platforms such as WRAP, ALIX and Soekris 45xx/48xx boards). Fetched their install CD (33M only) and started qemu with CF card as harddisk and that ISO. Few minutes later card was put into slot on Alix board and I got Voyage running.

Of course I could not resist and now board is upgraded to plain Debian ‘sid’ and 2.6.22 kernel ;D After wedding I will replace NSLU2 with Alix board and add few functions for it:

  • Samba server
  • Bluetooth Access Point
  • CUPS based print server
  • NFS server

During that time I also plan to move it from CF card and Debian to 2.5″ harddisk and Ångström.