1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK 2 3*********************************** 4Setting Up to Use the Yocto Project 5*********************************** 6 7This chapter provides guidance on how to prepare to use the Yocto 8Project. You can learn about creating a team environment to develop 9using the Yocto Project, how to set up a :ref:`build 10host <dev-manual/start:preparing the build host>`, how to locate 11Yocto Project source repositories, and how to create local Git 12repositories. 13 14Creating a Team Development Environment 15======================================= 16 17It might not be immediately clear how you can use the Yocto Project in a 18team development environment, or how to scale it for a large team of 19developers. You can adapt the Yocto Project to many different use cases 20and scenarios; however, this flexibility could cause difficulties if you 21are trying to create a working setup that scales effectively. 22 23To help you understand how to set up this type of environment, this 24section presents a procedure that gives you information that can help 25you get the results you want. The procedure is high-level and presents 26some of the project's most successful experiences, practices, solutions, 27and available technologies that have proved to work well in the past; 28however, keep in mind, the procedure here is simply a starting point. 29You can build off these steps and customize the procedure to fit any 30particular working environment and set of practices. 31 32#. *Determine Who is Going to be Developing:* You first need to 33 understand who is going to be doing anything related to the Yocto 34 Project and determine their roles. Making this determination is 35 essential to completing subsequent steps, which are to get your 36 equipment together and set up your development environment's 37 hardware topology. 38 39 Possible roles are: 40 41 - *Application Developer:* This type of developer does application 42 level work on top of an existing software stack. 43 44 - *Core System Developer:* This type of developer works on the 45 contents of the operating system image itself. 46 47 - *Build Engineer:* This type of developer manages Autobuilders and 48 releases. Depending on the specifics of the environment, not all 49 situations might need a Build Engineer. 50 51 - *Test Engineer:* This type of developer creates and manages 52 automated tests that are used to ensure all application and core 53 system development meets desired quality standards. 54 55#. *Gather the Hardware:* Based on the size and make-up of the team, 56 get the hardware together. Ideally, any development, build, or test 57 engineer uses a system that runs a supported Linux distribution. 58 These systems, in general, should be high performance (e.g. dual, 59 six-core Xeons with 24 Gbytes of RAM and plenty of disk space). You 60 can help ensure efficiency by having any machines used for testing 61 or that run Autobuilders be as high performance as possible. 62 63 .. note:: 64 65 Given sufficient processing power, you might also consider 66 building Yocto Project development containers to be run under 67 Docker, which is described later. 68 69#. *Understand the Hardware Topology of the Environment:* Once you 70 understand the hardware involved and the make-up of the team, you 71 can understand the hardware topology of the development environment. 72 You can get a visual idea of the machines and their roles across the 73 development environment. 74 75#. *Use Git as Your Source Control Manager (SCM):* Keeping your 76 :term:`Metadata` (i.e. recipes, 77 configuration files, classes, and so forth) and any software you are 78 developing under the control of an SCM system that is compatible 79 with the OpenEmbedded build system is advisable. Of all of the SCMs 80 supported by BitBake, the Yocto Project team strongly recommends using 81 :ref:`overview-manual/development-environment:git`. 82 Git is a distributed system 83 that is easy to back up, allows you to work remotely, and then 84 connects back to the infrastructure. 85 86 .. note:: 87 88 For information about BitBake, see the 89 :doc:`bitbake:index`. 90 91 It is relatively easy to set up Git services and create infrastructure like 92 :yocto_git:`/`, which is based on server software called 93 `Gitolite <https://gitolite.com>`__ 94 with `cgit <https://git.zx2c4.com/cgit/about/>`__ being used to 95 generate the web interface that lets you view the repositories. 96 ``gitolite`` identifies users using SSH keys and allows 97 branch-based access controls to repositories that you can control as 98 little or as much as necessary. 99 100#. *Set up the Application Development Machines:* As mentioned earlier, 101 application developers are creating applications on top of existing 102 software stacks. Here are some best practices for setting up 103 machines used for application development: 104 105 - Use a pre-built toolchain that contains the software stack 106 itself. Then, develop the application code on top of the stack. 107 This method works well for small numbers of relatively isolated 108 applications. 109 110 - Keep your cross-development toolchains updated. You can do this 111 through provisioning either as new toolchain downloads or as 112 updates through a package update mechanism using ``opkg`` to 113 provide updates to an existing toolchain. The exact mechanics of 114 how and when to do this depend on local policy. 115 116 - Use multiple toolchains installed locally into different 117 locations to allow development across versions. 118 119#. *Set up the Core Development Machines:* As mentioned earlier, core 120 developers work on the contents of the operating system itself. 121 Here are some best practices for setting up machines used for 122 developing images: 123 124 - Have the :term:`OpenEmbedded Build System` available on 125 the developer workstations so developers can run their own builds 126 and directly rebuild the software stack. 127 128 - Keep the core system unchanged as much as possible and do your 129 work in layers on top of the core system. Doing so gives you a 130 greater level of portability when upgrading to new versions of 131 the core system or Board Support Packages (BSPs). 132 133 - Share layers amongst the developers of a particular project and 134 contain the policy configuration that defines the project. 135 136#. *Set up an Autobuilder:* Autobuilders are often the core of the 137 development environment. It is here that changes from individual 138 developers are brought together and centrally tested. Based on this 139 automated build and test environment, subsequent decisions about 140 releases can be made. Autobuilders also allow for "continuous 141 integration" style testing of software components and regression 142 identification and tracking. 143 144 See ":yocto_ab:`Yocto Project Autobuilder <>`" for more 145 information and links to buildbot. The Yocto Project team has found 146 this implementation works well in this role. A public example of 147 this is the Yocto Project Autobuilders, which the Yocto Project team 148 uses to test the overall health of the project. 149 150 The features of this system are: 151 152 - Highlights when commits break the build. 153 154 - Populates an :ref:`sstate 155 cache <overview-manual/concepts:shared state cache>` from which 156 developers can pull rather than requiring local builds. 157 158 - Allows commit hook triggers, which trigger builds when commits 159 are made. 160 161 - Allows triggering of automated image booting and testing under 162 the QuickEMUlator (QEMU). 163 164 - Supports incremental build testing and from-scratch builds. 165 166 - Shares output that allows developer testing and historical 167 regression investigation. 168 169 - Creates output that can be used for releases. 170 171 - Allows scheduling of builds so that resources can be used 172 efficiently. 173 174#. *Set up Test Machines:* Use a small number of shared, high 175 performance systems for testing purposes. Developers can use these 176 systems for wider, more extensive testing while they continue to 177 develop locally using their primary development system. 178 179#. *Document Policies and Change Flow:* The Yocto Project uses a 180 hierarchical structure and a pull model. There are scripts to create and 181 send pull requests (i.e. ``create-pull-request`` and 182 ``send-pull-request``). This model is in line with other open source 183 projects where maintainers are responsible for specific areas of the 184 project and a single maintainer handles the final "top-of-tree" 185 merges. 186 187 .. note:: 188 189 You can also use a more collective push model. The ``gitolite`` 190 software supports both the push and pull models quite easily. 191 192 As with any development environment, it is important to document the 193 policy used as well as any main project guidelines so they are 194 understood by everyone. It is also a good idea to have 195 well-structured commit messages, which are usually a part of a 196 project's guidelines. Good commit messages are essential when 197 looking back in time and trying to understand why changes were made. 198 199 If you discover that changes are needed to the core layer of the 200 project, it is worth sharing those with the community as soon as 201 possible. Chances are if you have discovered the need for changes, 202 someone else in the community needs them also. 203 204#. *Development Environment Summary:* Aside from the previous steps, 205 here are best practices within the Yocto Project development 206 environment: 207 208 - Use :ref:`overview-manual/development-environment:git` as the source control 209 system. 210 211 - Maintain your Metadata in layers that make sense for your 212 situation. See the ":ref:`overview-manual/yp-intro:the yocto project layer model`" 213 section in the Yocto Project Overview and Concepts Manual and the 214 ":ref:`dev-manual/layers:understanding and creating layers`" 215 section for more information on layers. 216 217 - Separate the project's Metadata and code by using separate Git 218 repositories. See the ":ref:`overview-manual/development-environment:yocto project source repositories`" 219 section in the Yocto Project Overview and Concepts Manual for 220 information on these repositories. See the 221 ":ref:`dev-manual/start:locating yocto project source files`" 222 section for information on how to set up local Git repositories 223 for related upstream Yocto Project Git repositories. 224 225 - Set up the directory for the shared state cache 226 (:term:`SSTATE_DIR`) where 227 it makes sense. For example, set up the sstate cache on a system 228 used by developers in the same organization and share the same 229 source directories on their machines. 230 231 - Set up an Autobuilder and have it populate the sstate cache and 232 source directories. 233 234 - The Yocto Project community encourages you to send patches to the 235 project to fix bugs or add features. If you do submit patches, 236 follow the project commit guidelines for writing good commit 237 messages. See the ":doc:`../contributor-guide/submit-changes`" 238 section in the Yocto Project and OpenEmbedded Contributor Guide. 239 240 - Send changes to the core sooner than later as others are likely 241 to run into the same issues. For some guidance on mailing lists 242 to use, see the lists in the 243 ":ref:`contributor-guide/submit-changes:finding a suitable mailing list`" 244 section. For a description 245 of the available mailing lists, see the ":ref:`resources-mailinglist`" section in 246 the Yocto Project Reference Manual. 247 248Preparing the Build Host 249======================== 250 251This section provides procedures to set up a system to be used as your 252:term:`Build Host` for 253development using the Yocto Project. Your build host can be a native 254Linux machine (recommended), it can be a machine (Linux, Mac, or 255Windows) that uses `CROPS <https://github.com/crops/poky-container>`__, 256which leverages `Docker Containers <https://www.docker.com/>`__ or it 257can be a Windows machine capable of running version 2 of Windows Subsystem 258For Linux (WSL 2). 259 260.. note:: 261 262 The Yocto Project is not compatible with version 1 of 263 :wikipedia:`Windows Subsystem for Linux <Windows_Subsystem_for_Linux>`. 264 It is compatible but neither officially supported nor validated with 265 WSL 2. If you still decide to use WSL please upgrade to 266 `WSL 2 <https://learn.microsoft.com/en-us/windows/wsl/install>`__. 267 268Once your build host is set up to use the Yocto Project, further steps 269are necessary depending on what you want to accomplish. See the 270following references for information on how to prepare for Board Support 271Package (BSP) development and kernel development: 272 273- *BSP Development:* See the ":ref:`bsp-guide/bsp:preparing your build host to work with bsp layers`" 274 section in the Yocto Project Board Support Package (BSP) Developer's 275 Guide. 276 277- *Kernel Development:* See the ":ref:`kernel-dev/common:preparing the build host to work on the kernel`" 278 section in the Yocto Project Linux Kernel Development Manual. 279 280Setting Up a Native Linux Host 281------------------------------ 282 283Follow these steps to prepare a native Linux machine as your Yocto 284Project Build Host: 285 286#. *Use a Supported Linux Distribution:* You should have a reasonably 287 current Linux-based host system. You will have the best results with 288 a recent release of Fedora, openSUSE, Debian, Ubuntu, RHEL or CentOS 289 as these releases are frequently tested against the Yocto Project and 290 officially supported. For a list of the distributions under 291 validation and their status, see the ":ref:`Supported Linux 292 Distributions <system-requirements-supported-distros>`" 293 section in the Yocto Project Reference Manual and the wiki page at 294 :yocto_wiki:`Distribution Support </Distribution_Support>`. 295 296#. *Have Enough Free Memory:* Your system should have at least 50 Gbytes 297 of free disk space for building images. 298 299#. *Meet Minimal Version Requirements:* The OpenEmbedded build system 300 should be able to run on any modern distribution that has the 301 following versions for Git, tar, Python, gcc and make. 302 303 - Git &MIN_GIT_VERSION; or greater 304 305 - tar &MIN_TAR_VERSION; or greater 306 307 - Python &MIN_PYTHON_VERSION; or greater. 308 309 - gcc &MIN_GCC_VERSION; or greater. 310 311 - GNU make &MIN_MAKE_VERSION; or greater 312 313 If your build host does not meet any of these listed version 314 requirements, you can take steps to prepare the system so that you 315 can still use the Yocto Project. See the 316 ":ref:`ref-manual/system-requirements:required git, tar, python, make and gcc versions`" 317 section in the Yocto Project Reference Manual for information. 318 319#. *Install Development Host Packages:* Required development host 320 packages vary depending on your build host and what you want to do 321 with the Yocto Project. Collectively, the number of required packages 322 is large if you want to be able to cover all cases. 323 324 For lists of required packages for all scenarios, see the 325 ":ref:`ref-manual/system-requirements:required packages for the build host`" 326 section in the Yocto Project Reference Manual. 327 328Once you have completed the previous steps, you are ready to continue 329using a given development path on your native Linux machine. If you are 330going to use BitBake, see the 331":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" 332section. If you are going 333to use the Extensible SDK, see the ":doc:`/sdk-manual/extensible`" Chapter in the Yocto 334Project Application Development and the Extensible Software Development 335Kit (eSDK) manual. If you want to work on the kernel, see the :doc:`/kernel-dev/index`. If you are going to use 336Toaster, see the ":doc:`/toaster-manual/setup-and-use`" 337section in the Toaster User Manual. If you are a VSCode user, you can configure 338the `Yocto Project BitBake 339<https://marketplace.visualstudio.com/items?itemName=yocto-project.yocto-bitbake>`__ 340extension accordingly. 341 342Setting Up to Use CROss PlatformS (CROPS) 343----------------------------------------- 344 345With `CROPS <https://github.com/crops/poky-container>`__, which 346leverages `Docker Containers <https://www.docker.com/>`__, you can 347create a Yocto Project development environment that is operating system 348agnostic. You can set up a container in which you can develop using the 349Yocto Project on a Windows, Mac, or Linux machine. 350 351Follow these general steps to prepare a Windows, Mac, or Linux machine 352as your Yocto Project build host: 353 354#. *Determine What Your Build Host Needs:* 355 `Docker <https://www.docker.com/what-docker>`__ is a software 356 container platform that you need to install on the build host. 357 Depending on your build host, you might have to install different 358 software to support Docker containers. Go to the Docker installation 359 page and read about the platform requirements in "`Supported 360 Platforms <https://docs.docker.com/engine/install/#supported-platforms>`__" 361 your build host needs to run containers. 362 363#. *Choose What To Install:* Depending on whether or not your build host 364 meets system requirements, you need to install "Docker CE Stable" or 365 the "Docker Toolbox". Most situations call for Docker CE. However, if 366 you have a build host that does not meet requirements (e.g. 367 Pre-Windows 10 or Windows 10 "Home" version), you must install Docker 368 Toolbox instead. 369 370#. *Go to the Install Site for Your Platform:* Click the link for the 371 Docker edition associated with your build host's native software. For 372 example, if your build host is running Microsoft Windows Version 10 373 and you want the Docker CE Stable edition, click that link under 374 "Supported Platforms". 375 376#. *Install the Software:* Once you have understood all the 377 pre-requisites, you can download and install the appropriate 378 software. Follow the instructions for your specific machine and the 379 type of the software you need to install: 380 381 - Install `Docker Desktop on 382 Windows <https://docs.docker.com/docker-for-windows/install/#install-docker-desktop-on-windows>`__ 383 for Windows build hosts that meet requirements. 384 385 - Install `Docker Desktop on 386 MacOs <https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-desktop-on-mac>`__ 387 for Mac build hosts that meet requirements. 388 389 - Install `Docker Engine on 390 CentOS <https://docs.docker.com/engine/install/centos/>`__ 391 for Linux build hosts running the CentOS distribution. 392 393 - Install `Docker Engine on 394 Debian <https://docs.docker.com/engine/install/debian/>`__ 395 for Linux build hosts running the Debian distribution. 396 397 - Install `Docker Engine for 398 Fedora <https://docs.docker.com/engine/install/fedora/>`__ 399 for Linux build hosts running the Fedora distribution. 400 401 - Install `Docker Engine for 402 Ubuntu <https://docs.docker.com/engine/install/ubuntu/>`__ 403 for Linux build hosts running the Ubuntu distribution. 404 405#. *Optionally Orient Yourself With Docker:* If you are unfamiliar with 406 Docker and the container concept, you can learn more here - 407 https://docs.docker.com/get-started/. 408 409#. *Launch Docker or Docker Toolbox:* You should be able to launch 410 Docker or the Docker Toolbox and have a terminal shell on your 411 development host. 412 413#. *Set Up the Containers to Use the Yocto Project:* Go to 414 https://github.com/crops/docker-win-mac-docs/wiki and follow 415 the directions for your particular build host (i.e. Linux, Mac, or 416 Windows). 417 418 Once you complete the setup instructions for your machine, you have 419 the Poky, Extensible SDK, and Toaster containers available. You can 420 click those links from the page and learn more about using each of 421 those containers. 422 423Once you have a container set up, everything is in place to develop just 424as if you were running on a native Linux machine. If you are going to 425use the Poky container, see the 426":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" 427section. If you are going to use the Extensible SDK container, see the 428":doc:`/sdk-manual/extensible`" Chapter in the Yocto 429Project Application Development and the Extensible Software Development 430Kit (eSDK) manual. If you are going to use the Toaster container, see 431the ":doc:`/toaster-manual/setup-and-use`" 432section in the Toaster User Manual. If you are a VSCode user, you can configure 433the `Yocto Project BitBake 434<https://marketplace.visualstudio.com/items?itemName=yocto-project.yocto-bitbake>`__ 435extension accordingly. 436 437Setting Up to Use Windows Subsystem For Linux (WSL 2) 438----------------------------------------------------- 439 440With `Windows Subsystem for Linux (WSL 2) 441<https://learn.microsoft.com/en-us/windows/wsl/>`__, 442you can create a Yocto Project development environment that allows you 443to build on Windows. You can set up a Linux distribution inside Windows 444in which you can develop using the Yocto Project. 445 446Follow these general steps to prepare a Windows machine using WSL 2 as 447your Yocto Project build host: 448 449#. *Make sure your Windows machine is capable of running WSL 2:* 450 451 While all Windows 11 and Windows Server 2022 builds support WSL 2, 452 the first versions of Windows 10 and Windows Server 2019 didn't. 453 Check the minimum build numbers for `Windows 10 454 <https://learn.microsoft.com/en-us/windows/wsl/install-manual#step-2---check-requirements-for-running-wsl-2>`__ 455 and for `Windows Server 2019 456 <https://learn.microsoft.com/en-us/windows/wsl/install-on-server>`__. 457 458 To check which build version you are running, you may open a command 459 prompt on Windows and execute the command "ver":: 460 461 C:\Users\myuser> ver 462 463 Microsoft Windows [Version 10.0.19041.153] 464 465#. *Install the Linux distribution of your choice inside WSL 2:* 466 Once you know your version of Windows supports WSL 2, you can 467 install the distribution of your choice from the Microsoft Store. 468 Open the Microsoft Store and search for Linux. While there are 469 several Linux distributions available, the assumption is that your 470 pick will be one of the distributions supported by the Yocto Project 471 as stated on the instructions for using a native Linux host. After 472 making your selection, simply click "Get" to download and install the 473 distribution. 474 475#. *Check which Linux distribution WSL 2 is using:* Open a Windows 476 PowerShell and run:: 477 478 C:\WINDOWS\system32> wsl -l -v 479 NAME STATE VERSION 480 *Ubuntu Running 2 481 482 Note that WSL 2 supports running as many different Linux distributions 483 as you want to install. 484 485#. *Optionally Get Familiar with WSL:* You can learn more on 486 https://docs.microsoft.com/en-us/windows/wsl/wsl2-about. 487 488#. *Launch your WSL Distibution:* From the Windows start menu simply 489 launch your WSL distribution just like any other application. 490 491#. *Optimize your WSL 2 storage often:* Due to the way storage is 492 handled on WSL 2, the storage space used by the underlying Linux 493 distribution is not reflected immediately, and since BitBake heavily 494 uses storage, after several builds, you may be unaware you are 495 running out of space. As WSL 2 uses a VHDX file for storage, this issue 496 can be easily avoided by regularly optimizing this file in a manual way: 497 498 1. *Find the location of your VHDX file:* 499 500 First you need to find the distro app package directory, to achieve this 501 open a Windows Powershell as Administrator and run:: 502 503 C:\WINDOWS\system32> Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName 504 PackageFamilyName 505 ----------------- 506 CanonicalGroupLimited.UbuntuonWindows_79abcdefgh 507 508 509 You should now 510 replace the PackageFamilyName and your user on the following path 511 to find your VHDX file:: 512 513 ls C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79abcdefgh\LocalState\ 514 Mode LastWriteTime Length Name 515 -a---- 3/14/2020 9:52 PM 57418973184 ext4.vhdx 516 517 Your VHDX file path is: 518 ``C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79abcdefgh\LocalState\ext4.vhdx`` 519 520 2a. *Optimize your VHDX file using Windows Powershell:* 521 522 To use the ``optimize-vhd`` cmdlet below, first install the Hyper-V 523 option on Windows. Then, open a Windows Powershell as Administrator to 524 optimize your VHDX file, shutting down WSL first:: 525 526 C:\WINDOWS\system32> wsl --shutdown 527 C:\WINDOWS\system32> optimize-vhd -Path C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79abcdefgh\LocalState\ext4.vhdx -Mode full 528 529 A progress bar should be shown while optimizing the 530 VHDX file, and storage should now be reflected correctly on the 531 Windows Explorer. 532 533 2b. *Optimize your VHDX file using DiskPart:* 534 535 The ``optimize-vhd`` cmdlet noted in step 2a above is provided by 536 Hyper-V. Not all SKUs of Windows can install Hyper-V. As an alternative, 537 use the DiskPart tool. To start, open a Windows command prompt as 538 Administrator to optimize your VHDX file, shutting down WSL first:: 539 540 C:\WINDOWS\system32> wsl --shutdown 541 C:\WINDOWS\system32> diskpart 542 543 DISKPART> select vdisk file="<path_to_VHDX_file>" 544 DISKPART> attach vdisk readonly 545 DISKPART> compact vdisk 546 DISKPART> exit 547 548.. note:: 549 550 The current implementation of WSL 2 does not have out-of-the-box 551 access to external devices such as those connected through a USB 552 port, but it automatically mounts your ``C:`` drive on ``/mnt/c/`` 553 (and others), which you can use to share deploy artifacts to be later 554 flashed on hardware through Windows, but your :term:`Build Directory` 555 should not reside inside this mountpoint. 556 557Once you have WSL 2 set up, everything is in place to develop just as if 558you were running on a native Linux machine. If you are going to use the 559Extensible SDK container, see the ":doc:`/sdk-manual/extensible`" Chapter in the Yocto 560Project Application Development and the Extensible Software Development 561Kit (eSDK) manual. If you are going to use the Toaster container, see 562the ":doc:`/toaster-manual/setup-and-use`" 563section in the Toaster User Manual. If you are a VSCode user, you can configure 564the `Yocto Project BitBake 565<https://marketplace.visualstudio.com/items?itemName=yocto-project.yocto-bitbake>`__ 566extension accordingly. 567 568Locating Yocto Project Source Files 569=================================== 570 571This section shows you how to locate, fetch and configure the source 572files you'll need to work with the Yocto Project. 573 574.. note:: 575 576 - For concepts and introductory information about Git as it is used 577 in the Yocto Project, see the ":ref:`overview-manual/development-environment:git`" 578 section in the Yocto Project Overview and Concepts Manual. 579 580 - For concepts on Yocto Project source repositories, see the 581 ":ref:`overview-manual/development-environment:yocto project source repositories`" 582 section in the Yocto Project Overview and Concepts Manual." 583 584Accessing Source Repositories 585----------------------------- 586 587Working from a copy of the upstream :ref:`dev-manual/start:accessing source repositories` is the 588preferred method for obtaining and using a Yocto Project release. You 589can view the Yocto Project Source Repositories at 590:yocto_git:`/`. In particular, you can find the ``poky`` 591repository at :yocto_git:`/poky`. 592 593Use the following procedure to locate the latest upstream copy of the 594``poky`` Git repository: 595 596#. *Access Repositories:* Open a browser and go to 597 :yocto_git:`/` to access the GUI-based interface into the 598 Yocto Project source repositories. 599 600#. *Select the Repository:* Click on the repository in which you are 601 interested (e.g. ``poky``). 602 603#. *Find the URL Used to Clone the Repository:* At the bottom of the 604 page, note the URL used to clone that repository 605 (e.g. :yocto_git:`/poky`). 606 607 .. note:: 608 609 For information on cloning a repository, see the 610 ":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" section. 611 612Accessing Source Archives 613------------------------- 614 615The Yocto Project also provides source archives of its releases, which 616are available on :yocto_dl:`/releases/yocto/`. Then, choose the subdirectory 617containing the release you wish to use, for example 618:yocto_dl:`yocto-&DISTRO; </releases/yocto/yocto-&DISTRO;/>`. 619 620You will find there source archives of individual components (if you wish 621to use them individually), and of the corresponding Poky release bundling 622a selection of these components. 623 624.. note:: 625 626 The recommended method for accessing Yocto Project components is to 627 use Git to clone the upstream repository and work from within that 628 locally cloned repository. 629 630Using the Downloads Page 631------------------------ 632 633The :yocto_home:`Yocto Project Website <>` uses a "RELEASES" page 634from which you can locate and download tarballs of any Yocto Project 635release. Rather than Git repositories, these files represent snapshot 636tarballs similar to the tarballs located in the Index of Releases 637described in the ":ref:`dev-manual/start:accessing source archives`" section. 638 639#. *Go to the Yocto Project Website:* Open The 640 :yocto_home:`Yocto Project Website <>` in your browser. 641 642#. *Get to the Downloads Area:* Select the "RELEASES" item from the 643 pull-down "DEVELOPMENT" tab menu near the top of the page. 644 645#. *Select a Yocto Project Release:* On the top of the "RELEASE" page currently 646 supported releases are displayed, further down past supported Yocto Project 647 releases are visible. The "Download" links in the rows of the table there 648 will lead to the download tarballs for the release. 649 650 .. note:: 651 652 For a "map" of Yocto Project releases to version numbers, see the 653 :yocto_wiki:`Releases </Releases>` wiki page. 654 655 You can use the "RELEASE ARCHIVE" link to reveal a menu of all Yocto 656 Project releases. 657 658#. *Download Tools or Board Support Packages (BSPs):* Next to the tarballs you 659 will find download tools or BSPs as well. Just select a Yocto Project 660 release and look for what you need. 661 662Cloning and Checking Out Branches 663================================= 664 665To use the Yocto Project for development, you need a release locally 666installed on your development system. This locally installed set of 667files is referred to as the :term:`Source Directory` 668in the Yocto Project documentation. 669 670The preferred method of creating your Source Directory is by using 671:ref:`overview-manual/development-environment:git` to clone a local copy of the upstream 672``poky`` repository. Working from a cloned copy of the upstream 673repository allows you to contribute back into the Yocto Project or to 674simply work with the latest software on a development branch. Because 675Git maintains and creates an upstream repository with a complete history 676of changes and you are working with a local clone of that repository, 677you have access to all the Yocto Project development branches and tag 678names used in the upstream repository. 679 680Cloning the ``poky`` Repository 681------------------------------- 682 683Follow these steps to create a local version of the upstream 684:term:`Poky` Git repository. 685 686#. *Set Your Directory:* Change your working directory to where you want 687 to create your local copy of ``poky``. 688 689#. *Clone the Repository:* The following example command clones the 690 ``poky`` repository and uses the default name "poky" for your local 691 repository:: 692 693 $ git clone git://git.yoctoproject.org/poky 694 Cloning into 'poky'... 695 remote: Counting objects: 432160, done. 696 remote: Compressing objects: 100% (102056/102056), done. 697 remote: Total 432160 (delta 323116), reused 432037 (delta 323000) 698 Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done. 699 Resolving deltas: 100% (323116/323116), done. 700 Checking connectivity... done. 701 702 Unless you 703 specify a specific development branch or tag name, Git clones the 704 "master" branch, which results in a snapshot of the latest 705 development changes for "master". For information on how to check out 706 a specific development branch or on how to check out a local branch 707 based on a tag name, see the 708 ":ref:`dev-manual/start:checking out by branch in poky`" and 709 ":ref:`dev-manual/start:checking out by tag in poky`" sections, respectively. 710 711 Once the local repository is created, you can change to that 712 directory and check its status. The ``master`` branch is checked out 713 by default:: 714 715 $ cd poky 716 $ git status 717 On branch master 718 Your branch is up-to-date with 'origin/master'. 719 nothing to commit, working directory clean 720 $ git branch 721 * master 722 723 Your local repository of poky is identical to the 724 upstream poky repository at the time from which it was cloned. As you 725 work with the local branch, you can periodically use the 726 ``git pull --rebase`` command to be sure you are up-to-date 727 with the upstream branch. 728 729Checking Out by Branch in Poky 730------------------------------ 731 732When you clone the upstream poky repository, you have access to all its 733development branches. Each development branch in a repository is unique 734as it forks off the "master" branch. To see and use the files of a 735particular development branch locally, you need to know the branch name 736and then specifically check out that development branch. 737 738.. note:: 739 740 Checking out an active development branch by branch name gives you a 741 snapshot of that particular branch at the time you check it out. 742 Further development on top of the branch that occurs after check it 743 out can occur. 744 745#. *Switch to the Poky Directory:* If you have a local poky Git 746 repository, switch to that directory. If you do not have the local 747 copy of poky, see the 748 ":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" 749 section. 750 751#. *Determine Existing Branch Names:* 752 :: 753 754 $ git branch -a 755 * master 756 remotes/origin/1.1_M1 757 remotes/origin/1.1_M2 758 remotes/origin/1.1_M3 759 remotes/origin/1.1_M4 760 remotes/origin/1.2_M1 761 remotes/origin/1.2_M2 762 remotes/origin/1.2_M3 763 . . . 764 remotes/origin/thud 765 remotes/origin/thud-next 766 remotes/origin/warrior 767 remotes/origin/warrior-next 768 remotes/origin/zeus 769 remotes/origin/zeus-next 770 ... and so on ... 771 772#. *Check out the Branch:* Check out the development branch in which you 773 want to work. For example, to access the files for the Yocto Project 774 &DISTRO; Release (&DISTRO_NAME;), use the following command:: 775 776 $ git checkout -b &DISTRO_NAME_NO_CAP; origin/&DISTRO_NAME_NO_CAP; 777 Branch &DISTRO_NAME_NO_CAP; set up to track remote branch &DISTRO_NAME_NO_CAP; from origin. 778 Switched to a new branch '&DISTRO_NAME_NO_CAP;' 779 780 The previous command checks out the "&DISTRO_NAME_NO_CAP;" development 781 branch and reports that the branch is tracking the upstream 782 "origin/&DISTRO_NAME_NO_CAP;" branch. 783 784 The following command displays the branches that are now part of your 785 local poky repository. The asterisk character indicates the branch 786 that is currently checked out for work:: 787 788 $ git branch 789 master 790 * &DISTRO_NAME_NO_CAP; 791 792Checking Out by Tag in Poky 793--------------------------- 794 795Similar to branches, the upstream repository uses tags to mark specific 796commits associated with significant points in a development branch (i.e. 797a release point or stage of a release). You might want to set up a local 798branch based on one of those points in the repository. The process is 799similar to checking out by branch name except you use tag names. 800 801.. note:: 802 803 Checking out a branch based on a tag gives you a stable set of files 804 not affected by development on the branch above the tag. 805 806#. *Switch to the Poky Directory:* If you have a local poky Git 807 repository, switch to that directory. If you do not have the local 808 copy of poky, see the 809 ":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" 810 section. 811 812#. *Fetch the Tag Names:* To checkout the branch based on a tag name, 813 you need to fetch the upstream tags into your local repository:: 814 815 $ git fetch --tags 816 $ 817 818#. *List the Tag Names:* You can list the tag names now:: 819 820 $ git tag 821 1.1_M1.final 822 1.1_M1.rc1 823 1.1_M1.rc2 824 1.1_M2.final 825 1.1_M2.rc1 826 . 827 . 828 . 829 yocto-2.5 830 yocto-2.5.1 831 yocto-2.5.2 832 yocto-2.5.3 833 yocto-2.6 834 yocto-2.6.1 835 yocto-2.6.2 836 yocto-2.7 837 yocto_1.5_M5.rc8 838 839 840#. *Check out the Branch:* 841 :: 842 843 $ git checkout tags/yocto-&DISTRO; -b my_yocto_&DISTRO; 844 Switched to a new branch 'my_yocto_&DISTRO;' 845 $ git branch 846 master 847 * my_yocto_&DISTRO; 848 849 The previous command creates and 850 checks out a local branch named "my_yocto_&DISTRO;", which is based on 851 the commit in the upstream poky repository that has the same tag. In 852 this example, the files you have available locally as a result of the 853 ``checkout`` command are a snapshot of the "&DISTRO_NAME_NO_CAP;" 854 development branch at the point where Yocto Project &DISTRO; was 855 released. 856