105 lines
4.2 KiB
Markdown
105 lines
4.2 KiB
Markdown
|
The SeaBIOS code can be built using standard GNU tools. A recent Linux
|
||
|
distribution should be able to build SeaBIOS using the standard
|
||
|
compiler tools.
|
||
|
|
||
|
Building SeaBIOS
|
||
|
================
|
||
|
|
||
|
First, [obtain the code](Download). SeaBIOS can be compiled for
|
||
|
several different build targets. It is also possible to configure
|
||
|
additional compile time options - run **make menuconfig** to do this.
|
||
|
|
||
|
Build for QEMU (along with KVM, Xen, and Bochs)
|
||
|
-----------------------------------------------
|
||
|
|
||
|
To build for QEMU (and similar), one should be able to run "make" in
|
||
|
the main directory. The resulting file "out/bios.bin" contains the
|
||
|
processed bios image.
|
||
|
|
||
|
One can use the resulting binary with QEMU by using QEMU's "-bios"
|
||
|
option. For example:
|
||
|
|
||
|
`qemu -bios out/bios.bin -fda myfdimage.img`
|
||
|
|
||
|
One can also use the resulting binary with Bochs. For example:
|
||
|
|
||
|
`bochs -q 'floppya: 1_44=myfdimage.img' 'romimage: file=out/bios.bin'`
|
||
|
|
||
|
Build for coreboot
|
||
|
------------------
|
||
|
|
||
|
To build for coreboot please see the coreboot build instructions at:
|
||
|
<http://www.coreboot.org/SeaBIOS>
|
||
|
|
||
|
Build as a UEFI Compatibility Support Module (CSM)
|
||
|
--------------------------------------------------
|
||
|
|
||
|
To build as a CSM, first run kconfig (make menuconfig) and enable
|
||
|
CONFIG_CSM. Then build SeaBIOS (make) - the resulting binary will be
|
||
|
in "out/Csm16.bin".
|
||
|
|
||
|
This binary may be used with the OMVF/EDK-II UEFI firmware. It will
|
||
|
provide "legacy" BIOS services for booting non-EFI operating systems
|
||
|
and will also allow OVMF to display on otherwise unsupported video
|
||
|
hardware by using the traditional VGA BIOS. (Windows 2008r2 is known
|
||
|
to use INT 10h BIOS calls even when booted via EFI, and the presence
|
||
|
of a CSM makes this work as expected too.)
|
||
|
|
||
|
Having built SeaBIOS with CONFIG_CSM, one should be able to drop the
|
||
|
result (out/Csm16.bin) into an OVMF build tree at
|
||
|
OvmfPkg/Csm/Csm16/Csm16.bin and then build OVMF with 'build -D
|
||
|
CSM_ENABLE'. The SeaBIOS binary will be included as a discrete file
|
||
|
within the 'Flash Volume' which is created, and there are tools which
|
||
|
will extract it and allow it to be replaced.
|
||
|
|
||
|
Distribution builds
|
||
|
===================
|
||
|
|
||
|
If one is building a binary version of SeaBIOS as part of a package
|
||
|
(such as an rpm) or for wide distribution, please provide the
|
||
|
EXTRAVERSION field during the build. For example:
|
||
|
|
||
|
`make EXTRAVERSION="-${RPM_PACKAGE_RELEASE}"`
|
||
|
|
||
|
The EXTRAVERSION field should provide the package version (if
|
||
|
applicable) and the name of the distribution (if that's not already
|
||
|
obvious from the package version). This string will be appended to the
|
||
|
main SeaBIOS version. The above information helps SeaBIOS developers
|
||
|
correlate defect reports to the source code and build environment.
|
||
|
|
||
|
If one is building a binary in a build environment that does not have
|
||
|
access to the git tool or does not have the full SeaBIOS git repo
|
||
|
available, then please use an official SeaBIOS release tar file as
|
||
|
source. If building from a snapshot (where there is no official
|
||
|
SeaBIOS tar) then one should generate a snapshot tar file on a machine
|
||
|
that does support git using the scripts/tarball.sh tool. For example:
|
||
|
|
||
|
`scripts/tarball.sh`
|
||
|
|
||
|
The tarball.sh script encodes version information in the resulting tar
|
||
|
file which the build can extract and include in the final binary. The
|
||
|
above EXTRAVERSION field should still be set when building from a tar.
|
||
|
|
||
|
Overview of files in the repository
|
||
|
===================================
|
||
|
|
||
|
The **src/** directory contains the main bios source code. The
|
||
|
**src/hw/** directory contains source code specific to hardware
|
||
|
drivers. The **src/fw/** directory contains source code for platform
|
||
|
firmware initialization. The **src/std/** directory contains header
|
||
|
files describing standard bios, firmware, and hardware interfaces.
|
||
|
|
||
|
The **vgasrc/** directory contains code for [SeaVGABIOS](SeaVGABIOS).
|
||
|
|
||
|
The **scripts/** directory contains helper utilities for manipulating
|
||
|
and building the final roms.
|
||
|
|
||
|
The **out/** directory is created by the build process - it contains
|
||
|
all intermediate and final files.
|
||
|
|
||
|
When reading the C code be aware that code that runs in 16bit mode can
|
||
|
not arbitrarily access non-stack memory - see [Memory Model](Memory
|
||
|
Model) for more details. For information on the major C code functions
|
||
|
and where code execution starts see [Execution and code
|
||
|
flow](Execution and code flow).
|