From coreboot
Revision as of 15:55, 17 October 2006 by Stepan (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Purpose: Customize the system to allow me to play with memory mappings and large devices. I wanted to minimize intermediate steps from LinuxBIOS to Linux to minimize the areas of expertise I needed to develop. I also wanted to be able to use the SATA drives as my boot drives.

Disclaimer: There are several places where my solutions are not as elegant as I wished them to be. Suggestions are welcome.

Current set up: Tyan s2892 LinuxBIOS with Linux 2.6.18-tiny as a payload

I started by installing LinuxBIOS on the system and using FILO and Etherboot to boot to a kernel. This allowed me to try the different payloads without flashing every time.

Next I downloaded the OLPC buildrom

git clone git://

I built it on my 32-bit system for convenience building the kernel.

I modified the to include pciutils from

and took out the graphical boot menu. I also modified buildrom/skeleton/devices.txt to add lines for my hard drives. I just copied the lines for sda and sda1 and made had hda1 hda2 and sda2. The important thing is to make sure that the major and minor numbers are correct.

I modified buildrom/skeleton/linuxrc so that the device files were created earlier, /dev/null didn't become a text file, and my drives got mounted.

I then modified buildrom/skeleton/bin/boot.functions so that doboot() called my script on the hard drive for the kexec. That's nice to avoid flashing the BIOS for booting different kernels.

I downloaded Linux (2.6.18-rc4 had some problems with SATA) and patched it with the tiny patches that came with OLPC. 12-tiny-tiny-crc.patch fails, but was easy to apply by hand.

I configured the kernel to include support for ext2 and ext3, SATA, and IDE.

I ran make and copied the payloads from the buildrom/deploy directory to my s2892 to be used. olpc-payload.elf.lzma (732K) is used for booting directly from LinuxBIOS, and olpc-payload-uncompressed.elf (1.7M) was useful for testing it with FILO and Etherboot.

I'd like to go one step further and use a 64-bit kernel so that any changes I make to the kernel only need to be made once. Looking at mkelfimage, it looks like the 64-bit file format is not supported. It might be a simple change, but I don't know how to do it.

Since I couldn't figure out how to make LinuxBIOS do without the Fallback image, I configured it to have a zero size payload.

Now I have normal/linuxbios.strip (128K) fallback/linuxbios.strip (128K) normal/payload (732K) fallback/payload (0K) s2892vBIOS.bin (36K)

If I could get rid of the fallback it would make room for the 64-bit kernel (50K bigger than the 32-bit kernel). Then I'd just need to modify mkelfimage and I'd be almost there :) I guess I could take out pciutils to make up most of the difference (44K), but I like having them there for debug.
  1. Sample config file for
  2. the Tyan s2892
  3. This will make a target directory of ./s2892

target s2892 mainboard tyan/s2892

option ROM_SIZE =0xf7000


option CONFIG_CONSOLE_SERIAL8250=1 option CONFIG_CONSOLE_VGA=1 option FALLBACK_SIZE =0x20000 option ROM_IMAGE_SIZE=0x20000

  1. Tyan s2892

romimage "normal"

       option USE_FALLBACK_IMAGE=0
       option LINUXBIOS_EXTRA_VERSION="$(shell cat ../../VERSION)_Normal"
       payload ../olpc-payload.elf.lzma


romimage "fallback"

       option USE_FALLBACK_IMAGE=1
       option LINUXBIOS_EXTRA_VERSION="$(shell cat ../../VERSION)_Fallback"
       payload ../

end buildrom ./linuxbios.rom ROM_SIZE "normal" "fallback"