blob: ba844507d336ad91faf678e9a065953e59d47daf [file] [log] [blame]
Andrew Geisslerf0343792020-11-18 10:42:21 -06001.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002
3*****************
4Obtaining the SDK
5*****************
6
Patrick Williams92b42cb2022-09-03 06:53:57 -05007Working 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
Andrew Geisslerc9f78652020-09-18 14:11:35 -050021Locating Pre-Built SDK Installers
Patrick Williams92b42cb2022-09-03 06:53:57 -050022---------------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -050023
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
Andrew Geissler517393d2023-01-13 08:55:19 -060031#. *Go to the Installers Directory:* Go to
Andrew Geissler09209ee2020-12-13 08:44:15 -060032 :yocto_dl:`/releases/yocto/yocto-&DISTRO;/toolchain/`
Andrew Geisslerc9f78652020-09-18 14:11:35 -050033
Andrew Geissler517393d2023-01-13 08:55:19 -060034#. *Open the Folder for Your Build Host:* Open the folder that matches
Andrew Geisslerc9f78652020-09-18 14:11:35 -050035 your :term:`Build Host` (i.e.
36 ``i686`` for 32-bit machines or ``x86_64`` for 64-bit machines).
37
Andrew Geissler517393d2023-01-13 08:55:19 -060038#. *Locate and Download the SDK Installer:* You need to find and
Andrew Geisslerc9f78652020-09-18 14:11:35 -050039 download the installer appropriate for your build host, target
40 hardware, and image type.
41
Andrew Geisslerc926e172021-05-07 16:11:35 -050042 The installer files (``*.sh``) follow this naming convention::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050043
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:
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050054 "aarch64", "armv5e", "core2-64", "cortexa8hf-neon", "i586", "mips32r2",
Andrew Geisslerc9f78652020-09-18 14:11:35 -050055 "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``
Andrew Geisslerc926e172021-05-07 16:11:35 -050071 folder and download the following installer::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050072
Andrew Geisslerd1e89492021-02-12 15:35:20 -060073 poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
Andrew Geisslerc9f78652020-09-18 14:11:35 -050074
Andrew Geissler517393d2023-01-13 08:55:19 -060075#. *Run the Installer:* Be sure you have execution privileges and run
Andrew Geisslerc9f78652020-09-18 14:11:35 -050076 the installer. Following is an example from the ``Downloads``
Andrew Geisslerc926e172021-05-07 16:11:35 -050077 directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050078
Andrew Geisslerd1e89492021-02-12 15:35:20 -060079 $ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
Andrew Geisslerc9f78652020-09-18 14:11:35 -050080
81 During execution of the script, you choose the root location for the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050082 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`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -050086 section for more information.
87
88Building an SDK Installer
Patrick Williams92b42cb2022-09-03 06:53:57 -050089-------------------------
Andrew Geisslerc9f78652020-09-18 14:11:35 -050090
91As an alternative to locating and downloading an SDK installer, you can
92build the SDK installer. Follow these steps:
93
Andrew Geissler517393d2023-01-13 08:55:19 -060094#. *Set Up the Build Environment:* Be sure you are set up to use BitBake
Andrew Geissler09209ee2020-12-13 08:44:15 -060095 in a shell. See the ":ref:`dev-manual/start:preparing the build host`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -050096 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
Andrew Geissler517393d2023-01-13 08:55:19 -0600100#. *Clone the ``poky`` Repository:* You need to have a local copy of the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500101 Yocto Project :term:`Source Directory`
102 (i.e. a local
Andrew Geissler09209ee2020-12-13 08:44:15 -0600103 ``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
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500106 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
Andrew Geissler517393d2023-01-13 08:55:19 -0600110#. *Initialize the Build Environment:* While in the root directory of
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500111 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
Andrew Geissler517393d2023-01-13 08:55:19 -0600114 build host::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500115
116 $ source oe-init-build-env
117
Patrick Williams2390b1b2022-11-03 13:47:49 -0500118 Among other things, the script creates the :term:`Build Directory`, which
119 is ``build`` in this case and is located in the Source Directory. After
120 the script runs, your current working directory is set to the ``build``
121 directory.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500122
Andrew Geissler517393d2023-01-13 08:55:19 -0600123#. *Make Sure You Are Building an Installer for the Correct Machine:*
Patrick Williams2390b1b2022-11-03 13:47:49 -0500124 Check to be sure that your :term:`MACHINE` variable in the ``local.conf``
125 file in your :term:`Build Directory` matches the architecture
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500126 for which you are building.
127
Andrew Geissler517393d2023-01-13 08:55:19 -0600128#. *Make Sure Your SDK Machine is Correctly Set:* If you are building a
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500129 toolchain designed to run on an architecture that differs from your
130 current development host machine (i.e. the build host), be sure that
Patrick Williams2390b1b2022-11-03 13:47:49 -0500131 the :term:`SDKMACHINE` variable in the ``local.conf`` file in your
132 :term:`Build Directory` is correctly set.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500133
134 .. note::
135
136 If you are building an SDK installer for the Extensible SDK, the
Patrick Williams2390b1b2022-11-03 13:47:49 -0500137 :term:`SDKMACHINE` value must be set for the architecture of the
138 machine you are using to build the installer. If :term:`SDKMACHINE`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500139 is not set appropriately, the build fails and provides an error
Andrew Geisslerc926e172021-05-07 16:11:35 -0500140 message similar to the following::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500141
Patrick Williams2390b1b2022-11-03 13:47:49 -0500142 The extensible SDK can currently only be built for the same
143 architecture as the machine being built on --- :term:`SDK_ARCH`
144 is set to ``i686`` (likely via setting :term:`SDKMACHINE`) which is
145 different from the architecture of the build machine (``x86_64``).
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500146
147
Andrew Geissler517393d2023-01-13 08:55:19 -0600148#. *Build the SDK Installer:* To build the SDK installer for a standard
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500149 SDK and populate the SDK image, use the following command form. Be
Andrew Geisslerc926e172021-05-07 16:11:35 -0500150 sure to replace ``image`` with an image (e.g. "core-image-sato")::
151
152 $ bitbake image -c populate_sdk
153
154 You can do the same for the extensible SDK using this command form::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500155
156 $ bitbake image -c populate_sdk_ext
157
158 These commands produce an SDK installer that contains the sysroot
159 that matches your target root filesystem.
160
161 When the ``bitbake`` command completes, the SDK installer will be in
Patrick Williams2390b1b2022-11-03 13:47:49 -0500162 ``tmp/deploy/sdk`` in the :term:`Build Directory`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500163
164 .. note::
165
166 - By default, the previous BitBake command does not build static
167 binaries. If you want to use the toolchain to build these types
168 of libraries, you need to be sure your SDK has the appropriate
169 static development libraries. Use the
170 :term:`TOOLCHAIN_TARGET_TASK`
171 variable inside your ``local.conf`` file before building the
172 SDK installer. Doing so ensures that the eventual SDK
173 installation process installs the appropriate library packages
174 as part of the SDK. Following is an example using ``libc``
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500175 static development libraries: TOOLCHAIN_TARGET_TASK:append = "
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500176 libc-staticdev"
177
Andrew Geissler517393d2023-01-13 08:55:19 -0600178#. *Run the Installer:* You can now run the SDK installer from
Patrick Williams2390b1b2022-11-03 13:47:49 -0500179 ``tmp/deploy/sdk`` in the :term:`Build Directory`. Following is an example::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500180
Andrew Geissler95ac1b82021-03-31 14:34:31 -0500181 $ cd poky/build/tmp/deploy/sdk
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600182 $ ./poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500183
184 During execution of the script, you choose the root location for the
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500185 toolchain. See the
186 ":ref:`sdk-manual/appendix-obtain:installed standard sdk directory structure`"
187 section and the
188 ":ref:`sdk-manual/appendix-obtain:installed extensible sdk directory structure`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500189 section for more information.
190
191Extracting the Root Filesystem
192==============================
193
194After installing the toolchain, for some use cases you might need to
195separately extract a root filesystem:
196
197- You want to boot the image using NFS.
198
199- You want to use the root filesystem as the target sysroot.
200
201- You want to develop your target application using the root filesystem
202 as the target sysroot.
203
204Follow these steps to extract the root filesystem:
205
Andrew Geissler517393d2023-01-13 08:55:19 -0600206#. *Locate and Download the Tarball for the Pre-Built Root Filesystem
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500207 Image File:* You need to find and download the root filesystem image
208 file that is appropriate for your target system. These files are kept
209 in machine-specific folders in the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600210 :yocto_dl:`Index of Releases </releases/yocto/yocto-&DISTRO;/machines/>`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500211 in the "machines" directory.
212
213 The machine-specific folders of the "machines" directory contain
214 tarballs (``*.tar.bz2``) for supported machines. These directories
215 also contain flattened root filesystem image files (``*.ext4``),
216 which you can use with QEMU directly.
217
218 The pre-built root filesystem image files follow these naming
Andrew Geisslerc926e172021-05-07 16:11:35 -0500219 conventions::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500220
221 core-image-profile-arch.tar.bz2
222
223 Where:
224 profile is the filesystem image's profile:
225 lsb, lsb-dev, lsb-sdk, minimal, minimal-dev, minimal-initramfs,
226 sato, sato-dev, sato-sdk, sato-sdk-ptest. For information on
227 these types of image profiles, see the "Images" chapter in
228 the Yocto Project Reference Manual.
229
230 arch is a string representing the target architecture:
231 beaglebone-yocto, beaglebone-yocto-lsb, edgerouter, edgerouter-lsb,
232 genericx86, genericx86-64, genericx86-64-lsb, genericx86-lsb and qemu*.
233
234 The root filesystems
235 provided by the Yocto Project are based off of the
236 ``core-image-sato`` and ``core-image-minimal`` images.
237
238 For example, if you plan on using a BeagleBone device as your target
239 hardware and your image is a ``core-image-sato-sdk`` image, you can
Andrew Geisslerc926e172021-05-07 16:11:35 -0500240 download the following file::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500241
242 core-image-sato-sdk-beaglebone-yocto.tar.bz2
243
Andrew Geissler517393d2023-01-13 08:55:19 -0600244#. *Initialize the Cross-Development Environment:* You must ``source``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500245 the cross-development environment setup script to establish necessary
246 environment variables.
247
248 This script is located in the top-level directory in which you
249 installed the toolchain (e.g. ``poky_sdk``).
250
251 Following is an example based on the toolchain installed in the
Andrew Geisslerc926e172021-05-07 16:11:35 -0500252 ":ref:`sdk-manual/appendix-obtain:locating pre-built sdk installers`" section::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500253
Andrew Geissler95ac1b82021-03-31 14:34:31 -0500254 $ source poky_sdk/environment-setup-core2-64-poky-linux
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500255
Andrew Geissler517393d2023-01-13 08:55:19 -0600256#. *Extract the Root Filesystem:* Use the ``runqemu-extract-sdk``
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500257 command and provide the root filesystem image.
258
259 Following is an example command that extracts the root filesystem
260 from a previously built root filesystem image that was downloaded
Andrew Geissler09209ee2020-12-13 08:44:15 -0600261 from the :yocto_dl:`Index of Releases </releases/yocto/yocto-&DISTRO;/machines/>`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500262 This command extracts the root filesystem into the ``core2-64-sato``
Andrew Geisslerc926e172021-05-07 16:11:35 -0500263 directory::
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500264
265 $ runqemu-extract-sdk ~/Downloads/core-image-sato-sdk-beaglebone-yocto.tar.bz2 ~/beaglebone-sato
266
Andrew Geisslerc926e172021-05-07 16:11:35 -0500267 You could now point to the target sysroot at ``beaglebone-sato``.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500268
269Installed Standard SDK Directory Structure
270==========================================
271
272The following figure shows the resulting directory structure after you
273install the Standard SDK by running the ``*.sh`` SDK installation
274script:
275
276.. image:: figures/sdk-installed-standard-sdk-directory.png
Andrew Geisslerd5838332022-05-27 11:33:10 -0500277 :scale: 100%
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500278
279The installed SDK consists of an environment setup script for the SDK, a
280configuration file for the target, a version file for the target, and
281the root filesystem (``sysroots``) needed to develop objects for the
282target system.
283
284Within the figure, italicized text is used to indicate replaceable
285portions of the file or directory name. For example, install_dir/version
286is the directory where the SDK is installed. By default, this directory
287is ``/opt/poky/``. And, version represents the specific snapshot of the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600288SDK (e.g. &DISTRO;). Furthermore, target represents the target architecture
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500289(e.g. ``i586``) and host represents the development system's
290architecture (e.g. ``x86_64``). Thus, the complete names of the two
291directories within the ``sysroots`` could be ``i586-poky-linux`` and
292``x86_64-pokysdk-linux`` for the target and host, respectively.
293
294Installed Extensible SDK Directory Structure
295============================================
296
297The following figure shows the resulting directory structure after you
298install the Extensible SDK by running the ``*.sh`` SDK installation
299script:
300
301.. image:: figures/sdk-installed-extensible-sdk-directory.png
302 :scale: 80%
303 :align: center
304
305The installed directory structure for the extensible SDK is quite
306different than the installed structure for the standard SDK. The
307extensible SDK does not separate host and target parts in the same
308manner as does the standard SDK. The extensible SDK uses an embedded
309copy of the OpenEmbedded build system, which has its own sysroots.
310
311Of note in the directory structure are an environment setup script for
312the SDK, a configuration file for the target, a version file for the
313target, and log files for the OpenEmbedded build system preparation
314script run by the installer and BitBake.
315
316Within the figure, italicized text is used to indicate replaceable
317portions of the file or directory name. For example, install_dir is the
318directory where the SDK is installed, which is ``poky_sdk`` by default,
319and target represents the target architecture (e.g. ``i586``).