OpenBMC is an open software framework to build a complete Linux image for a Board Management Controller (BMC).
OpenBMC uses the Yocto Project as the underlying building and distro generation framework.
Board | Status | Description |
---|---|---|
Wedge100 | A 32x100G TOR switch | |
Lightning | A flexible NVMe JBOF | |
Yosemite | An open source modular chassis for high-powered microservers | |
Wedge | A 40G OS-agnostic TOR switch |
This repository includes 3 set of layers:
The Yocto naming pattern is used in this repository. A "meta-layer
" is used to name a layer or a category of layers. And recipe-abc
is used to name a recipe. The project will exist as a meta layer itself! Within the Yocto Project's distribution call this project meta-openbmc
.
The recipes for OpenBMC common layer are found in common
.
The BMC SoC layer and board specific layer are grouped together based on the vendor/manufacturer name. For example, all Facebook boards specific code should be in meta-facebook
. Likewise, meta-aspeed
includes source code for Aspeed SoCs.
Set up the build environment based on the Yocto Project's Quick Start Guide.
Clone Yocto repository:
$ git clone -b fido https://git.yoctoproject.org/git/poky
Clone OpenEmbedded and OpenBMC repositories, in the new created poky
directory:
$ cd poky
$ git clone -b fido https://github.com/openembedded/meta-openembedded.git
$ git clone -b fido https://git.yoctoproject.org/git/meta-security
$ git clone https://github.com/facebook/openbmc.git meta-openbmc
Note that this project does not use Yocto release branch names.
Initialize a build directory. In the poky
directory:
$ export TEMPLATECONF=meta-openbmc/meta-facebook/meta-wedge/conf
$ source oe-init-build-env
Choose between meta-wedge
, meta-wedge100
, and meta-yosemite
.
After this step, you will be dropped into a build directory, poky/build
.
Start the build within the build directory:
$ bitbake wedge-image
The build process automatically fetches all necessary packages and builds the complete image. The final build results are in poky/build/tmp/deploy/images/wedge
. The root password will be 0penBmc
, you may change this in the local configuration.
It is recommended to setup a new Yocto distribution (a checkout of poky). The initialization script oe-init-build-env
can read the included TEMPLATECONF
and set up a local build/conf/local.conf
along with the associated layer/build configuration.
If you have previously set up and built poky, you may change your local configuration:
When using the example TEMPLATECONF
for Wedge, the ./build/conf/templateconf.cfg
:
meta-openbmc/meta-facebook/meta-wedge/conf
The layers config ./build/conf/bblayers.conf
, will contain:
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/PREFIX/poky/meta \
/PREFIX/poky/meta-yocto \
/PREFIX/poky/meta-yocto-bsp \
/PREFIX/poky/meta-openembedded/meta-oe \
/PREFIX/poky/meta-openembedded/meta-networking \
/PREFIX/poky/meta-openembedded/meta-python \
/PREFIX/poky/meta-openbmc \
/PREFIX/poky/meta-openbmc/meta-aspeed \
/PREFIX/poky/meta-openbmc/meta-facebook/meta-wedge \
"
BBLAYERS_NON_REMOVABLE ?= " \
/PREFIX/poky/meta \
/PREFIX/poky/meta-yocto \
"
And finally the ./build/config/local.conf
will include important configuration options:
# Machine Selection
MACHINE ??= "wedge"
# OpenBMC distro settings
DISTRO ?= "openbmc-fb"
If you have an application that can be used by different BMCs, you can contribute your application to the OpenBMC common layer.
If you are a BMC SoC vendor, you can contribute your SoC specific drivers to the BMC SoC layer.
If you are a board vendor, you can contribute your board specific configurations and tools to the Board specific layer. If the board uses a new BMC SoC that is not part of the BMC SoC layer, the SoC specific driver contribution to the BMC SoC layer is also required.