RDK adopted Yocto build framework over legacy build systems after considering many of its advantages such as:
- Easy migration to different hardware platform
- Reduces the build time
- Supports major embedded architectures
- Provides a layered mechanism
- Easy to extend the configuration
- Reduce the cost of development
- RDK wanted to have a common infrastructure which supports multiple architectures
- Standard Distribution and tools
- Focus on specific product features and development.
- Its looking for a scalable system to meet the RDK community needs.
- Collaborate on open source infrastructure.
RDK Yocto Layer Structure
The below diagram shows the Yocto layer structure designed to build RDK stack. Layer definition is present in build/conf/bblayers.conf
MSO specific recipes and configuration to be placed in
OEM specific recipes and configuration to be placed in
SoC specific recipes and configuration to be placed in
BSP layer and associated recipes:
- meta-rdk-bsp-<soc-bsp-layer> - example: meta-rdk-broadcom
- meta-rdk-bsp--<oem-bsp-layer> - example: meta-rdk-pace
- meta-rdk-bsp-skeleton - This is a sample BSP layer implementation
- recipes-bsp : Contains board specific recipes, for example OpenGL, Driver Specific on Board
- recipes-kernel : Contains recipes for machine specific kernel and drivers
- recipes-core : Contains recipes for modules like busybox, mtdtools, jpeg, etc.
- recipes-devtools : Machine specific developments tools like bison etc.
- recipes-extended : Machine specific RDK components, ex: iarmmgrs, mediaplayer, dshalapp etc.
- recipes-multimedia : Machine specific multimedia components like gstplayer, framebufffer etc.
- recipes-qt : Recipes related to SoC provided Qt and its components like Qt google browser, etc.
- recipes-support : Board specific support components like remote control libs etc.
Generic Yocto layers
The generic yocto layers are needed along with the BSP layer for the build. They are:
- meta-openembedded
- meta-rdk
- meta-java
- meta-virtualization
- openembedded-core
- meta-linaro (for toolchain cross compilation – ARM only)
- meta-qt5 (generic qt layer)
meta-rdk:
- Distribution policies(modeled from Poky)
- Common RDK component recipes
meta-cmf:
- Common RDK component recipe append files & patches
- Overrides the meta-rdk recipes
meta-rdk-bsp-emulator:
- Boards support layer
- Contains qemux86hyb and qemux86mc machines
- Reference for porting
- Create meta-rdk-bsp delta layers for existing BSPs
meta-cmf-bsp-emulator:
- Contains RDK component recipe append files & patches, which are required for RDK PC emulator
SoC Layer
Contents of SoC layer shall be
OEM Layer
Contents of OEM layer shall be
- recipes(.bbappend) to build Kernel if there is any OEM specific configuration or patch is required. It shall be a .bbappend file of corresponding recipe file in SoC layer
- recipes(.bbappend) to build SDK if there is any OEM specific configuration or patch is required.. It shall be a .bbappend file of corresponding recipe file in SoC layer
- recipes(.bb) for packaging the images
- Kernel patches (OEM specific - if any)
- SDK patches (OEM specific - if any)
- Any OEM specific scripts or files which need to be installed in RFS
- Device(machine) configuration file(.conf)
Separate layers must be available for an OEM, if different SoCs are used
"meta-rdk-oem-OEM-X-SOC-Y","meta-rdk-oem-OEM-X-SOC-Z“, etc.
The SoC / OEM layer shall NOT contain
- Source code
- Binaries
- Tools
- Tar balls (of any of the above)
Bitbake work-flow
- All the components are built using individual recipes. There shall be a main image recipe (example , rdk-generic-image) which includes all other required recipe and create the final RFS
- Package groups recipe is one support a image recipe to select the set of packages
- The recipes will be called in sequence
(1) opensource components
(2) Kernel
(3) SDK
(4) RDK
(5) MSO
(6) Packaging and create final image. - The final linux and RFS image will be created under build_folder/tmp/deploy/images
RDK Package Groups
- packagegroup-rdk-baserootfs - contains common generic RDK OSS components.
- packagegroup-rdk-oss-mediaserver - contains OSS components specific to media server
- packagegroup-rdk-oss-mediaclient - contains OSS components specific to mediaclient
- packagegroup-rdk-media-common - contains common RDK (non-OSS) components for mediaclient, mediaserver build types.
- packagegroup-rdk-generic-mediaserver - contains mediaserver specific RDK components
- packagegroup-rdk-generic-mediaclient - contains mediaclient specific RDK components
RDK Yocto Images
Yocto build Image target names roughly look like <RDK vendor>-<profile>-<build-type>-<developer>-image