[LinuxBIOS] Tyan s2892 the OLPC way

Myles Watson myles at pel.cs.byu.edu
Tue Oct 17 17:35:07 CEST 2006

>A quick writeup to the list of what you ended up doing would be great!

Here it is.  Feel free to ask for clarifications.

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.

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://dev.laptop.org/users/jcrouse/buildrom

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

I modified the Config.mk 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

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


# Sample config file for
# the Tyan s2892
# This will make a target directory of ./s2892

target s2892
mainboard tyan/s2892

option ROM_SIZE	     =0xf7000


option FALLBACK_SIZE =0x20000
option ROM_IMAGE_SIZE=0x20000

# Tyan s2892
romimage "normal"
	option LINUXBIOS_EXTRA_VERSION="$(shell cat ../../VERSION)_Normal"
	payload ../olpc-payload.elf.lzma

romimage "fallback"
	option LINUXBIOS_EXTRA_VERSION="$(shell cat ../../VERSION)_Fallback"
	payload ../payload.zero

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

More information about the coreboot mailing list