I’ve been sitting on this post for quite some time. I recently bought (and later sold, long before this post was typed) a Pico-ITX motherboard, an x86 motherboard smaller than my hand.
I named it Marcus and crafted a custom installation of Gentoo (as I do for every new computer) for it. I also decided to slipstream a gPXE (Enhanced PXE Network Boot) image into the BIOS. All seemed well, and I flashed it.
Reboot time came. I tried to enter the setup screen to configure my new toy!
For some reason, it didn’t work.
It also decided that it wouldn’t boot from the hard drive… at all.
All it would do was drop into gPXE, repeatedly. After gPXE gave up, it would simply fault and stop responding, shutting the monitor off with it. The keyboard barely worked (it took some prodding, and the control key consistently got stuck starting gPXE’s shell).
“Well, crap. I just ruined my nice new motherboard.”
Fortunately, gPXE is powerful, and there were a few options. I first decided to use it to boot Linux, which worked. I also created another gPXE-laden BIOS image, “properly” (I thought) this time. I booted Linux and flashed the new image.
Same thing. Except this time, It wouldn’t boot Linux.
There’s a great DOS tool called UNIFLASH. It will flash practically ANY BIOS chip, within reason. If I could get it to load an operating system, I could try to flash a good BIOS. That was the theory, at least.
No protected-mode operating systems more complex than Cipher worked. DOS with Mini-Windows 98 didn’t even boot (over the network). Everything just led to a black screen. I was using Memdisk and a disk image (memdisk overrides int13h, tricking the system into treating a block of memory like a hard disk). Everything looked bleak.
With the help of AndyTim in #etherboot (Freenode), I experimented with everything I had. Tried to Chainload the hard drive, and that failed too. Tried to Chainload the hard drive with PXELINUX and THEN chain.c32. That failed too.
Back to Memdisk. Booting into DOS with Memdisk and then loading a BIOS flasher seemed to work. Unfortunately, doing anything with the flasher (even VIA’s official flash utility) caused the computer to hang. I was starting to think that I couldn’t fix this thing.
On top of that, UNIFLASH, the most advanced BIOS flashing tool known to man, did not support my chipset. It did, however, support a very similar one. I dove into the land of PASCAL (to which I hope to never return) and added my system to the list; I recompiled UNIFLASH in DOSBox, which proved difficult as well.
I also learned about SAN booting from AndyTim; treating another network computer hosting an image as a hard disk. This proved to be the ONLY thing that worked. I SAN-booted a DOS image, and my new UNIFLASH worked like a charm.
Believe it or not, this is the abridged version of this tale. The moral? gPXE is amazing, but maybe not in the BIOS of a Pico-ITX system.
I would have been out a computer were it not for the patient help of AndyTim. Thanks!