The Yocto Project is an open source collaboration project that provides templates, tools and methods to help you create custom Linux-based systems for embedded products regardless of the hardware architecture
OpenBMC uses the Yocto tools to manage configuration and creation of BMC images.
There are two main use-cases for Yocto in OpenBMC:
The first is the easy case, and largely involves picking the system configuration to build before invoking bitbake
. Examples for Palmetto and Barreleye are in the cheatsheet.
The second case can be helped with Yocto's devtool
. After running . openbmc-env
, a tool called devtool
will be in your path, and can be applied in several ways.
If you have an existing source tree you'd like to integrate, running devtool modify -n ${PACKAGE} ${SRCTREE}
first creates a new Yocto layer in your build directory where devtool stores recipe modifications. It then constructs a .bbappend
for the the package recipe and uses the externalsource
class to replace the download, fetch, and patch steps with no-ops. The result is that when you build the package, it will use the local source directory as is. Keep in mind that the package recipe may not perform a clean and depending on what you are doing, you may need to run ${PACKAGE}
build system's clean command in ${SRCTREE}
to clear any built objects. Also if you change the source, you may need to run bitbake -c cleansstate ${PACKAGE}
to clear BitBake's caches.
Alternatively if you don't already have a local source tree but would still like to modify the package, invoking devtool modify ${PACKAGE}
will handle the fetch, unpack and patch phases for you and drop a source tree into your default workspace location.
When you are all done, run devtool reset ${PACKAGE}
to remove the .bbappend
from the devtool Yocto layer.
Further information on devtool can be found in the Yocto Mega Manual.