I got a Soekris 4801-60 for use as a firewall/gateway at one of my (very) remote setups. These things are reliable, very low power, and they have no moving parts if you boot off compact flash. They are Geode-based, so it’s x86. You can run the various flavors of BSD on them, or your favorite GNU/Linux distro. There is no VGA out, only a serial port for console access. The (text) console is automatically redirected to the serial port, which is very convenient. All in all, great little boxes.
But they still have a proprietary BIOS. This particular 4801 came with BIOS version 1.29, which was succeeded by version 1.30, with these errata:
comBIOS vers 1.30
* fixed bug from 1.29 with LBA disk translation
* fixed net48xx Serial COM1 RI noise SMI lockup
I was having problems with grub on a compactflash card – grub error 16, which means corrupt filesystem, which is not the case. I came across this hint that a BIOS upgrade might solve the problem. Upgrading the BIOS should be simple, right? There’s a ‘download’ command, and then a ‘flashbios’ command. The download has to happen with … Xmodem/CRC. Seriously.
And that turns out to be a bit less than trivial on a modern GNU/Linux system. Minicom has a send file mode, of course, but I couldn’t get the file across, kept getting errors like ‘Retry 0: NAK on sector’. Minicom was configured to call the ‘sx’ command. I tried with ‘cu’, but couldn’t get that to work either.
In the end I had to
a) drop speed to 19200 baud
b) make sure that XON/XOFF flow control was disabled in minicom
c) start the download with the ‘download -’ command in minicom (note that extra dash, presumably a stdin redirection)
d) quit minicom
e) from the command line, feed it the new bios like this
sx -vv b4801_130.bin /dev/ttyUSB0
That worked:
Sending b4801_130.bin, 608 blocks: Give your local XMODEM receive command now.
Bytes Sent: 77824 BPS:1771
Transfer complete
Finally:
> flashupdate
Updating BIOS Flash ,,,,,,,,,,,,,,,,,,,,,,,,..,,,,.. Done.
Apparently, upgrading is also pretty easy with ‘cu’ on openbsd, but the ‘lsz’ tool referred there doesn’t seem to exist in GNU/Linux land.
This was way more complicated than it should have been. I’m inclined to think that this would be easier if the Soekris ran a free bios – someone would have managed to squeeze in something a little more sane than xmodem for file transfers. Perhaps something that actually works with standard tools like minicom or cu. In other words, there is room for improvement here. The LinuxBIOS project has been making a lot of headway of late with Geode support…
But at least the BIOS upgrade solved my ‘error 16′ problem.