OPAL boot and runtime firmware for POWER
Clone or download
shenki and stewart-ibm README: Update Qemu instructions
Qemu has evolved since this text was written. We can now run skiboot on
upstream Qemu.

Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
Latest commit 3c54a91 Oct 15, 2018
Failed to load latest commit information.
asm asm: Fix up assembly for clang May 4, 2018
ccan build: use thin archives rather than incremental linking Mar 1, 2018
core opal/hmi: Wakeup the cpu before reading core_fir Oct 16, 2018
doc Add fast-reboot property to /ibm,opal DT node Sep 18, 2018
external mambo: Merge PMEM_DISK and PMEM_VOLATILE code Sep 20, 2018
hdata hdata/i2c: Skip unknown device type Oct 16, 2018
hw phb4: Enable PHB MMIO-0/1 Bars only when mmio window exists Oct 16, 2018
include phb4/capp: Update the expected Eye-catcher for CAPP ucode lid Oct 16, 2018
libc Fix strtok for previous tokens being NULL May 24, 2018
libfdt build: use thin archives rather than incremental linking Mar 1, 2018
libflash platform: Restructure bmc_platform type Oct 11, 2018
libpore STOP API: API conditionally supports 255 SCOM restore entries for eac… Jul 19, 2018
libstb Use $() rather than backticks in all shell Sep 13, 2018
libxz build: use thin archives rather than incremental linking Mar 1, 2018
opal-ci opal-ci: Build old dtc version for fedora 28 Sep 20, 2018
platforms platform: Restructure bmc_platform type Oct 11, 2018
test Use $() rather than backticks in all shell Sep 13, 2018
.gitignore gitignore: Add stb test kernel files Apr 9, 2018
.travis.yml travis: remove Ubuntu 12.04 May 29, 2018
CONTRIBUTING.md doc: Further document development and release process May 22, 2018
LICENCE Initial commit of Open Source release Jul 2, 2014
Makefile Makefile: Fix building natively on ppc64le May 9, 2018
Makefile.main clang: -Wno-error=ignored-attributes Sep 13, 2018
Makefile.rules build: use thin archives rather than incremental linking Mar 1, 2018
README.md README: Update Qemu instructions Oct 16, 2018
coverity-model.c lock: Add additional lock auditing code Dec 21, 2017
extract-gcov.c gcov: Another GCC, another gcov tweak Mar 8, 2018
make_offsets.sh Use $() rather than backticks in all shell Sep 13, 2018
make_version.sh Use $() rather than backticks in all shell Sep 13, 2018
skiboot.lds.S skiboot.lds.S: move read-write data after the end of symbol map Sep 20, 2018
skiboot.spec skiboot.spec: Update to v5.10 release Mar 2, 2018



Firmware for OpenPower systems.

Source: https://github.com/open-power/skiboot

Mailing list: skiboot@lists.ozlabs.org

Info/subscribe: https://lists.ozlabs.org/listinfo/skiboot

Archives: https://lists.ozlabs.org/pipermail/skiboot/

Patchwork: http://patchwork.ozlabs.org/project/skiboot/list/


OPAL firmware (OpenPower Abstraction Layer) comes in several parts.

A simplified flow of what happens when the power button is pressed is:

  1. The baseboard management controller (BMC) powers the system on.
  2. The BMC selects the master chip and releases the self-boot engines (SBEs) on the POWER8 chips, master last.
  3. The BMC relinquishes control of the flexible service interface (FSI) SCAN/SCOM engines.
  4. The hostboot firmware IPLs the system. It initiates a secondary power-on sequence through a digital power systems sweep (DPSS).
  5. The hostboot firmware loads the OPAL image and moves all processors to their execution starting points.

Here, the OPAL image is three parts:

  1. skiboot (includes OPAL runtime services)
  2. skiroot - the bootloader environment
    • kernel
    • initramfs (containing petitboot bootloader)

They may be all part of one payload or three separate images (depending on platform).

The bootloader will kexec a host kernel (probably linux). The host OS can make OPAL calls. The OPAL API is documented in doc/opal-api/ (there are missing parts, patches are welcome!)

See doc/overview.rst for a more in depth overview of skiboot.


Any host OS can build and test skiboot provided it has a C cross compiler for big endian powerpc64. All good Linux distributions (and several bad ones) provide a packaged compiler that can be installed through the usual package management tools.

To build on Ubuntu:

apt-get install gcc-powerpc64le-linux-gnu gcc valgrind \
	expect libssl-dev device-tree-compiler make \
CROSS=powerpc64le-linux-gnu- make -j`nproc`

To build on Fedora:

dnf install gcc-powerpc64le-linux-gnu binutils-powerpc64-linux-gnu gcc make \
    diffutils findutils expect valgrind-devel dtc openssl-devel xz
CROSS=powerpc64le-linux-gnu- make -j`nproc`

(The little-endian powerpc64le compilers in Ubuntu and Fedora are actually bi-endian and can compile skiboot even though it's big-endian. We recommend installing a little-endian toolchain if you plan on building other projects.)

On any POWER system with a bi-endian system compiler:

CROSS="" make -j`nproc`

Alternatively, pre-built cross compilers for x86 systems can be downloaded from here: https://www.kernel.org/pub/tools/crosstool/ When using these compilers add /opt/cross/gcc-4.8.0-nolibc/powerpc64-linux/bin/ to your PATH. Once this is done skiboot can be compiler by just running make


Skiboot comes with a set of unit tests that can be run on your desktop. They can can be run with:

make check

To test in a simulator, install the IBM POWER8 Functional Simulator from: http://www-304.ibm.com/support/customercare/sas/f/pwrfs/home.html Also see external/mambo/README.md

Qemu as of version 2.8 implements the 'powernv' machine model and is sufficient to run skiboot:

qemu-system-ppc64 -M powernv -m 3G -nographic -L /path/to/skiboot/

To run a boot-to-bootloader test you need a Linux kernel image 'zImage.epapr'. Build one using the mambo_defconfig config for op-build. See https://github.com/open-power/op-build/ on how to build, or download one from https://openpower.xyz/job/openpower/job/openpower-op-build/.

Drop zImage.epapr in the skiboot directory and the skiboot test suite will automatically pick it up. You can also run a combined skiboot and Linux test in Qemu (version 3.0+):

qemu-system-ppc64 -M powernv -m 3G -nographic -kernel zImage.epapr -L /path/to/skiboot/

See opal-ci/README for further testing instructions.

To test on real hardware, you will need to understand how to flash new skiboot onto your system. This will vary from platform to platform.

You may want to start with external/boot-tests/boot_test.sh as it can (provided the correct usernames/passwords) automatically flash a new skiboot onto ASTBMC based OpenPower machines.


All patches should be sent to the mailing list with linux-kernel style 'Signed-Off-By'. The following git commands are your friends:

git commit -s
git format-patch

You probably want to read the linux https://kernel.org/doc/html/latest/process/submitting-patches.html as much of it applies to skiboot.

Output files

The Skiboot build process produces a bunch of different outputs. This is what they are, and where you should use them:

skiboot.elf: The output of the linker. Don't flash to a system, but useful when debugging

skiboot.lid: The raw binary object, named .lid because IBM. Flash this on really old P8 systems, the POWER Functional Simulator (mambo), or FSP systems

skiboot.lid.stb: Lid wrapped with secure boot header. Use on FSP systems

skiboot.lid.xz: Compressed raw binary. Use this on a OpenPower P8

skiboot.lid.xz.stb: Compressed raw binary wrapped with a secure boot header. Use this on OpenPower P9 systems