Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Note : - Repo commands will not fetch any of the source code. Instead fetch the recipes which will have the URIs of source code repositories.

Building

To build a Yocto project, the following sample steps are necessary

...

Note: build-<machine> (e.g. build-oem-platform) - This is the object/build directory, all objects and intermediate files for all components are stored in this folder. if you want to do a clean build you can delete this folder, then run ./meta-cmf/setup-environment and rebuild. The build will be very fast since it will reuse the sstate (prebuilts) during this build, assuming the sstate-cache directory was populated with previous builds already.

Build the image

bitbake <Image Name>

For Eg :

...

The repo tool is used to set up the workspace and bitbake is used to facilitate builds. The following commands serve to illustrate the steps involved in building for a platform

$ repo init -u https://<URL>/r/<platform manifests> -b master -m oem-soc-platform.xml --no-repo-verify
$ repo sync
 (patch qtwebsockets, jquery in generic subdirectory where externalsrc source trees are located)
$ MACHINE=oem-platform . ./meta-cmf/setup-environment
$ bitbake cmf-generic-mediaclient-image

summary


  • repo init downloads the repo manifest and initializes it.
  • platform manifests is the repository that contains all manifests.
  • oem-soc-platform.xml is the OEM's specific platform manifest, containing URLs used to build the platform. A snippet of this manifest is illustrated below.
  • repo sync downloads all the meta data and the source code required to build the platform image.
  • bitbake uses recipes in order to figure out how to build each component. There are several images supported.


In a normal Yocto build build, the repo sync command would download the metadata and then bitbake, upon execution, would download the code and build. In this instance, the repo sync command downloads not just the recipes but also the code for individual components using a Yocto/OE feature called EXTERNALSRC.

Note: The RDKM CMF Gerrit does not distribute OEM/SoC specific meta layers or platform manifests. It is necessary to contact the SoC vendor for these packages and supporting information.

example manifest file snippet

The following sample manifest file assumes a Pace Broadcom platform :

<!-- Yocto OpenEmbedded build environment -->
    <project path="build/workspace/platform/openembedded-core" remote="github" name="openembedded/openembedded-core" groups="oe,rdk" revision="daisy"/>
    <project path="build/workspace/platform/openembedded-core/bitbake" remote="github" name="openembedded/bitbake" groups="oe,rdk" revision="1.22"/>
    <project path="build/workspace/platform/meta-openembedded" remote="github" name="openembedded/meta-openembedded" groups="oe,rdk" revision="daisy"/>
    <project path="build/workspace/platform/meta-qt5" remote="github" name="meta-qt5/meta-qt5" groups="oe,rdk" revision="daisy"/>
    <project path="build/workspace/platform/meta-linaro" remote="linaro" name="openembedded/meta-linaro" groups="oe,rdk" revision="daisy"/>
    <project path="build/workspace/platform/meta-browser" remote="github" name="OSSystems/meta-browser" groups="oe,rdk" revision="63963cc56c8d0291779693e62b66cb16e5c86883" upstream="master"/>
    <project path="build/workspace/platform/meta-java" remote="yocto" name="meta-java" groups="oe,rdk" revision="master"/>
<!-- Yocto OpenEmbedded patches for CMF Yocto builds -->
    <project path="build/workspace/platform/patches/rdk-oe" name="components/opensource/patches/rdk-oe"/>
<!-- Yocto RDK build environment -->
    <project path="build/workspace/platform/meta-rdk" name="components/generic/rdk-oe/meta-rdk"/>
    <project path="build/workspace/platform/meta-rdk-soc-broadcom" name="mirrors/yocto_oe/layers/meta-rdk-soc-broadcom" remote="mirrors"/>
    <project path="build/workspace/platform/meta-rdk-oem-pace-broadcom" name="mirrors/yocto_oe/layers/meta-rdk-oem-pace-broadcom" remote="mirrors"/>

<!-- CMF override build environment -->
    <project path="build/workspace/platform/meta-cmf" name="components/generic/rdk-oe/meta-cmf"/>
    <project path="build/workspace/platform/meta-cmf-qt5" name="components/generic/rdk-oe/meta-cmf-qt5"/>
    <project path="build/workspace/platform/meta-cmf-brcm" name="platforms/yocto/meta-cmf-brcm"/>
    <project path="build/workspace/platform/meta-cmf-brcm-rdk" name="platforms/yocto/meta-cmf-brcm-rdk"/>
    <project path="build/workspace/platform/meta-cmf-comcast" name="platforms/yocto/meta-cmf-comcast"/>
    <project path="build/workspace/platform/meta-cmf-pacebrcm" name="platforms/yocto/meta-cmf-pacebrcm"/>
    <project path="build/workspace/platform/meta-cmf-pacexi3v2" name="platforms/yocto/meta-cmf-pacexi3v2"/>