
{"id":10068,"date":"2024-04-15T04:24:20","date_gmt":"2024-04-15T04:24:20","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview-2\/"},"modified":"2025-03-25T05:18:37","modified_gmt":"2025-03-25T05:18:37","slug":"rdk_yocto_build_system_overview","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/","title":{"rendered":"RDK Yocto Build System Overview"},"content":{"rendered":"<div class=\"contentLayout2\">\n<div class=\"columnLayout two-right-sidebar\" data-layout=\"two-right-sidebar\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n\n\n<h2 class=\"wp-block-heading wp-main-header\"><strong>Yocto Overview<\/strong><\/h2>\n\n\n<p><span><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">The&nbsp;<\/span><span class=\"NormalTextRun SCXW190212254 BCX8\">Yocto<\/span><span class=\"NormalTextRun SCXW190212254 BCX8\"> Project provides tools, templates, and methodologies to build custom Linux-based software distributions for embedded systems. It enables developers to create optimized Linux images for a wide range of devices, including IoT devices, embedded systems, and appliances, with flexibility and customization options.<\/span><span class=\"NormalTextRun SCXW190212254 BCX8\"> For more you can visit<\/span><span class=\"NormalTextRun SCXW190212254 BCX8\"> <\/span><\/span><a class=\"external-link\" href=\"https:\/\/docs.yoctoproject.org\/overview-manual\/index.html\" rel=\"nofollow\"><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">Yocto Project Overview and Concepts Manual<\/span><\/span><\/a><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">.<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW190212254 BCX8\"><span class=\"SCXW190212254 BCX8\">&nbsp;<\/span><\/span><\/span><\/p>\n<\/p>\n<\/div>\n<\/div>\n<div class=\"cell aside\" data-type=\"aside\">\n<div class=\"innerCell\">\n<div class=\"toc-macro client-side-toc-macro conf-macro output-block\" data-headerelements=\"H1,H2,H3\" data-hasbody=\"false\" data-macro-name=\"toc\"><\/div>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<hr><\/div>\n<\/p>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n\n\n<h2 class=\"wp-block-heading wp-main-header\"><strong>Yocto in RDK<\/strong><\/h2>\n\n\n<p>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 the devices like set-top boxes, smart TVs etc. <br \/>Advantages- <\/p>\n<ul>\n<li>An automated build system that streamlines the compilation, configuration, and packaging processes.<\/li>\n<li>Support for major embedded architectures<\/li>\n<li>A layered mechanism for configuration extension, <\/li>\n<li>Developers benefit from features such as easy migration to different hardware platforms.<\/li>\n<\/ul>\n<h3 id=\"RDKYoctoBuildSystemOverview-RDKYoctoLayerStructure\"><strong>RDK Yocto Layer Structure<\/strong><\/h3>\n<p><span class=\"TextRun SCXW234882200 BCX8\"><span class=\"NormalTextRun SCXW234882200 BCX8\">The RDK <\/span><span class=\"NormalTextRun SCXW234882200 BCX8\">Yocto<\/span><span class=\"NormalTextRun SCXW234882200 BCX8\"> layer structure is designed to build the RDK stack for embedded devices using the <\/span><span class=\"NormalTextRun SCXW234882200 BCX8\">Yocto<\/span><span class=\"NormalTextRun SCXW234882200 BCX8\"> Project and the <\/span><span class=\"NormalTextRun SCXW234882200 BCX8\">OpenEmbedded<\/span><span class=\"NormalTextRun SCXW234882200 BCX8\"> build system.<\/span><\/span><span class=\"EOP SCXW234882200 BCX8\"> <\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png\" \/><\/p>\n<p>The layer structure consists of the following components: <\/p>\n<ul>\n<li><strong>meta-rdk-&lt;operator&gt;<\/strong>: This layer contains operator-specific recipes and configurations. It focuses on customizations and configurations specific to individual operators.<\/li>\n<li><strong>meta-rdk-soc\/oem<\/strong>: This layer includes system-on-chip (SoC) or original equipment manufacturer (OEM) specific recipes and configurations. <br \/>If there are multiple target platforms under the same SOC\/OEM, they can be appended to the layer and differentiated using model names. For example: <br \/>meta-rdk-soc-skyworth-rtd <br \/>meta-rdk-soc-skyworth-hx4x <\/li>\n<\/ul>\n<ul>\n<li><strong>meta-rdk<\/strong>: This layer contains common RDK component recipes and distribution policies. It serves as the central layer for RDK (Reference Design Kit) components and provides a standardized set of recipes and configurations for RDK-based systems.<br \/>meta-rdk-video- It is focused on video-related recipes and configurations for RDK-based systems. <br \/>meta-rdk-ext-These are extension layer that provides additional recipes, components, and configurations for RDK-based systems. Example- webkit.<\/li>\n<li><strong>meta-openembedded<\/strong>: This layer is part of the OpenEmbedded project, which provides a collection of open-source recipes and components for embedded systems. It includes a wide range of recipes and configurations that can be leveraged to build customized embedded systems. This layer offers additional flexibility and options for extending the functionality of the RDK-based system.<\/li>\n<li>\n<p><strong>meta-cmf-&lt;operator&gt;<\/strong>: This layer contains CMF recipes and configurations specific to operator customizations. It provides a framework for operator-specific modifications, such as branding, custom applications, or services tailored to their specific requirements.<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"RDKYoctoBuildSystemOverview-Meta-Layers\"><strong>Meta-Layers<\/strong><\/h3>\n<p>Meta-layers contains configuration, recipes, classes, and patches. These include configuration files (*.conf), classes (*.bbclass), and recipes (*.bb, *.bbappend), which are the logical units of software\/images to build. <\/p>\n<p>RDK meta-layers provide the necessary components, recipes, and configurations to build the RDK stack. <\/p>\n<ul>\n<li><strong>meta<\/strong><strong>-rdk<\/strong>: layer includes common RDK components and follows distribution policies based on the Poky project. <\/li>\n<li><strong>meta-rdk-bsp<\/strong>: BSP layers, such as meta-rdk-bsp and meta-rdk-bsp-&lt;soc-bsp-layer&gt; or meta-rdk-bsp-&lt;oem-bsp-layer&gt;, provide the necessary components, recipes, and configurations to build the RDK stack.  <br \/>Examples of BSP layers include meta-rdk-broadcom and meta-rdk-pace. <\/li>\n<li><strong>meta-raspberrypi<\/strong>: Boards support layer, Reference for porting, Create meta-rdk-bsp delta layers for existing BSPs <\/li>\n<\/ul>\n<p>Example:- Meta layers contain recipes <\/p>\n<p>Reference- <br \/>\u251c\u2500\u2500 conf <br \/>\u251c\u2500\u2500 recipes-bsp <br \/>\u251c\u2500\u2500 recipes-core <br \/>\u251c\u2500\u2500 recipes-devtools <br \/>\u251c\u2500\u2500 recipes-extended <br \/>\u251c\u2500\u2500recipes-connectivity<br \/>\u251c\u2500\u2500 recipes-networking <br \/>\u251c\u2500\u2500 recipes-graphics<br \/>\u2514\u2500\u2500 scripts <\/p>\n<\/p>\n<p>Under recipe one can find- eg <br \/>recipes-core <br \/>glibc<br \/>\u251c\u2500\u2500 glibc_2.3%.bbappend<br \/>\u2514\u2500\u2500 glibc_%.bbappend<br \/>glib-networking<br \/>\u2514\u2500\u2500 glib-networking_2.48.2.bb<br \/>glib-openssl<br \/>\u251c\u2500\u2500 files<br \/>\u2502  \u251c\u2500\u2500 relax_read_error_handling.patch<br \/>\u2514\u2500\u2500 glib-openssl_2.50.3.bb <\/p>\n<h3 id=\"RDKYoctoBuildSystemOverview-Recipes\">Recipes <\/h3>\n<p>Recipes are the most basic metadata files denoted by the file extension *.bb. Recipes can build one or more packages from source code.  <\/p>\n<p>Some of the essential parameters used in recipes are mentioned below:<\/p>\n<div class=\"table-wrap\"> <\/div>\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup class=\"\"><col class=\"\" style=\"width: 10.6421%\"><col class=\"\" style=\"width: 50.4924%\"><col class=\"\" style=\"width: 38.9277%\"><\/colgroup><tbody class=\"\"><tr class=\"\"><th class=\"confluenceTh\">Parameters<\/th><th class=\"confluenceTh\">Description<\/th><th class=\"confluenceTh\">Example<\/th><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span>source code URI (SRC_URI)<\/span><\/td><td class=\"confluenceTd\"><span>The SRC_URI variable is used to specify the source files that are needed to build a recipe. It can point to different locations, such as online repositories, local directories, or mirrors. It&nbsp;supports various protocols, such as git, http, ftp, file, etc<\/span><\/td><td class=\"confluenceTd\"><span><span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">SRC_URI = &#8220;<a href=\"\/\/github.com\/rdkcentral\/rdkperf;protocol=git;branch=main\" rel=\"nofollow\" class=\"rdk-inside-table\">git:\/\/github.com\/rdkcentral\/rdkperf;protocol=git;branch=main<\/a>&#8220;<\/span><\/span><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span>source revision (SRCREV)<\/span><\/td><td class=\"confluenceTd\"><span>We use source revision (SRCREV) to specify the exact revision of the source code that we want to use for a recipe&nbsp;<\/span><\/td><td class=\"confluenceTd\"><span>\/*SRCREV \u2013 specifies the specific revision *\/&nbsp;<br>SRCREV_ = &#8220;${AUTOREV}&nbsp;<\/span><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span><span>package version (<\/span><span>PV<\/span><span>)<\/span><\/span><\/td><td class=\"confluenceTd\"><span>Package version also allows user to choose the most suitable or preferred version of software for their needs.<\/span><\/td><td class=\"confluenceTd\"><span>\/*PV \u2013 Package version*\/&nbsp;<br>PV = &#8220;${RDK_RELEASE}+git${SRCPV}&#8221;&nbsp;<\/span><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span><span>source directory (<\/span><span>S<\/span><span>),<\/span><span>&nbsp;<\/span><\/span><\/td><td class=\"confluenceTd\"><span>The source directory (S) is&nbsp; the location in the build Directory when unpacked recipe source code resides.<\/span><\/td><td class=\"confluenceTd\"><span>\/*S \u2013 Source dir*\/&nbsp;<br>S = &#8220;${WORKDIR}\/git\/&#8221;&nbsp;<\/span><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span>CFLAGS\/LDFLAGS<\/span><\/td><td class=\"confluenceTd\"><span>CFLAGS is a recipe parameter that allows you to specify compiler flags for the C programming language and LDFLAGS are to specify linker flags during the build process&nbsp;<\/span><\/td><td class=\"confluenceTd\">CFLAGS += &#8220;-O2&#8221;<br>LDFLAGS += &#8220;-L<span>${WORKDIR}<\/span>\/mylib -1mylib&#8221;<\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span>DEPEND<\/span><\/td><td class=\"confluenceTd\"><span>DEPEND is a recipe parameter that defines the dependencies of a specific component or recipe<\/span><\/td><td class=\"confluenceTd\">DEPENDS += &#8220;python3&#8221;<\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><span>do_install ()<\/span><\/td><td class=\"confluenceTd\"><span>It is a task function in a recipe that is responsible for installing the built files of the package<\/span><\/td><td class=\"confluenceTd\"><span>do_install () &nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp; install -d $ {D}${bindir}<br>&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/td><\/tr><\/tbody><\/table>\n\n\n<p>Additionally, there are append files (*.bbappend) that extend or modify existing recipes.  <\/p>\n<p><strong>Patching<\/strong><\/p>\n<div class=\"confluence-information-macro confluence-information-macro-note conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"note\">\n<div class=\"confluence-information-macro-body\">\n<p>Recommended Approach-<br \/>If we are making any changes, we need to upstream those changes to the corresponding repositories rather than creating patches.<\/p>\n<\/div>\n<\/div>\n<p>More information on patches can be found in below section.<\/p>\n<div id=\"expander-860333003\" class=\"expand-container conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"expand\">\n<div id=\"expander-content-860333003\" class=\"expand-content expand-hidden\" role=\"region\" aria-labelledby=\"expand-button-860333003\">\n<p>Patches can be applied to recipe files. Patch files extension *.patch. Place the patch file in subdirectory of recipe named (component) folder. The subdirectory should be preferably named as that of component or as \u2018files\u2019. Add the below line to the recipe file<br \/>SRC_URI += \u201c<a class=\"external-link\" rel=\"nofollow\">file:\/\/temp.patch<\/a>\u201c<\/p>\n<p>This section describes how to make changes and build any particular component in RDK stack. <\/p>\n<p class=\"auto-cursor-target\"><strong>Apply Patch and Build Component<\/strong><\/p>\n<p>1) Add the below line to the recipe of the component you need to modify.<\/p>\n<p>        SRC_URI += \u201cfile:\/\/&lt;name&gt;.patch\u201d                              <\/p>\n<p>        eg:  SRC_URI += \u201c<a class=\"external-link\" rel=\"nofollow\">file:\/\/temp.patch<\/a>\u201d in  <span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">meta-rdk\/recipes-common\/breakpad_wrapper\/breakpad-wrapper.bb<\/span>                           <\/p>\n<p>2) Create a folder named \u201cfiles\u201d in the same folder of recipe. <\/p>\n<p>eg: In meta-rdk-video\/recipes-extended\/<span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">breakpad-wrapper.bb<\/span>\/<\/p>\n<p>3) Create a blank file with the same name given in the recipe.<\/p>\n<p>         touch files\/&lt;name&gt;.patch <\/p>\n<p>         eg: touch files\/temp.patch                             <\/p>\n<p>4) bitbake &lt;recipe&gt; -c devshell        <\/p>\n<p>5) Do \u201cquilt top\u201d and verify if the patch file is reflected there. <\/p>\n<p>    eg:<\/p>\n<p>        # quilt top<\/p>\n<p>        patches\/temp.patch<\/p>\n<p>6) quilt add \u201cfilename which you need to modify\u201d (If multiple files are there, then add all those)<\/p>\n<p>        eg: quilt add <a class=\"external-link\" href=\"http:\/\/makefile.am\/\" rel=\"nofollow\">Makefile.am<\/a> <a class=\"external-link\" href=\"http:\/\/configure.ac\/\" rel=\"nofollow\">configure.ac<\/a>              <\/p>\n<p>7) Make necessary modifications required for these files.<\/p>\n<p>8) quilt refresh<\/p>\n<p>9) Verify if your modifications are reflected in the patch file.<\/p>\n<p>         vi patches\/&lt;name&gt;.patch<\/p>\n<p>10) Now replace this patch file with original one in files folder.<\/p>\n<p>         eg: cp patches\/temp.patch ~\/\u2026\/<span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">meta-rdk\/recipes-common\/breakpad_wrapper\/files\/temp.patch<\/span><\/p>\n<p>11) exit<\/p>\n<p>12) Do a clean and then build.<\/p>\n<p>bitbake -ccleanall <span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">breakpad_wrapper<\/span> <\/p>\n<p>bitbake <span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">breakpad_wrapper<\/span><\/p>\n<\/p>\n<\/div>\n<\/div>\n<p><strong>External SRC and non external src<\/strong> <\/p>\n<p>External SRC is used in the Yocto Project to specify an external source for a recipe. By setting the EXTERNALSRC variable, you can build software from a source located outside the default Build directory. To use an external source, inherit the externalsrc class and set EXTERNALSRC to the path of your source code. For example:<\/p>\n<p>INHERIT += &#8220;externalsrc&#8221;<br \/>EXTERNALSRC_pn-myrecipe = &#8220;path-to-your-source-tree&#8221;<\/p>\n<p>By default, the externalsrc.bbclass builds the source code in a separate directory, but you can set EXTERNALSRC_BUILD to specify a different directory. For more details, refer to the  <a class=\"external-link\" href=\"https:\/\/docs.yoctoproject.org\/2.5\/overview-manual\/overview-manual.html\" rel=\"nofollow\"><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">Yocto Project Overview and Concepts Manual<\/span><\/span><\/a><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">.<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW190212254 BCX8\"><span class=\"SCXW190212254 BCX8\"> <\/span><\/span><\/p>\n<\/p>\n<p>Non external SRC is the default way of building a recipe, where the source files are fetched from the SRC_URI variable. This can be a local file, a remote URL, a git repository, or any other supported protocol. The source files are then unpacked, patched, configured, compiled, and packaged by the Yocto build system. <\/p>\n<p>Example- It is usually present in the recipe files<br \/><span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\">SRC_URI = &#8220;<a href=\"\/\/github.com\/rdkcentral\/rdkperf;protocol=git;branch=main\" rel=\"nofollow\">git:\/\/github.com\/rdkcentral\/rdkperf;protocol=git;branch=main<\/a>&#8220;<\/span><\/p>\n<\/p>\n<p><strong>The SoC \/ OEM layer Recommended Practice<\/strong>     <\/p>\n<ul>\n<li>Create a new layer which will hold all the recipes and machine configurations for the new SoC\/OEM.<\/li>\n<li>Adding the Machine Configuration File for the new SoC\/OEM.<\/li>\n<li>Adding a Kernel for the Machine.<\/li>\n<li>Adding Recipe for SoC\/OEM<\/li>\n<li>Creating packages for building images<\/li>\n<li>Separate layers must be available for an OEM, if different SoCs are used <br \/>&#8220;meta-rdk-soc-X-oem-Y&#8221;,&#8221;meta-rdk&#8211;soc-X-oem-Z&#8221;, etc<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download2.png\" alt=\"\" \/><\/p>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<hr \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\"> <\/div>\n<\/div>\n<\/div>\n\n\n<h2 class=\"wp-block-heading wp-main-header\"><strong>Quick References<\/strong><\/h2>\n\n\n<p>This guide is intended to help developers understand the Yocto framework in RDK so they can extend the existing functionality.&nbsp;<\/p>\n<h3 class=\"wp-sub-header\" style=\"text-align: left\" id=\"RDKYoctoBuildSystemOverview-BitBakeMainTasks\"><strong>BitBake Main Tasks<\/strong><\/h3>\n<p>Bitbake executes all the layers starting with a prefix &lsquo;meta&rsquo;. It parses the build classes, configuration files, and recipes and executes each task by creating a shell script on-the-fly.<\/p>\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup class=\"\"><col class=\"\" style=\"width: 14.2288%\"><col class=\"\" style=\"width: 67.5637%\"><col class=\"\" style=\"width: 18.1779%\"><\/colgroup><tbody class=\"\"><tr class=\"\"><th class=\"confluenceTh\">TASK<\/th><th class=\"confluenceTh\">DESCRIPTION<\/th><th class=\"confluenceTh\">FUNCTION<\/th><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Fetch<\/p><\/td><td class=\"confluenceTd\"><p>Fetches the source code<\/p><\/td><td class=\"confluenceTd\"><p>do_fetch<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>Unpack<\/p><\/td><td class=\"confluenceTd\"><p>Unpacks the source code into a working directory<\/p><\/td><td class=\"confluenceTd\"><p>do_unpack<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Patch<\/p><\/td><td class=\"confluenceTd\"><p>Locates patch files and applies them to the source code<\/p><\/td><td class=\"confluenceTd\"><p>do_patch<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Configure<\/p><\/td><td class=\"confluenceTd\"><p>Configures the source by enabling and disabling any build-time and configuration options for the software being built<\/p><\/td><td class=\"confluenceTd\"><p>do_configure<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Compile<\/p><\/td><td class=\"confluenceTd\"><p>Compiles the source in the compilation directory<\/p><\/td><td class=\"confluenceTd\"><p>do_compile<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Install<\/p><\/td><td class=\"confluenceTd\"><p>Copies files from the compilation directory to a holding area<\/p><\/td><td class=\"confluenceTd\"><p>do_install<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Populate SYSROOT<\/p><\/td><td class=\"confluenceTd\"><p>Copies a subset of files installed by do_install into the sysroot in order to make them available to other recipes<\/p><\/td><td class=\"confluenceTd\"><p>do_populate_sysroot<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Package<\/p><\/td><td class=\"confluenceTd\"><p>Analyzes the content of the holding area and splits it into subsets based on available packages and files<\/p><\/td><td class=\"confluenceTd\"><p>do_package<\/p><\/td><\/tr><tr class=\"\"><td class=\"confluenceTd\"><p>Root FS<\/p><\/td><td class=\"confluenceTd\"><p>Creates the root filesystem (file and directory structure) for an image<\/p><\/td><td class=\"confluenceTd\"><p>do_rootfs<\/p><\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n<h3 id=\"RDKYoctoBuildSystemOverview-Configuration\"><span>Configuration<\/span><\/h3>\n<p>Configuration (*.conf) comprises of global definition of variables. <span>They define various settings and variables that control the build process and customize the resulting embedded Linux system. Here are some commonly used configuration files and their purposes:<\/span><\/p>\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 25.8556%\"><col style=\"width: 46.4289%\"><col style=\"width: 27.7985%\"><\/colgroup><tbody><tr><th scope=\"col\" class=\"confluenceTh\"><span>File Name<\/span><\/th><th scope=\"col\" class=\"confluenceTh\"><span>Description<\/span><span>&nbsp;<\/span><\/th><th scope=\"col\" class=\"confluenceTh\"><span>Configuration file path<\/span><\/th><\/tr><tr><td class=\"confluenceTd\"><span>layer.conf<\/span><span>&nbsp;<\/span><\/td><td class=\"confluenceTd\"><span>Configuration file for Yocto Project layers, defining metadata and layer-specific settings.<br><\/span><span><span>It contains<\/span><span> definitions such as <br>BB<\/span>PATH, BBFILES, LAYERDEPENDS_cmf-raspberrypi<\/span><span>&nbsp;<\/span><\/td><td class=\"confluenceTd\"><span>meta-cmf-raspberrypi\/conf\/layer.conf<\/span><\/td><\/tr><tr><td class=\"confluenceTd\"><span>machine\/&lt;configuration_file_name&gt;.conf<\/span><span>&nbsp;<br><\/span><span>Eg- raspberrypi4-64-rdk-hybrid.conf<\/span><\/td><td class=\"confluenceTd\"><span class=\"TextRun SCXW105534278 BCX8\"><span class=\"NormalTextRun SCXW105534278 BCX8\">Machine\/BSP-specific configuration file. It <\/span><span class=\"NormalTextRun SCXW105534278 BCX8\">contains<\/span><span class=\"NormalTextRun SCXW105534278 BCX8\"> extensions and customizations for a specific machine. <br>Defines MACHINE_IMAGE_NAME, DISTRO_FEATURES_append, ENABLE_HDMI_FORCE_HOTPLUG<\/span><\/span><\/td><td class=\"confluenceTd\"><span>meta-cmf-raspberrypi\/conf\/machine<\/span><span>\/xxx.conffiles<\/span><\/td><\/tr><tr><td class=\"confluenceTd\"><span>auto.conf<\/span><span>&nbsp;<\/span><\/td><td class=\"confluenceTd\"><p><span><span>This file is automatically generated and resides in the build directory. It is used for customizing and controlling the build process.&nbsp;<\/span><br><\/span><span>Defines variables such as&nbsp;&nbsp;PACKAGE_CLASSES, LICENSE_FLAGS_WHITELIST, PACKAGECONFIG<\/span><\/p><\/td><td class=\"confluenceTd\"><span>build-raspberrypi4-64-rdk-android-mc\/conf\/auto.conf<\/span><span>&nbsp;<\/span><\/td><\/tr><tr><td class=\"confluenceTd\"><span>bblayers.conf<\/span><span>&nbsp;<\/span><\/td><td class=\"confluenceTd\"><p><span><span>Manages layer configuration, specifying enabled layers and their paths.<br><\/span><\/span><span>Defines variables such as LCONF_VERSION, BBPATH, BBFILES, RDKROOT, BBLAYERS.<\/span><span>&nbsp;<\/span><\/p><\/td><td class=\"confluenceTd\"><p><span>build-raspberrypi4-64-rdk-android-mc\/conf\/bblayers.conf<\/span><\/p><p><span>&nbsp;<\/span><\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><span>local.conf&nbsp;<\/span><\/td><td class=\"confluenceTd\"><p><span><span>User-editable configuration file for customizing the build environment and embedded Linux system.<\/span> <br><\/span><span>Defines variables such as BB_NUMBER_THREADS, DISTRO,DL_DIR,SSTATE_DIR, EXTRA_IMAGE_FEATURES,INHERIT,&nbsp;&nbsp;DISTRO_CODENAME,&nbsp; CONF_VERSION.<\/span><span>&nbsp;<\/span><\/p><\/td><td class=\"confluenceTd\"><p><span>build-raspberrypi4-64-rdk-android-mc\/conf\/local.conf<\/span><\/p><\/td><\/tr><\/tbody><\/table>\n\n\n<p><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">For more you can visit<\/span> <\/span><a class=\"external-link\" href=\"https:\/\/docs.yoctoproject.org\/2.5\/overview-manual\/overview-manual.html\" rel=\"nofollow\"><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">Yocto Project Overview and Concepts Manual<\/span><\/span><\/a><span class=\"TextRun SCXW190212254 BCX8\"><span class=\"NormalTextRun SCXW190212254 BCX8\">.<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW190212254 BCX8\"><span class=\"SCXW190212254 BCX8\"> <\/span><\/span><\/p>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\"> <\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Yocto Overview The&nbsp;Yocto Project provides tools, templates, and methodologies to build custom Linux-based software distributions [&hellip;]<\/p>\n","protected":false},"author":1018,"featured_media":0,"parent":207,"menu_order":9,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-10068","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RDK Yocto Build System Overview - RDK Documentation Portal | Support<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RDK Yocto Build System Overview - RDK Documentation Portal | Support\" \/>\n<meta property=\"og:description\" content=\"Yocto Overview The&nbsp;Yocto Project provides tools, templates, and methodologies to build custom Linux-based software distributions [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Support\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-25T05:18:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/\",\"name\":\"RDK Yocto Build System Overview - RDK Documentation Portal | Support\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png\",\"datePublished\":\"2024-04-15T04:24:20+00:00\",\"dateModified\":\"2025-03-25T05:18:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#primaryimage\",\"url\":\"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png\",\"contentUrl\":\"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png\",\"width\":860,\"height\":334},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/support\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Support\",\"item\":\"https:\/\/developer.rdkcentral.com\/support\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Articles\",\"item\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"RDK Yocto Build System Overview\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/support\/\",\"name\":\"RDK Documentation Portal | Support\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/support\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RDK Yocto Build System Overview - RDK Documentation Portal | Support","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/","og_locale":"en_US","og_type":"article","og_title":"RDK Yocto Build System Overview - RDK Documentation Portal | Support","og_description":"Yocto Overview The&nbsp;Yocto Project provides tools, templates, and methodologies to build custom Linux-based software distributions [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/","og_site_name":"RDK Documentation Portal | Support","article_modified_time":"2025-03-25T05:18:37+00:00","og_image":[{"url":"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/","url":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/","name":"RDK Yocto Build System Overview - RDK Documentation Portal | Support","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/support\/#website"},"primaryImageOfPage":{"@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#primaryimage"},"image":{"@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#primaryimage"},"thumbnailUrl":"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png","datePublished":"2024-04-15T04:24:20+00:00","dateModified":"2025-03-25T05:18:37+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#primaryimage","url":"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png","contentUrl":"https:\/\/developer.rdkcentral.com\/support\/wp-content\/uploads\/sites\/21\/2024\/05\/download1.png","width":860,"height":334},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/rdk_yocto_build_system_overview\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/support\/"},{"@type":"ListItem","position":2,"name":"Support","item":"https:\/\/developer.rdkcentral.com\/support\/"},{"@type":"ListItem","position":3,"name":"Articles","item":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/"},{"@type":"ListItem","position":4,"name":"RDK Yocto Build System Overview"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/support\/#website","url":"https:\/\/developer.rdkcentral.com\/support\/","name":"RDK Documentation Portal | Support","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/support\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/10068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/users\/1018"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/comments?post=10068"}],"version-history":[{"count":11,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/10068\/revisions"}],"predecessor-version":[{"id":10309,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/10068\/revisions\/10309"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/207"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/media?parent=10068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}