1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK 2 3========================= 4Yocto Project Quick Build 5========================= 6 7Welcome! 8======== 9 10This short document steps you through the process for a typical 11image build using the Yocto Project. The document also introduces how to 12configure a build for specific hardware. You will use Yocto Project to 13build a reference embedded OS called Poky. 14 15.. note:: 16 17 - The examples in this paper assume you are using a native Linux 18 system running a recent Ubuntu Linux distribution. If the machine 19 you want to use Yocto Project on to build an image 20 (:term:`Build Host`) is not 21 a native Linux system, you can still perform these steps by using 22 CROss PlatformS (CROPS) and setting up a Poky container. See the 23 :ref:`dev-manual/start:setting up to use cross platforms (crops)` 24 section 25 in the Yocto Project Development Tasks Manual for more 26 information. 27 28 - You may use version 2 of Windows Subsystem For Linux (WSL 2) to set 29 up a build host using Windows 10 or later, Windows Server 2019 or later. 30 See the :ref:`dev-manual/start:setting up to use windows subsystem for 31 linux (wsl 2)` section in the Yocto Project Development Tasks Manual 32 for more information. 33 34If you want more conceptual or background information on the Yocto 35Project, see the :doc:`/overview-manual/index`. 36 37Compatible Linux Distribution 38============================= 39 40Make sure your :term:`Build Host` meets the 41following requirements: 42 43- At least &MIN_DISK_SPACE; Gbytes of free disk space, though 44 much more will help to run multiple builds and increase 45 performance by reusing build artifacts. 46 47- At least &MIN_RAM; Gbytes of RAM, though a modern modern build host with as 48 much RAM and as many CPU cores as possible is strongly recommended to 49 maximize build performance. 50 51- Runs a supported Linux distribution (i.e. recent releases of Fedora, 52 openSUSE, CentOS, Debian, or Ubuntu). For a list of Linux 53 distributions that support the Yocto Project, see the 54 :ref:`ref-manual/system-requirements:supported linux distributions` 55 section in the Yocto Project Reference Manual. For detailed 56 information on preparing your build host, see the 57 :ref:`dev-manual/start:preparing the build host` 58 section in the Yocto Project Development Tasks Manual. 59 60- 61 62 - Git &MIN_GIT_VERSION; or greater 63 - tar &MIN_TAR_VERSION; or greater 64 - Python &MIN_PYTHON_VERSION; or greater. 65 - gcc &MIN_GCC_VERSION; or greater. 66 - GNU make &MIN_MAKE_VERSION; or greater 67 68If your build host does not meet any of these three listed version 69requirements, you can take steps to prepare the system so that you 70can still use the Yocto Project. See the 71:ref:`ref-manual/system-requirements:required git, tar, python, make and gcc versions` 72section in the Yocto Project Reference Manual for information. 73 74Build Host Packages 75=================== 76 77You must install essential host packages on your build host. The 78following command installs the host packages based on an Ubuntu 79distribution:: 80 81 $ sudo apt install &UBUNTU_HOST_PACKAGES_ESSENTIAL; 82 83.. note:: 84 85 For host package requirements on all supported Linux distributions, 86 see the :ref:`ref-manual/system-requirements:required packages for the build host` 87 section in the Yocto Project Reference Manual. 88 89Use Git to Clone Poky 90===================== 91 92Once you complete the setup instructions for your machine, you need to 93get a copy of the Poky repository on your build host. Use the following 94commands to clone the Poky repository. 95 96.. code-block:: shell 97 98 $ git clone git://git.yoctoproject.org/poky 99 Cloning into 'poky'... 100 remote: Counting 101 objects: 432160, done. remote: Compressing objects: 100% 102 (102056/102056), done. remote: Total 432160 (delta 323116), reused 103 432037 (delta 323000) Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done. 104 Resolving deltas: 100% (323116/323116), done. 105 Checking connectivity... done. 106 107Go to :yocto_wiki:`Releases wiki page </Releases>`, and choose a release 108codename (such as ``&DISTRO_NAME_NO_CAP;``), corresponding to either the 109latest stable release or a Long Term Support release. 110 111Then move to the ``poky`` directory and take a look at existing branches: 112 113.. code-block:: shell 114 115 $ cd poky 116 $ git branch -a 117 . 118 . 119 . 120 remotes/origin/HEAD -> origin/master 121 remotes/origin/dunfell 122 remotes/origin/dunfell-next 123 . 124 . 125 . 126 remotes/origin/gatesgarth 127 remotes/origin/gatesgarth-next 128 . 129 . 130 . 131 remotes/origin/master 132 remotes/origin/master-next 133 . 134 . 135 . 136 137 138For this example, check out the ``&DISTRO_NAME_NO_CAP;`` branch based on the 139``&DISTRO_NAME;`` release: 140 141.. code-block:: shell 142 143 $ git checkout -t origin/&DISTRO_NAME_NO_CAP; -b my-&DISTRO_NAME_NO_CAP; 144 Branch 'my-&DISTRO_NAME_NO_CAP;' set up to track remote branch '&DISTRO_NAME_NO_CAP;' from 'origin'. 145 Switched to a new branch 'my-&DISTRO_NAME_NO_CAP;' 146 147The previous Git checkout command creates a local branch named 148``my-&DISTRO_NAME_NO_CAP;``. The files available to you in that branch 149exactly match the repository's files in the ``&DISTRO_NAME_NO_CAP;`` 150release branch. 151 152Note that you can regularly type the following command in the same directory 153to keep your local files in sync with the release branch: 154 155.. code-block:: shell 156 157 $ git pull 158 159For more options and information about accessing Yocto Project related 160repositories, see the 161:ref:`dev-manual/start:locating yocto project source files` 162section in the Yocto Project Development Tasks Manual. 163 164Building Your Image 165=================== 166 167Use the following steps to build your image. The build process creates 168an entire Linux distribution, including the toolchain, from source. 169 170.. note:: 171 172 - If you are working behind a firewall and your build host is not 173 set up for proxies, you could encounter problems with the build 174 process when fetching source code (e.g. fetcher failures or Git 175 failures). 176 177 - If you do not know your proxy settings, consult your local network 178 infrastructure resources and get that information. A good starting 179 point could also be to check your web browser settings. Finally, 180 you can find more information on the 181 ":yocto_wiki:`Working Behind a Network Proxy </Working_Behind_a_Network_Proxy>`" 182 page of the Yocto Project Wiki. 183 184#. **Initialize the Build Environment:** From within the ``poky`` 185 directory, run the :ref:`ref-manual/structure:\`\`oe-init-build-env\`\`` 186 environment 187 setup script to define Yocto Project's build environment on your 188 build host. 189 190 .. code-block:: shell 191 192 $ cd poky 193 $ source oe-init-build-env 194 You had no conf/local.conf file. This configuration file has therefore been 195 created for you with some default values. You may wish to edit it to, for 196 example, select a different MACHINE (target hardware). See conf/local.conf 197 for more information as common configuration options are commented. 198 199 You had no conf/bblayers.conf file. This configuration file has therefore 200 been created for you with some default values. To add additional metadata 201 layers into your configuration please add entries to conf/bblayers.conf. 202 203 The Yocto Project has extensive documentation about OE including a reference 204 manual which can be found at: 205 https://docs.yoctoproject.org 206 207 For more information about OpenEmbedded see their website: 208 https://www.openembedded.org/ 209 210 ### Shell environment set up for builds. ### 211 212 You can now run 'bitbake <target>' 213 214 Common targets are: 215 core-image-minimal 216 core-image-full-cmdline 217 core-image-sato 218 core-image-weston 219 meta-toolchain 220 meta-ide-support 221 222 You can also run generated QEMU images with a command like 'runqemu qemux86-64' 223 224 Other commonly useful commands are: 225 - 'devtool' and 'recipetool' handle common recipe tasks 226 - 'bitbake-layers' handles common layer tasks 227 - 'oe-pkgdata-util' handles common target package tasks 228 229 Among other things, the script creates the :term:`Build Directory`, which is 230 ``build`` in this case and is located in the :term:`Source Directory`. After 231 the script runs, your current working directory is set to the 232 :term:`Build Directory`. Later, when the build completes, the 233 :term:`Build Directory` contains all the files created during the build. 234 235#. **Examine Your Local Configuration File:** When you set up the build 236 environment, a local configuration file named ``local.conf`` becomes 237 available in a ``conf`` subdirectory of the :term:`Build Directory`. For this 238 example, the defaults are set to build for a ``qemux86`` target, 239 which is suitable for emulation. The package manager used is set to 240 the RPM package manager. 241 242 .. tip:: 243 244 You can significantly speed up your build and guard against fetcher 245 failures by using :ref:`overview-manual/concepts:shared state cache` 246 mirrors and enabling :ref:`overview-manual/concepts:hash equivalence`. 247 This way, you can use pre-built artifacts rather than building them. 248 This is relevant only when your network and the server that you use 249 can download these artifacts faster than you would be able to build them. 250 251 To use such mirrors, uncomment the below lines in your ``conf/local.conf`` 252 file in the :term:`Build Directory`:: 253 254 BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws" 255 SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH" 256 BB_HASHSERVE = "auto" 257 BB_SIGNATURE_HANDLER = "OEEquivHash" 258 259 The hash equivalence server needs the websockets python module version 9.1 260 or later. Debian GNU/Linux 12 (Bookworm) and later, Fedora, CentOS Stream 261 9 and later, and Ubuntu 22.04 (LTS) and later, all have a recent enough 262 package. Other supported distributions need to get the module some other 263 place than their package feed, e.g. via ``pip``. 264 265#. **Start the Build:** Continue with the following command to build an OS 266 image for the target, which is ``core-image-sato`` in this example: 267 268 .. code-block:: shell 269 270 $ bitbake core-image-sato 271 272 For information on using the ``bitbake`` command, see the 273 :ref:`overview-manual/concepts:bitbake` section in the Yocto Project Overview and 274 Concepts Manual, or see 275 :ref:`bitbake-user-manual/bitbake-user-manual-intro:the bitbake command` 276 in the BitBake User Manual. 277 278#. **Simulate Your Image Using QEMU:** Once this particular image is 279 built, you can start QEMU, which is a Quick EMUlator that ships with 280 the Yocto Project: 281 282 .. code-block:: shell 283 284 $ runqemu qemux86-64 285 286 If you want to learn more about running QEMU, see the 287 :ref:`dev-manual/qemu:using the quick emulator (qemu)` chapter in 288 the Yocto Project Development Tasks Manual. 289 290#. **Exit QEMU:** Exit QEMU by either clicking on the shutdown icon or by typing 291 ``Ctrl-C`` in the QEMU transcript window from which you evoked QEMU. 292 293Customizing Your Build for Specific Hardware 294============================================ 295 296So far, all you have done is quickly built an image suitable for 297emulation only. This section shows you how to customize your build for 298specific hardware by adding a hardware layer into the Yocto Project 299development environment. 300 301In general, layers are repositories that contain related sets of 302instructions and configurations that tell the Yocto Project what to do. 303Isolating related metadata into functionally specific layers facilitates 304modular development and makes it easier to reuse the layer metadata. 305 306.. note:: 307 308 By convention, layer names start with the string "meta-". 309 310Follow these steps to add a hardware layer: 311 312#. **Find a Layer:** Many hardware layers are available. The Yocto Project 313 :yocto_git:`Source Repositories <>` has many hardware layers. 314 This example adds the 315 `meta-altera <https://github.com/kraj/meta-altera>`__ hardware layer. 316 317#. **Clone the Layer:** Use Git to make a local copy of the layer on your 318 machine. You can put the copy in the top level of the copy of the 319 Poky repository created earlier: 320 321 .. code-block:: shell 322 323 $ cd poky 324 $ git clone https://github.com/kraj/meta-altera.git 325 Cloning into 'meta-altera'... 326 remote: Counting objects: 25170, done. 327 remote: Compressing objects: 100% (350/350), done. 328 remote: Total 25170 (delta 645), reused 719 (delta 538), pack-reused 24219 329 Receiving objects: 100% (25170/25170), 41.02 MiB | 1.64 MiB/s, done. 330 Resolving deltas: 100% (13385/13385), done. 331 Checking connectivity... done. 332 333 The hardware layer is now available 334 next to other layers inside the Poky reference repository on your build 335 host as ``meta-altera`` and contains all the metadata needed to 336 support hardware from Altera, which is owned by Intel. 337 338 .. note:: 339 340 It is recommended for layers to have a branch per Yocto Project release. 341 Please make sure to checkout the layer branch supporting the Yocto Project 342 release you're using. 343 344#. **Change the Configuration to Build for a Specific Machine:** The 345 :term:`MACHINE` variable in the 346 ``local.conf`` file specifies the machine for the build. For this 347 example, set the :term:`MACHINE` variable to ``cyclone5``. These 348 configurations are used: 349 https://github.com/kraj/meta-altera/blob/master/conf/machine/cyclone5.conf. 350 351 .. note:: 352 353 See the "Examine Your Local Configuration File" step earlier for more 354 information on configuring the build. 355 356#. **Add Your Layer to the Layer Configuration File:** Before you can use 357 a layer during a build, you must add it to your ``bblayers.conf`` 358 file, which is found in the :term:`Build Directory` ``conf`` directory. 359 360 Use the ``bitbake-layers add-layer`` command to add the layer to the 361 configuration file: 362 363 .. code-block:: shell 364 365 $ cd poky/build 366 $ bitbake-layers add-layer ../meta-altera 367 NOTE: Starting bitbake server... 368 Parsing recipes: 100% |##################################################################| Time: 0:00:32 369 Parsing of 918 .bb files complete (0 cached, 918 parsed). 1401 targets, 370 123 skipped, 0 masked, 0 errors. 371 372 You can find 373 more information on adding layers in the 374 :ref:`dev-manual/layers:adding a layer using the \`\`bitbake-layers\`\` script` 375 section. 376 377Completing these steps has added the ``meta-altera`` layer to your Yocto 378Project development environment and configured it to build for the 379``cyclone5`` machine. 380 381.. note:: 382 383 The previous steps are for demonstration purposes only. If you were 384 to attempt to build an image for the ``cyclone5`` machine, you should 385 read the Altera ``README``. 386 387Creating Your Own General Layer 388=============================== 389 390Maybe you have an application or specific set of behaviors you need to 391isolate. You can create your own general layer using the 392``bitbake-layers create-layer`` command. The tool automates layer 393creation by setting up a subdirectory with a ``layer.conf`` 394configuration file, a ``recipes-example`` subdirectory that contains an 395``example.bb`` recipe, a licensing file, and a ``README``. 396 397The following commands run the tool to create a layer named 398``meta-mylayer`` in the ``poky`` directory: 399 400.. code-block:: shell 401 402 $ cd poky 403 $ bitbake-layers create-layer meta-mylayer 404 NOTE: Starting bitbake server... 405 Add your new layer with 'bitbake-layers add-layer meta-mylayer' 406 407For more information 408on layers and how to create them, see the 409:ref:`dev-manual/layers:creating a general layer using the \`\`bitbake-layers\`\` script` 410section in the Yocto Project Development Tasks Manual. 411 412Where To Go Next 413================ 414 415Now that you have experienced using the Yocto Project, you might be 416asking yourself "What now?". The Yocto Project has many sources of 417information including the website, wiki pages, and user manuals: 418 419- **Website:** The :yocto_home:`Yocto Project Website <>` provides 420 background information, the latest builds, breaking news, full 421 development documentation, and access to a rich Yocto Project 422 Development Community into which you can tap. 423 424- **Video Seminar:** The `Introduction to the Yocto Project and BitBake, Part 1 425 <https://youtu.be/yuE7my3KOpo>`__ and 426 `Introduction to the Yocto Project and BitBake, Part 2 427 <https://youtu.be/iZ05TTyzGHk>`__ videos offer a video seminar 428 introducing you to the most important aspects of developing a 429 custom embedded Linux distribution with the Yocto Project. 430 431- **Yocto Project Overview and Concepts Manual:** The 432 :doc:`/overview-manual/index` is a great 433 place to start to learn about the Yocto Project. This manual 434 introduces you to the Yocto Project and its development environment. 435 The manual also provides conceptual information for various aspects 436 of the Yocto Project. 437 438- **Yocto Project Wiki:** The :yocto_wiki:`Yocto Project Wiki <>` 439 provides additional information on where to go next when ramping up 440 with the Yocto Project, release information, project planning, and QA 441 information. 442 443- **Yocto Project Mailing Lists:** Related mailing lists provide a forum 444 for discussion, patch submission and announcements. There are several 445 mailing lists grouped by topic. See the 446 :ref:`ref-manual/resources:mailing lists` 447 section in the Yocto Project Reference Manual for a complete list of 448 Yocto Project mailing lists. 449 450- **Comprehensive List of Links and Other Documentation:** The 451 :ref:`ref-manual/resources:links and related documentation` 452 section in the Yocto Project Reference Manual provides a 453 comprehensive list of all related links and other user documentation. 454 455.. include:: /boilerplate.rst 456