Slimline Open Firmware - SLOF Copyright (C) 2004, 2012 IBM Corporation Index ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1.0 Introduction to Open Firmware 2.0 Using the source code 2.1 Build process 2.2 Overview of the source code 2.4 Extending the Forth engine 3.0 Limitations 1.0 Introduction to Slimline Open Firmware ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The IEEE Standard 1275-1994 [1], Standard for Boot (Initialization Configura- tion) Firmware, Core Requirements and Practices, was the first non-proprietary open standard for boot firmware that is usable on different processors and buses. Firmware which complies with this standard (also known as Open Firmware) includes a processor-independent device interface that allows add-in devices to identify itself and to supply a single boot driver that can be used, unchanged, on any CPU. In addition, Open Firmware includes a user interface with powerful scripting and debugging support and a client interface that allows an operating system and its loaders to use Open Firmware services during the configuration and initialization process. Open Firmware stores information about the hardware in a tree structure called the "device tree". This device tree supports multiple interconnected system buses and offers a framework for "plug and play"-type auto configuration across different buses. It was designed to support a variety of different processor Instruction Set Architectures (ISAs) and buses. The full documentation of this Standard can be found in [1]. Slimline Open Firmware (SLOF) is now an implementation of the IEEE 1275 standard that is available under a BSD-style license. Please see the file LICENSE for details. 2.0 Using the source code ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ This version of SLOF currently supports two major platforms ("boards" in the SLOF jargon): - js2x : The PowerPC 970 based systems JS20, JS21 and the PowerStation - qemu : Used as partition firmware for pseries machines running on KVM/QEMU The following sections will give you a short introduction about how to compile and improve the source code. Please read the file INSTALL for details about how to install the firmware on your target system. 2.1 Build process ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ To build SLOF you need: - Recent GNU tools, configured for powerpc64-linux - GCC: 3.3.3 and newer are known to work - Binutils: use a version as new as possible - Subversion (for retrieving the x86 emulator) - set the CROSS variable - something like export CROSS="powerpc64-unknown-linux-gnu-" when using a cross compiler or - export CROSS="" when using a native compiler - For building SLOF for the PowerStation, it is necessary to download a x86 emulator which is used to execute the BIOS of VGA card; to download the x86 emulator following steps are required: - cd other-licence/x86emu/ - ./x86emu_download.sh # this downloads the x86 emulator sources - cd - - Now you can compile the firmware. - For building SLOF for JS20, JS21 or the PowerStation, type: make js2x You also might want to build the takeover executable by typing: make -C board-js2x takeover - For building SLOF as the partition firmware for KVM/QEMU, type: make qemu The resulting ROM image "boot_rom.bin" can then be found in the main directory. 2.2 Overview of the source code ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The SLOF source code is structured into the following directories: - llfw : The Low-Level Firmware - this part is platform-specific firmware that is responsible to boot the system from the reset vector to a state where it is possible to run the Open Firmware Forth engine (i.e. it sets up the necessary CPU registers, intializes the memory, does some board-specific hardware configuration, etc.) - slof : The code for the Open Firmware environment, including the Forth engine (called "Paflof") and the necessary Forth source files. - rtas : The Run-Time Abstraction Services, which can be used by the operating system to access certain hardware without knowing the details. See [2] for a description of these services. - clients : Code that runs on top of the Open Firmware client interface. Currently, there are two clients: - net-snk : Used for network bootloading (a TFTP client) - takeover : A separate binary that can be used for bootstrapping SLOF on a JS20/JS21 (see FlashingSLOF.pdf for details). - drivers : Driver code for various hardware (currently only NIC drivers). - lib : Libraries with common code. - romfs / tools : Tools that are required for building the firmware image. - board-* : The board directories contain all the code that is unique to the corresponding platform. 2.3 The Open Firmware engine +++++++++++++++++++++++