1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK 2 3************ 4Introduction 5************ 6 7eSDK Introduction 8================= 9 10Welcome to the Yocto Project Application Development and the Extensible 11Software Development Kit (eSDK) manual. This manual 12explains how to use both the Yocto Project extensible and standard 13SDKs to develop applications and images. 14 15All SDKs consist of the following: 16 17- *Cross-Development Toolchain*: This toolchain contains a compiler, 18 debugger, and various associated tools. 19 20- *Libraries, Headers, and Symbols*: The libraries, headers, and 21 symbols are specific to the image (i.e. they match the image 22 against which the SDK was built). 23 24- *Environment Setup Script*: This ``*.sh`` file, once sourced, sets up the 25 cross-development environment by defining variables and preparing for 26 SDK use. 27 28Additionally, an extensible SDK has tools that allow you to easily add 29new applications and libraries to an image, modify the source of an 30existing component, test changes on the target hardware, and easily 31integrate an application into the :term:`OpenEmbedded Build System`. 32 33You can use an SDK to independently develop and test code that is 34destined to run on some target machine. SDKs are completely 35self-contained. The binaries are linked against their own copy of 36``libc``, which results in no dependencies on the target system. To 37achieve this, the pointer to the dynamic loader is configured at install 38time since that path cannot be dynamically altered. This is the reason 39for a wrapper around the ``populate_sdk`` and ``populate_sdk_ext`` 40archives. 41 42Another feature of the SDKs is that only one set of cross-compiler 43toolchain binaries are produced for any given architecture. This feature 44takes advantage of the fact that the target hardware can be passed to 45``gcc`` as a set of compiler options. Those options are set up by the 46environment script and contained in variables such as 47:term:`CC` and 48:term:`LD`. This reduces the space needed 49for the tools. Understand, however, that every target still needs its own 50sysroot because those binaries are target-specific. 51 52The SDK development environment consists of the following: 53 54- The self-contained SDK, which is an architecture-specific 55 cross-toolchain and matching sysroots (target and native) all built 56 by the OpenEmbedded build system (e.g. the SDK). The toolchain and 57 sysroots are based on a :term:`Metadata` 58 configuration and extensions, which allows you to cross-develop on 59 the host machine for the target hardware. Additionally, the 60 extensible SDK contains the ``devtool`` functionality. 61 62- The Quick EMUlator (QEMU), which lets you simulate target hardware. 63 QEMU is not literally part of the SDK. You must build and include 64 this emulator separately. However, QEMU plays an important role in 65 the development process that revolves around use of the SDK. 66 67In summary, the extensible and standard SDK share many features. 68However, the extensible SDK has powerful development tools to help you 69more quickly develop applications. Here is a table that summarizes 70the primary differences between the standard and extensible SDK types 71when considering which to build: 72 73+-----------------------+-----------------------+-----------------------+ 74| *Feature* | *Standard SDK* | *Extensible SDK* | 75+=======================+=======================+=======================+ 76| Toolchain | Yes | Yes [1]_ | 77+-----------------------+-----------------------+-----------------------+ 78| Debugger | Yes | Yes [1]_ | 79+-----------------------+-----------------------+-----------------------+ 80| Size | 100+ MBytes | 1+ GBytes (or 300+ | 81| | | MBytes for minimal | 82| | | w/toolchain) | 83+-----------------------+-----------------------+-----------------------+ 84| ``devtool`` | No | Yes | 85+-----------------------+-----------------------+-----------------------+ 86| Build Images | No | Yes | 87+-----------------------+-----------------------+-----------------------+ 88| Updateable | No | Yes | 89+-----------------------+-----------------------+-----------------------+ 90| Managed Sysroot [2]_ | No | Yes | 91+-----------------------+-----------------------+-----------------------+ 92| Installed Packages | No [3]_ | Yes [4]_ | 93+-----------------------+-----------------------+-----------------------+ 94| Construction | Packages | Shared State | 95+-----------------------+-----------------------+-----------------------+ 96 97.. [1] Extensible SDK contains the toolchain and debugger if :term:`SDK_EXT_TYPE` 98 is "full" or :term:`SDK_INCLUDE_TOOLCHAIN` is "1", which is the default. 99.. [2] Sysroot is managed through the use of ``devtool``. Thus, it is less 100 likely that you will corrupt your SDK sysroot when you try to add 101 additional libraries. 102.. [3] You can add runtime package management to the standard SDK but it is not 103 supported by default. 104.. [4] You must build and make the shared state available to extensible SDK 105 users for "packages" you want to enable users to install. 106 107The Cross-Development Toolchain 108------------------------------- 109 110The :term:`Cross-Development Toolchain` consists 111of a cross-compiler, cross-linker, and cross-debugger that are used to 112develop user-space applications for targeted hardware; in addition, 113the extensible SDK comes with built-in ``devtool`` 114functionality. This toolchain is created by running a SDK installer 115script or through a :term:`Build Directory` that is based on 116your metadata configuration or extension for your targeted device. The 117cross-toolchain works with a matching target sysroot. 118 119Sysroots 120-------- 121 122The native and target sysroots contain needed headers and libraries for 123generating binaries that run on the target architecture. The target 124sysroot is based on the target root filesystem image that is built by 125the OpenEmbedded build system and uses the same metadata configuration 126used to build the cross-toolchain. 127 128The QEMU Emulator 129----------------- 130 131The QEMU emulator allows you to simulate your hardware while running 132your application or image. QEMU is not part of the SDK but is 133automatically installed and available if you have done any one of 134the following: 135 136- cloned the ``poky`` Git repository to create a 137 :term:`Source Directory` and sourced the environment setup script. 138 139- downloaded a Yocto Project release and unpacked it to 140 create a Source Directory and sourced the environment setup 141 script. 142 143- installed the cross-toolchain tarball and 144 sourced the toolchain's setup environment script. 145 146SDK Development Model 147===================== 148 149Fundamentally, the SDK fits into the development process as follows: 150 151.. image:: figures/sdk-environment.png 152 :width: 100% 153 154The SDK is installed on any machine and can be used to develop applications, 155images, and kernels. An SDK can even be used by a QA Engineer or Release 156Engineer. The fundamental concept is that the machine that has the SDK 157installed does not have to be associated with the machine that has the 158Yocto Project installed. A developer can independently compile and test 159an object on their machine and then, when the object is ready for 160integration into an image, they can simply make it available to the 161machine that has the Yocto Project. Once the object is available, the 162image can be rebuilt using the Yocto Project to produce the modified 163image. 164 165You just need to follow these general steps: 166 167#. *Install the SDK for your target hardware:* For information on how to 168 install the SDK, see the ":ref:`sdk-manual/using:installing the sdk`" 169 section. 170 171#. *Download or Build the Target Image:* The Yocto Project supports 172 several target architectures and has many pre-built kernel images and 173 root filesystem images. 174 175 If you are going to develop your application on hardware, go to the 176 :yocto_dl:`machines </releases/yocto/yocto-&DISTRO;/machines/>` download area and choose a 177 target machine area from which to download the kernel image and root 178 filesystem. This download area could have several files in it that 179 support development using actual hardware. For example, the area 180 might contain ``.hddimg`` files that combine the kernel image with 181 the filesystem, boot loaders, and so forth. Be sure to get the files 182 you need for your particular development process. 183 184 If you are going to develop your application and then run and test it 185 using the QEMU emulator, go to the 186 :yocto_dl:`machines/qemu </releases/yocto/yocto-&DISTRO;/machines/qemu>` download area. From this 187 area, go down into the directory for your target architecture (e.g. 188 ``qemux86_64`` for an Intel-based 64-bit architecture). Download the 189 kernel, root filesystem, and any other files you need for your 190 process. 191 192 .. note:: 193 194 To use the root filesystem in QEMU, you need to extract it. See the 195 ":ref:`sdk-manual/appendix-obtain:extracting the root filesystem`" 196 section for information on how to do this extraction. 197 198#. *Develop and Test your Application:* At this point, you have the 199 tools to develop your application. If you need to separately install 200 and use the QEMU emulator, you can go to `QEMU Home 201 Page <https://wiki.qemu.org/Main_Page>`__ to download and learn about 202 the emulator. See the ":doc:`/dev-manual/qemu`" chapter in the 203 Yocto Project Development Tasks Manual for information on using QEMU 204 within the Yocto Project. 205 206The remainder of this manual describes how to use the extensible and 207standard SDKs. There is also information in appendix form describing 208how you can build, install, and modify an SDK. 209