FILO is a bootloader which loads boot images from a local filesystem, without help from legacy BIOS services.
Expected usage is to flash it into the BIOS ROM together with LinuxBIOS.
Download the latest version of FILO from Subversion with
You can also browse the source code online at http://openbios.org/viewvc/trunk/?root=FILO
- Supported boot devices: IDE hard disk, SATA hard disk, CD-ROM, and system memory (ROM)
- Supported filesystems: ext2, fat, jfs, minix, reiserfs, xfs, and iso9660
- Supported image formats: ELF and [b]zImage (a.k.a. /vmlinuz)
- Supports boot disk image of El Torito bootable CD-ROM. "hdc1" means the boot disk image of the CD-ROM at hdc.
- Supports loading image from raw device with user-specified offset
- Console on VGA + keyboard, serial port, or both
- Line editing with ^H, ^W and ^U keys to type arbitrary filename to boot
- Full support for the ELF Boot Proposal (where is it btw, Eric)
- Auxiliary tool to compute checksum of ELF boot images
- Full 32-bit code, no BIOS calls
Only i386 PC architecture is currently supported. Some efforts have been made to get FILO running on PPC. Contact the LinuxBIOS mailinglist for more information.
x86-64 (AMD 64) machines in 32-bit mode also work. (LinuxBIOS uses 32-bit mode and Linux kernel does the transition to 64-bit mode)
Recent version of GNU toolchain is required to build. We have tested with Debian/woody (gcc 2.95.4, binutils 220.127.116.11.1, make 3.79.1), Debian/sid (gcc 3.3.2, binutils 18.104.22.168.6, make 3.80) and different versions of SUSE Linux from 9.0 to 10.0.
First invocation of make creates the default Config file.
Edit this file as you like. It's fairly straightforward (I hope).
$ vi Config
Then running make again will build filo.elf, the ELF boot image of FILO.
Use filo.elf as your payload of LinuxBIOS, or a boot image for Etherboot.
If you enable MULTIBOOT_IMAGE option in Config, you can also boot filo.elf from GNU GRUB or other Multiboot bootloader. This feature is intended for testing or development purpose.
This software was originally developed by SONE Takeshi <firstname.lastname@example.org> and is now maintained by Stefan Reinauer.
FILO on the ARIMA HDAMA
This is a quick guide for getting LinuxBIOS up and running on the Arima HDAMA dual Opteron mainboard. If there are blanks to be filled in, go ahead and either ask on the LinuxBIOS mailing list or you can reach me at cro_marmot_at_comcast.net. -- David Hendricks
Quick LinuxBIOS install guide for HDAMA, David W. Hendricks, May 13 2004
Requirement: Kernel with framebuffering either in an initrd or compiled statically in. Do not enable the "no BIOS init" option for ATi Mach64 framebuffering. An example .config can be found here: http://home.comcast.net/~zen_weasel/linuxbios_stuff/hdama/kernel.config
1. Grab the latest CVS code from https://sourceforge.net/cvs/?group_id=3206
2. Add the following lines to src/mainboard/arima/hdama/Config.lb for VGA functionality:
## ATI Rage XL framebuffering graphics driver dir /drivers/ati/ragexl
3. Edit the targets/arima/hdama/Config.lb file and add this for VGA:
uses CONFIG_CONSOLE_BTEXT option CONFIG_CONSOLE_BTEXT=1
4. Select a payload. Example:
I'll elaborate on this a little later.
5. Run "buildtarget arima/hdama" from the targets/ directory. cd to the arima/hdama/hdama directory and run "make"
6. If all went well during the build process, you should have a linuxbios.rom image in targets/arima/hdama/hdama/ .
Back to #4 -- FILO is a file loader for ELF images. It provides minimal bootloader functionality. To build a FILO payload: 1. Download FILO with BText for optional VGA: http://home.comcast.net/~zen_weasel/linuxbios_stuff/hdama/filo_0.4.1_btext.tar.bz2
2. Decompress, edit Config. If you're booting off a disk, you can use a LILO-like line to boot a kernel image. Example:
AUTOBOOT_FILE = "hda1:/boot/x86_64 root=/dev/hda2 console=ttyS0,115200 console=tty0 vga=792 video=atyfb:mode:1024x768"
Booting a kernel off of the flash your BIOS is on requires that you know exactly it's located. If you do know this information, you can use AUTOBOOT_FILE = "mem@0x00000000" where 0x00000000 is the actual location in hexadecimal.
Also, make sure you have proper filesystem support for whichever partition has your kernel image. Example: FSYS_EXT2FS = 1
An example FILO config file can be found here: 
3. Run "make" and you should now have a filo.elf ELF image. Use this as your payload in step #4 for building LinuxBIOS.
Q: linuxbios.strip is too big, image is greater than 64KB A: A good way to reduce image size is simply to reduce the log level. Change these lines in your targets/arima/hdama/Config.lb file:
option DEFAULT_CONSOLE_LOGLEVEL=9 option MAXIMUM_CONSOLE_LOGLEVEL=9
You can bring them down gradually. I've found that "7" works well with the freebios source I downloaded before writing this.
FILO on AMD64
Installing LinuxBIOS + Filo (0.4.1) on an AMD64 box.
#define AUTOBOOT_FILE "hda2:/boot/vmlinuz.lb root=/dev/hda2 \ initrd=/boot/initrd.lb console=ttyS0,115200 console=tty0 video=atyfb:1024x768-16" #define AUTOBOOT_DELAY 4 #define IDE_DISK 1 #define VGA_CONSOLE 1 #define PC_KEYBOARD 1 #define SERIAL_CONSOLE 1 #define SERIAL_IOBASE 0x3f8 #define SERIAL_SPEED 115200 #define FSYS_EXT2FS 1 #define FSYS_FAT 1 #define FSYS_JFS 1 #define FSYS_MINIX 1 #define FSYS_REISERFS 1 #define FSYS_XFS 1 #define FSYS_ISO9660 1 #define ELTORITO 1 #define SUPPORT_PCI 1 #define LINUX_LOADER 1 #define PCI_CONFIG_1 1
Installing SuSE 9.0 AMD64 on a Solo-System:
FILO version 0.4.1 (stepan@prokofjieff) Thu Oct 30 13:29:16 CET 2003 Press <Enter> for default boot, or <Esc> for boot prompt... boot: hdc:/boot/loader/linux initrd=/boot/loader/initrd console=ttyS0,115200n8