Difference between revisions of "Payloads"
|Line 55:||Line 55:|
==== FreeBSD ====
==== FreeBSD ====
[[FreeBSD]] can be booted via coreboot using [[SeaBIOS]].
==== OpenBSD ====
==== OpenBSD ====
Revision as of 19:36, 24 September 2010
coreboot in itself is "only" minimal code for initializing a mainboard with peripherals. After the initialization, it jumps to a payload.
- 1 Payloads
- 1.1 Bootloaders
- 1.2 Operating systems
- 1.3 Other
- 1.4 Games
- 2 Possible future payloads
- 3 History
SeaBIOS is an open-source implementation of the standard bootstrap callback layer implemented by an x86 BIOS. It enables booting from unmodified CDROMs and hard drives.
SeaBIOS has been tested with Linux, NetBSD, OpenBSD, FreeDOS, and Windows XP/Vista/7. Classic GRUB, lilo, and isolinux work well with SeaBIOS. Other x86 bootloaders and operating systems will likely also work.
You can use GRUB2 as a coreboot payload, in order to boot and operating system from a hard drive, for instance.
GRUB legacy is not suitable as coreboot payload, though.
FILO is a simple bootloader with filesystem support.
Etherboot / GPXE
Etherboot is a network bootloader. It provides a direct replacement for proprietary PXE ROMs, with many extra features such as DNS, HTTP, iSCSI, etc.
Older versions of Etherboot included parts of FILO, and thus supported SATA and USB booting.
Mitch Bradley's Open Firmware, an IEEE1275-1994 Open Firmware implementation, can also be used as coreboot payload.
OpenBIOS — IEEE1275-1994 Open Firmware.
TianoCore is a bootloader providing the UEFI interface.
coreboot can use a Linux kernel as payload directly. That is, the kernel is included in the ROM chip where coreboot resides.
This use-case is not well-tested yet, though.
jakllsch has worked on a partially-complete port of the x86 boot code to the role of native payload. However, with the advent of SeaBIOS, this is likely to become less of a priority. Consult the NetBSD wiki page for further information.
We have successfully booted Windows XP, Windows Vista and Windows 7 (Beta).
Currently, GRUB2 refuses to load the kernel due to a small bug in the multiboot header of the kernel, but the kernel still refuses to work if that is worked around. Maybe they reintroduced some BIOS calls again?
See also this blog entry.
Memtest86 / Memtest86+
Memtest86 is a program which checks your RAM modules.
It can be run from within GRUB, but also as a coreboot payload (i.e. included in your ROM chip).
Note: Current versions of memtest86 may not work anymore due to changes in coreboot. A patch is being worked on.
Note: ADLO has been superseded by SeaBIOS. Do not use it anymore.
Libpayload is a helper-library for payload-writers.
coreinfo is a coreboot payload which can display various system information.
Bayou is the working name for a coreboot payload that can choose, load and run other payloads from a LAR archive on the ROM.
Note: Bayou may no longer be in a working state right now, it may or may not be fixed and worked on again. In the meantime, SeaBIOS also provides a mechanism to include multiple payloads in a ROM image and select either of them at boot-time.
GRUB invaders is a multi-boot compliant space invaders game.
It can either be started from within GRUB (as a "kernel"), or it can be used as a coreboot payload.
tint is a falling blocks game.
Possible future payloads
The following payloads might or might not work (with more or less changes required) with coreboot — their usage hasn't been tested or documented so far.
- CodeGen's SmartFirmware — IEEE1275-1994 Open Firmware
- Plan 9 — A distributed operating system.
- RedBoot / eCos — Real-time OS for embedded systems; initial port to ELF completed but no longer available.
- Windows CE
- NanoVM (small JVM)
- uip / lwip (small TCP/IP stacks)
The payload was originally intended to be a Linux kernel stored in flash. Flash ROM growth rate was anticipated optimistically however, and today there are not many mainboards that actually have enough flash ROM room for a kernel. 512KB can be seen here-and-there and a few boards come with 1MB or 2MB. Recent kernels really want at least 1MB, and then you'll only have room for 300-400 KB of initial ramdisk, which could be too small too, depending on the application.