The primary function of the Yocto Project within RDK development is the building and packaging of multiple components. RDK leverages the capabilities of the Yocto Project to create customized Linux-based software distributions that power devices like set-top boxes, smart TVs etc. To fully understand the concepts presented in this document, it is recommended to read RDK Yocto Build System Overview - DOCUMENTATION - RDK Central Wiki as an introduction to the concepts explored in this document.


Introduction

Folder overview in Yocto for RDK-V:

  1. meta-rdk-video/recipes-connectivity: This folder consists of recipes related to connectivity functionalities. These recipes provide components and utilities for establishing and managing network connections in RDK-V.

  2. meta-rdk-video/recipes-graphics: This folder contains recipes for graphics-related components in RDK-V. It includes recipes for graphical user interfaces (GUIs), graphics libraries, and rendering engines.

  3. meta-rdk-video/recipes-multimedia: This folder includes recipes for multimedia components in RDK-V. It covers recipes for audio playback, recording, multimedia frameworks, and related utilities.

  4. meta-rdk-video/recipes-core: This folder contains core recipes that are essential for RDK-V. It includes recipes for core system components, utilities, and configurations.

  5. meta-rdk-video/recipes-extended: This folder includes additional recipes that extend the functionality of RDK-V. It covers recipes for various extended components, tools, and services.

  6. meta-rdk-video/recipes-support: This folder contains recipes for support components in RDK-V. It includes recipes for debugging tools, logging utilities, and other support-related functionalities.

  7. meta-rdk-video/recipes-devtools: This folder contains recipes that provide development tools and utilities in RDK-B. These tools assist in the development and debugging processes, making it easier to build, test, and analyze the software.
  8. meta-rdk/recipes-video: This folder contains recipes related to video components in RDK-V. It includes recipes for video playback, streaming, codecs, and other video-related functionalities.

  9. meta-rdk-video/conf: conf files define various settings and variables that control the build process and customize the resulting embedded Linux system. It consists of distro and layer.conf file.

This document focuses on the example of the RDK video devicesettings module.The devicesettings module provides functionality related to device settings management within the context of the Raspberry Pi platform and the RDK (Reference Design Kit) video meta-layer.
devicesettings comes under these layers: meta-cmf-raspberrypi, meta-cmf-video, meta-rdk-video.

Module Structure

devicesettings module is structured as:

meta-rdk-video
|        └── recipes-extended
|          └── devicesettings
|               ├── devicesettings_git.bb
|               └── devicesettings-hal-headers_git.bb
|
meta-cmf-raspberrypi
           └── meta-rdk-video   
               └── recipes-extended
                   └── devicesettings
                      ├── devicesettings_git.bbappend
                      └── devicesettings-hal-raspberrypi_git.bb


The devicesettings recipe, represented by "devicesettings_git.bb", is responsible for building the devicesettings package from the corresponding source code. It defines the necessary build steps, dependencies, and configurations to create the devicesettings package, and in "devicesettings-hal-headers_git.bb", hal-specific definitions are available.

Also for devicesettings, certain overrides exist in other meta layers, which can be device specific, here we are focusing on raspberrypi device, there are dedicated recipe specific to the 'raspberrypi' hardware abstraction layer (HAL) and append file. 

Recipe Parameters

Below are some of the important parameters present in the recipes:

ParametersDescription
SRC_URIURI of source code, patches and extra files to be used to build packages. Uses different fetchers based on the URI.
DEPENDS/RDEPENDS_${PN}Build time and run time package dependencies, where ${PN} represents the package name defined in the recipe.
CFLAGS/CXXFLAGS/LDFLAGS environment variables commonly used in software development to specify compilation and linking options for C and C++ programs
do_install(), do_configure_prepend(), do_compile()These are integral parts of the build process, they enable developers to customize the configuration, compilation, and installation steps of software packages, providing flexibility and control over the build process.


Parameters in append file-
The *. bbappend file provided above is specifying additional CFLAGS (compiler flags) for the build process. 
The line CFLAGS += " -DHAS_HDCP_CALLBACK -DHAS_FLASH_PERSISTENT" adds two specific compiler flags to the existing CFLAGS.

  1. -DHAS_HDCP_CALLBACK: This flag defines the macro HAS_HDCP_CALLBACK, which indicates that the build should include support for HDCP (High-bandwidth Digital Content Protection) callback functionality.

  2. -DHAS_FLASH_PERSISTENT: This flag defines the macro HAS_FLASH_PERSISTENT, indicating that the build should include support for persistent storage on Flash memory.

In this example, we are referring to the above mentioned append file. Similarly, if we need to include any additional modifications to the recipe, we can do so by adding them in the append file within the SOC and OEM layers.


Building the Module

To build the devicesettings module, execute the following command with Bitbake:"bitbake lib32-devicesettings"

We can add the Install task bitbake command, which can be helpful if modifications have been made to the devicesettings source code and there is a need to copy the resulting binaries and libraries from the devicesettings build directory to the target system. The following command can be used:

Install bitbake -c install -f devicesettings

If someone needs to execute a task-wise module, the following commands can be used:

ActionBitbake command
configurebitbake -c configure -f lib32-devicesettings
compilationbitbake -c compile -f lib32-devicesettings
cleanallbitbake -c cleanall lib32-devicesettings
cleansstatebitbake -c cleansstate lib32-devicesettings


If we want to list down rdkv specific components- Execute bitbake -s it will list down all the components.

RDK Package Groups

During the image creation phase of the build process, package groups are added to organize and include related packages in the final image.
devicesettings module is included in:
meta-rdk/recipes-core/packagegroup/packagegroup-rdk-media-common.bb

  • packagegroup-rdk-media-common - contains common RDK (non-OSS) components for mediaclient, mediaserver build types. These components are essential for building media-related functionalities in RDK-based systems.

Yocto Build Images

  • 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- opensource components, Kernel, SDK, RDK, MSO, Packaging and create final image.
  • The final linux and RFS  image will be created under build_folder/tmp/deploy/images

Target image name:-

Image nameDescription
rdk-generic-hybrid-imageA generic RDK build for hybrid devices with QAM-based tuners, enabling streaming and broadcasting of QAM content.
rdk-oss-imageAn RDK image based on open-source software components, providing flexibility and customization options.
rdk-generic-mediaclient-imageA generic RDK build for media client devices capable of streaming IP-based or QAM content from hybrid devices.
rdk-generic-ipclient-imageA generic RDK build for IP client devices, suitable for scenarios where an RDK license is not mandatory.

Yocto build Image target names are of format- <RDK vendor>-<profile>-<build-type>-<developer>-image
Example-

rdk-generic-mediaclient-wpe-image_FBT_6.0.0-rc4_20231108131757.rootfs.wic
rdk-generic-mediaclient-wpe-image_FBT_6.0.0-rc4_20231108131757.rootfs.wic.bz2
rdk-generic-mediaclient-wpe-image_FBT_6.0.0-rc4_20231108131757.rootfs.tar.gz


 Debugging:

When facing errors or failures while executing a bitbake action, such as compilation or configuration errors, the specific log files can be found in the following directory structure:
Path: build-raspberrypi4-64-rdk-android-ipmc/tmp/work/raspberrypi4_64_rdk_android_ipmc-rdk-linux/devicesettings/5+gitr999-r0/temp/
Example

  • log.do_compile: This file contains the error logs related to the compilation process. It provides information about any issues encountered during the translation of source code into executable or object files.

  • log.do_configure: This file contains the error logs associated with the configuration step. It helps identify any problems encountered while setting up the build configuration, such as missing dependencies or incorrect settings.

Example
ERROR: lib32-devicesettings-5+gitr999-r0 do_compile: oe_runmake failed
ERROR: Logfile of failure stored in: ~/rpi_build/raspberrypi4-64-rdk-hybrid/tmp/work/armv7at2hf-neon-vfpv4-rdkmllib32-linux-gnueabi/lib32-devicesettings/5+gitr999-r0/temp/log.do_compile.4085187

The provided example demonstrates a compilation error in the "devicesettings" package. The details of the error can be found in the specified log file, which can be analyzed by searching for the keyword "error".

The path provided in the example is specific to the mentioned build environment. In your actual working environment, the paths may differ depending on the build system or project structure you are using.


  • No labels