1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK 2 3***************** 4Obtaining the SDK 5***************** 6 7Working with the SDK components directly in a Yocto build 8========================================================= 9 10Please refer to section 11":ref:`sdk-manual/extensible:Setting up the Extensible SDK environment directly in a Yocto build`" 12 13Note that to use this feature effectively either a powerful build 14machine, or a well-functioning sstate cache infrastructure is required: 15otherwise significant time could be spent waiting for components to be built 16by BitBake from source code. 17 18Working with standalone SDK Installers 19====================================== 20 21Locating Pre-Built SDK Installers 22--------------------------------- 23 24You can use existing, pre-built toolchains by locating and running an 25SDK installer script that ships with the Yocto Project. Using this 26method, you select and download an architecture-specific SDK installer 27and then run the script to hand-install the toolchain. 28 29Follow these steps to locate and hand-install the toolchain: 30 311. *Go to the Installers Directory:* Go to 32 :yocto_dl:`/releases/yocto/yocto-&DISTRO;/toolchain/` 33 342. *Open the Folder for Your Build Host:* Open the folder that matches 35 your :term:`Build Host` (i.e. 36 ``i686`` for 32-bit machines or ``x86_64`` for 64-bit machines). 37 383. *Locate and Download the SDK Installer:* You need to find and 39 download the installer appropriate for your build host, target 40 hardware, and image type. 41 42 The installer files (``*.sh``) follow this naming convention:: 43 44 poky-glibc-host_system-core-image-type-arch-toolchain[-ext]-release.sh 45 46 Where: 47 host_system is a string representing your development system: 48 "i686" or "x86_64" 49 50 type is a string representing the image: 51 "sato" or "minimal" 52 53 arch is a string representing the target architecture: 54 "aarch64", "armv5e", "core2-64", "cortexa8hf-neon", "i586", "mips32r2", 55 "mips64", or "ppc7400" 56 57 release is the version of Yocto Project. 58 59 NOTE: 60 The standard SDK installer does not have the "-ext" string as 61 part of the filename. 62 63 64 The toolchains provided by the Yocto 65 Project are based off of the ``core-image-sato`` and 66 ``core-image-minimal`` images and contain libraries appropriate for 67 developing against those images. 68 69 For example, if your build host is a 64-bit x86 system and you need 70 an extended SDK for a 64-bit core2 target, go into the ``x86_64`` 71 folder and download the following installer:: 72 73 poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh 74 754. *Run the Installer:* Be sure you have execution privileges and run 76 the installer. Following is an example from the ``Downloads`` 77 directory:: 78 79 $ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh 80 81 During execution of the script, you choose the root location for the 82 toolchain. See the 83 ":ref:`sdk-manual/appendix-obtain:installed standard sdk directory structure`" 84 section and the 85 ":ref:`sdk-manual/appendix-obtain:installed extensible sdk directory structure`" 86 section for more information. 87 88Building an SDK Installer 89------------------------- 90 91As an alternative to locating and downloading an SDK installer, you can 92build the SDK installer. Follow these steps: 93 941. *Set Up the Build Environment:* Be sure you are set up to use BitBake 95 in a shell. See the ":ref:`dev-manual/start:preparing the build host`" section 96 in the Yocto Project Development Tasks Manual for information on how 97 to get a build host ready that is either a native Linux machine or a 98 machine that uses CROPS. 99 1002. *Clone the ``poky`` Repository:* You need to have a local copy of the 101 Yocto Project :term:`Source Directory` 102 (i.e. a local 103 ``poky`` repository). See the ":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" and 104 possibly the ":ref:`dev-manual/start:checking out by branch in poky`" and 105 ":ref:`dev-manual/start:checking out by tag in poky`" sections 106 all in the Yocto Project Development Tasks Manual for information on 107 how to clone the ``poky`` repository and check out the appropriate 108 branch for your work. 109 1103. *Initialize the Build Environment:* While in the root directory of 111 the Source Directory (i.e. ``poky``), run the 112 :ref:`structure-core-script` environment 113 setup script to define the OpenEmbedded build environment on your 114 build host. 115 :: 116 117 $ source oe-init-build-env 118 119 Among other things, the script 120 creates the :term:`Build Directory`, 121 which is 122 ``build`` in this case and is located in the Source Directory. After 123 the script runs, your current working directory is set to the 124 ``build`` directory. 125 1264. *Make Sure You Are Building an Installer for the Correct Machine:* 127 Check to be sure that your 128 :term:`MACHINE` variable in the 129 ``local.conf`` file in your Build Directory matches the architecture 130 for which you are building. 131 1325. *Make Sure Your SDK Machine is Correctly Set:* If you are building a 133 toolchain designed to run on an architecture that differs from your 134 current development host machine (i.e. the build host), be sure that 135 the :term:`SDKMACHINE` variable 136 in the ``local.conf`` file in your Build Directory is correctly set. 137 138 .. note:: 139 140 If you are building an SDK installer for the Extensible SDK, the 141 SDKMACHINE 142 value must be set for the architecture of the machine you are 143 using to build the installer. If 144 SDKMACHINE 145 is not set appropriately, the build fails and provides an error 146 message similar to the following:: 147 148 The extensible SDK can currently only be built for the same architecture as the machine being built on - SDK_ARCH is 149 set to i686 (likely via setting SDKMACHINE) which is different from the architecture of the build machine (x86_64). 150 Unable to continue. 151 152 1536. *Build the SDK Installer:* To build the SDK installer for a standard 154 SDK and populate the SDK image, use the following command form. Be 155 sure to replace ``image`` with an image (e.g. "core-image-sato"):: 156 157 $ bitbake image -c populate_sdk 158 159 You can do the same for the extensible SDK using this command form:: 160 161 $ bitbake image -c populate_sdk_ext 162 163 These commands produce an SDK installer that contains the sysroot 164 that matches your target root filesystem. 165 166 When the ``bitbake`` command completes, the SDK installer will be in 167 ``tmp/deploy/sdk`` in the Build Directory. 168 169 .. note:: 170 171 - By default, the previous BitBake command does not build static 172 binaries. If you want to use the toolchain to build these types 173 of libraries, you need to be sure your SDK has the appropriate 174 static development libraries. Use the 175 :term:`TOOLCHAIN_TARGET_TASK` 176 variable inside your ``local.conf`` file before building the 177 SDK installer. Doing so ensures that the eventual SDK 178 installation process installs the appropriate library packages 179 as part of the SDK. Following is an example using ``libc`` 180 static development libraries: TOOLCHAIN_TARGET_TASK:append = " 181 libc-staticdev" 182 1837. *Run the Installer:* You can now run the SDK installer from 184 ``tmp/deploy/sdk`` in the Build Directory. Following is an example:: 185 186 $ cd poky/build/tmp/deploy/sdk 187 $ ./poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh 188 189 During execution of the script, you choose the root location for the 190 toolchain. See the 191 ":ref:`sdk-manual/appendix-obtain:installed standard sdk directory structure`" 192 section and the 193 ":ref:`sdk-manual/appendix-obtain:installed extensible sdk directory structure`" 194 section for more information. 195 196Extracting the Root Filesystem 197============================== 198 199After installing the toolchain, for some use cases you might need to 200separately extract a root filesystem: 201 202- You want to boot the image using NFS. 203 204- You want to use the root filesystem as the target sysroot. 205 206- You want to develop your target application using the root filesystem 207 as the target sysroot. 208 209Follow these steps to extract the root filesystem: 210 2111. *Locate and Download the Tarball for the Pre-Built Root Filesystem 212 Image File:* You need to find and download the root filesystem image 213 file that is appropriate for your target system. These files are kept 214 in machine-specific folders in the 215 :yocto_dl:`Index of Releases </releases/yocto/yocto-&DISTRO;/machines/>` 216 in the "machines" directory. 217 218 The machine-specific folders of the "machines" directory contain 219 tarballs (``*.tar.bz2``) for supported machines. These directories 220 also contain flattened root filesystem image files (``*.ext4``), 221 which you can use with QEMU directly. 222 223 The pre-built root filesystem image files follow these naming 224 conventions:: 225 226 core-image-profile-arch.tar.bz2 227 228 Where: 229 profile is the filesystem image's profile: 230 lsb, lsb-dev, lsb-sdk, minimal, minimal-dev, minimal-initramfs, 231 sato, sato-dev, sato-sdk, sato-sdk-ptest. For information on 232 these types of image profiles, see the "Images" chapter in 233 the Yocto Project Reference Manual. 234 235 arch is a string representing the target architecture: 236 beaglebone-yocto, beaglebone-yocto-lsb, edgerouter, edgerouter-lsb, 237 genericx86, genericx86-64, genericx86-64-lsb, genericx86-lsb and qemu*. 238 239 The root filesystems 240 provided by the Yocto Project are based off of the 241 ``core-image-sato`` and ``core-image-minimal`` images. 242 243 For example, if you plan on using a BeagleBone device as your target 244 hardware and your image is a ``core-image-sato-sdk`` image, you can 245 download the following file:: 246 247 core-image-sato-sdk-beaglebone-yocto.tar.bz2 248 2492. *Initialize the Cross-Development Environment:* You must ``source`` 250 the cross-development environment setup script to establish necessary 251 environment variables. 252 253 This script is located in the top-level directory in which you 254 installed the toolchain (e.g. ``poky_sdk``). 255 256 Following is an example based on the toolchain installed in the 257 ":ref:`sdk-manual/appendix-obtain:locating pre-built sdk installers`" section:: 258 259 $ source poky_sdk/environment-setup-core2-64-poky-linux 260 2613. *Extract the Root Filesystem:* Use the ``runqemu-extract-sdk`` 262 command and provide the root filesystem image. 263 264 Following is an example command that extracts the root filesystem 265 from a previously built root filesystem image that was downloaded 266 from the :yocto_dl:`Index of Releases </releases/yocto/yocto-&DISTRO;/machines/>`. 267 This command extracts the root filesystem into the ``core2-64-sato`` 268 directory:: 269 270 $ runqemu-extract-sdk ~/Downloads/core-image-sato-sdk-beaglebone-yocto.tar.bz2 ~/beaglebone-sato 271 272 You could now point to the target sysroot at ``beaglebone-sato``. 273 274Installed Standard SDK Directory Structure 275========================================== 276 277The following figure shows the resulting directory structure after you 278install the Standard SDK by running the ``*.sh`` SDK installation 279script: 280 281.. image:: figures/sdk-installed-standard-sdk-directory.png 282 :scale: 100% 283 284The installed SDK consists of an environment setup script for the SDK, a 285configuration file for the target, a version file for the target, and 286the root filesystem (``sysroots``) needed to develop objects for the 287target system. 288 289Within the figure, italicized text is used to indicate replaceable 290portions of the file or directory name. For example, install_dir/version 291is the directory where the SDK is installed. By default, this directory 292is ``/opt/poky/``. And, version represents the specific snapshot of the 293SDK (e.g. &DISTRO;). Furthermore, target represents the target architecture 294(e.g. ``i586``) and host represents the development system's 295architecture (e.g. ``x86_64``). Thus, the complete names of the two 296directories within the ``sysroots`` could be ``i586-poky-linux`` and 297``x86_64-pokysdk-linux`` for the target and host, respectively. 298 299Installed Extensible SDK Directory Structure 300============================================ 301 302The following figure shows the resulting directory structure after you 303install the Extensible SDK by running the ``*.sh`` SDK installation 304script: 305 306.. image:: figures/sdk-installed-extensible-sdk-directory.png 307 :scale: 80% 308 :align: center 309 310The installed directory structure for the extensible SDK is quite 311different than the installed structure for the standard SDK. The 312extensible SDK does not separate host and target parts in the same 313manner as does the standard SDK. The extensible SDK uses an embedded 314copy of the OpenEmbedded build system, which has its own sysroots. 315 316Of note in the directory structure are an environment setup script for 317the SDK, a configuration file for the target, a version file for the 318target, and log files for the OpenEmbedded build system preparation 319script run by the installer and BitBake. 320 321Within the figure, italicized text is used to indicate replaceable 322portions of the file or directory name. For example, install_dir is the 323directory where the SDK is installed, which is ``poky_sdk`` by default, 324and target represents the target architecture (e.g. ``i586``). 325