FILO

From coreboot
Jump to navigation Jump to search

The wiki is being retired!

Documentation is now handled by the same processes we use for code: Add something to the Documentation/ directory in the coreboot repo, and it will be rendered to https://doc.coreboot.org/. Contributions welcome!

FILO trying to load menu.lst.
FILO prompt.

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 coreboot.

Download FILO

Download the latest version of FILO from Subversion with

$ svn co svn://coreboot.org/filo/trunk/filo

Alternativel you may still download the obsolete filo 0.5.6 release at

$ svn co svn://coreboot.org/filo/branches/filo-0.5

You can also browse the source code online at http://tracker.coreboot.org/trac/filo/browser/trunk

Features

  • 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
  • uses libpayload

Requirements

Only the x86 (x64) architecture is currently supported. Some efforts have been made to get FILO running on PPC. Contact the coreboot mailinglist for more information.

x64/AMD 64 machines work fine when compiling FILO in 32-bit mode. (coreboot uses 32-bit mode and Linux kernel does the transition to 64-bit mode)

Use this for make: make CC="gcc -m32" LD="ld -b elf32-i386" HOSTCC="gcc" AS="as --32"

Recent version of GNU toolchain is required to build.

We have tested with Debian/woody (gcc 2.95.4, binutils 2.12.90.0.1, make 3.79.1), Debian/sid (gcc 3.3.2, binutils 2.14.90.0.6, make 3.80) and different versions of SUSE Linux from 9.0 to 10.3.

On AMD64 for Debian install the gcc-multilib package.

Preparation

You need to compile libpayload (included via svn:externals in FILO)

 $ cd libpayload
 $ make defconfig
 $ make

Configuration

Configure FILO using the Kconfig interface:

 $ make menuconfig

Installation

Then running make again will build filo.elf, the ELF boot image of FILO.

 $ make

Use build/filo.elf as your payload of coreboot, or a boot image for Etherboot.

Credits

  • This software was originally developed by SONE Takeshi <ts1@tsn.or.jp>
  • It has been significantly enhanced and is now maintained by Stefan Reinauer.
  • It uses libpayload from Uwe Hermann and Jordan Crouse

Troubleshooting

If you experience trouble compiling or using FILO, please report with a build log or detailed error description to the coreboot mailing list.

Notes

CD-ROM Booting

To boot a CD-ROM or DVD you only need to specify the drive without a partition number. For example to boot to the primary drive on the secondary IDE channel you would use hdc and not hdc1 in FILO.

Grub-like Interface

If you are using FILO with CONFIG_USE_GRUB, and want to boot to your Linux install disk you have to do a mixture of GRUB and FILO commands.

Like GRUB you have to append a kernel (and parameters), then an initrd, and give a boot command. Like FILO you have to give absolute paths.

Example to boot to a GeeXboX install CD-ROM:

filo> kernel hdc:/GEEXBOX/boot/vmlinuz root=/dev/ram0 rw init=linuxrc boot=cdrom installator

Press <ENTER>

filo> initrd hdc:/GEEXBOX/boot/initrd.gz

Press <ENTER>

filo> boot

Press <ENTER>

Your system will now boot right into the Linux install.

NVRAM Parsing

FILO parses the following NVRAM variables:

  • 'boot_default' is parsed by the command nvram-default to obtain the default boot entry for the boot menu. It can be used as an alternative to the default command which reads the default entry as a parameter.