blob: 2cadcc1e9090e254f7a884888cc69874a763fd0e [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
2"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
3[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
4
5<appendix id='sdk-appendix-obtain'>
6
7<title>Obtaining the SDK</title>
8
9<section id='sdk-locating-pre-built-sdk-installers'>
10 <title>Locating Pre-Built SDK Installers</title>
11
12 <para>
13 You can use existing, pre-built toolchains by locating and running
14 an SDK installer script that ships with the Yocto Project.
15 Using this method, you select and download an architecture-specific
16 SDK installer and then run the script to hand-install the
17 toolchain.
18 </para>
19
20 <para>
21 Follow these steps to locate and hand-install the toolchain:
22 <orderedlist>
23 <listitem><para>
24 <emphasis>Go to the Installers Directory:</emphasis>
25 Go to <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink>
26 </para></listitem>
27 <listitem><para>
28 <emphasis>Open the Folder for Your Build Host:</emphasis>
29 Open the folder that matches your
30 <ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>build host</ulink>
31 (i.e. <filename>i686</filename> for 32-bit machines or
32 <filename>x86_64</filename> for 64-bit machines).
33 </para></listitem>
34 <listitem><para>
35 <emphasis>Locate and Download the SDK Installer:</emphasis>
36 You need to find and download the installer appropriate for
37 your build host, target hardware, and image type.
38 </para>
39
40 <para>The installer files (<filename>*.sh</filename>) follow
41 this naming convention:
42 <literallayout class='monospaced'>
43 poky-glibc-<replaceable>host_system</replaceable>-core-image-<replaceable>type</replaceable>-<replaceable>arch</replaceable>-toolchain[-ext]-<replaceable>release</replaceable>.sh
44
45 Where:
46 <replaceable>host_system</replaceable> is a string representing your development system:
47 "i686" or "x86_64"
48
49 <replaceable>type</replaceable> is a string representing the image:
50 "sato" or "minimal"
51
52 <replaceable>arch</replaceable> is a string representing the target architecture:
53 "aarch64", "armv5e", "core2-64", "coretexa8hf-neon", "i586", "mips32r2",
54 "mips64", or "ppc7400"
55
56 <replaceable>release</replaceable> is the version of Yocto Project.
57
58 NOTE:
59 The standard SDK installer does not have the "-ext" string as
60 part of the filename.
61
62 </literallayout>
63 The toolchains provided by the Yocto Project are based off of
64 the <filename>core-image-sato</filename> and
65 <filename>core-image-minimal</filename> images and contain
66 libraries appropriate for developing against those images.
67 </para>
68
69 <para>For example, if your build host is a 64-bit x86 system
70 and you need an extended SDK for a 64-bit core2 target, go
71 into the <filename>x86_64</filename> folder and download the
72 following installer:
73 <literallayout class='monospaced'>
74 poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
75 </literallayout>
76 </para></listitem>
77 <listitem><para>
78 <emphasis>Run the Installer:</emphasis>
79 Be sure you have execution privileges and run the installer.
80 Following is an example from the <filename>Downloads</filename>
81 directory:
82 <literallayout class='monospaced'>
83 $ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
84 </literallayout>
85 During execution of the script, you choose the root location
86 for the toolchain.
87 See the
88 "<link linkend='sdk-installed-standard-sdk-directory-structure'>Installed Standard SDK Directory Structure</link>"
89 section and the
90 "<link linkend='sdk-installed-extensible-sdk-directory-structure'>Installed Extensible SDK Directory Structure</link>"
91 section for more information.
92 </para></listitem>
93 </orderedlist>
94 </para>
95</section>
96
97<section id='sdk-building-an-sdk-installer'>
98 <title>Building an SDK Installer</title>
99
100 <para>
101 As an alternative to locating and downloading an SDK installer,
102 you can build the SDK installer.
103 Follow these steps:
104 <orderedlist>
105 <listitem><para>
106 <emphasis>Set Up the Build Environment:</emphasis>
107 Be sure you are set up to use BitBake in a shell.
108 See the
109 "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-preparing-the-build-host'>Preparing the Build Host</ulink>"
110 section in the Yocto Project Development Tasks Manual for
111 information on how to get a build host ready that is either a
112 native Linux machine or a machine that uses CROPS.
113 </para></listitem>
114 <listitem><para>
115 <emphasis>Clone the <filename>poky</filename> Repository:</emphasis>
116 You need to have a local copy of the Yocto Project
117 <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
118 (i.e. a local <filename>poky</filename> repository).
119 See the
120 "<ulink url='&YOCTO_DOCS_DEV_URL;#cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</ulink>"
121 and possibly the
122 "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out by Branch in Poky</ulink>"
123 and
124 "<ulink url='&YOCTO_DOCS_DEV_URL;#checkout-out-by-tag-in-poky'>Checking Out by Tag in Poky</ulink>"
125 sections all in the Yocto Project Development Tasks Manual for
126 information on how to clone the <filename>poky</filename>
127 repository and check out the appropriate branch for your work.
128 </para></listitem>
129 <listitem><para>
130 <emphasis>Initialize the Build Environment:</emphasis>
131 While in the root directory of the Source Directory (i.e.
132 <filename>poky</filename>), run the
133 <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
134 environment setup script to define the OpenEmbedded
135 build environment on your build host.
136 <literallayout class='monospaced'>
137 $ source &OE_INIT_FILE;
138 </literallayout>
139 Among other things, the script creates the
140 <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
141 which is <filename>build</filename> in this case
142 and is located in the Source Directory.
143 After the script runs, your current working directory
144 is set to the <filename>build</filename> directory.
145 </para></listitem>
146 <listitem><para>
147 <emphasis>Make Sure You Are Building an Installer for the Correct Machine:</emphasis>
148 Check to be sure that your
149 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
150 variable in the <filename>local.conf</filename> file in your
151 Build Directory matches the architecture for which you are
152 building.
153 </para></listitem>
154 <listitem><para>
155 <emphasis>Make Sure Your SDK Machine is Correctly Set:</emphasis>
156 If you are building a toolchain designed to run on an
157 architecture that differs from your current development host
158 machine (i.e. the build host), be sure that the
159 <ulink url='&YOCTO_DOCS_REF_URL;#var-SDKMACHINE'><filename>SDKMACHINE</filename></ulink>
160 variable in the <filename>local.conf</filename> file in your
161 Build Directory is correctly set.
162 <note>
163 If you are building an SDK installer for the Extensible
164 SDK, the <filename>SDKMACHINE</filename> value must be
165 set for the architecture of the machine you are using to
166 build the installer.
167 If <filename>SDKMACHINE</filename> is not set appropriately,
168 the build fails and provides an error message similar to
169 the following:
170 <literallayout class='monospaced'>
171 The extensible SDK can currently only be built for the same architecture as the machine being built on - SDK_ARCH is
172 set to i686 (likely via setting SDKMACHINE) which is different from the architecture of the build machine (x86_64).
173 Unable to continue.
174 </literallayout>
175 </note>
176 </para></listitem>
177 <listitem><para>
178 <emphasis>Build the SDK Installer:</emphasis>
179 To build the SDK installer for a standard SDK and populate
180 the SDK image, use the following command form.
181 Be sure to replace <replaceable>image</replaceable> with
182 an image (e.g. "core-image-sato"):
183 <literallayout class='monospaced'>
184 $ bitbake <replaceable>image</replaceable> -c populate_sdk
185 </literallayout>
186 You can do the same for the extensible SDK using this command
187 form:
188 <literallayout class='monospaced'>
189 $ bitbake <replaceable>image</replaceable> -c populate_sdk_ext
190 </literallayout>
191 These commands produce an SDK installer that contains the
192 sysroot that matches your target root filesystem.</para>
193
194 <para>When the <filename>bitbake</filename> command completes,
195 the SDK installer will be in
196 <filename>tmp/deploy/sdk</filename> in the Build Directory.
197 <note><title>Notes</title>
198 <itemizedlist>
199 <listitem><para>
200 By default, the previous BitBake command does not
201 build static binaries.
202 If you want to use the toolchain to build these
203 types of libraries, you need to be sure your SDK
204 has the appropriate static development libraries.
205 Use the
206 <ulink url='&YOCTO_DOCS_REF_URL;#var-TOOLCHAIN_TARGET_TASK'><filename>TOOLCHAIN_TARGET_TASK</filename></ulink>
207 variable inside your <filename>local.conf</filename>
208 file before building the SDK installer.
209 Doing so ensures that the eventual SDK installation
210 process installs the appropriate library packages
211 as part of the SDK.
212 Following is an example using
213 <filename>libc</filename> static development
214 libraries:
215 <literallayout class='monospaced'>
216 TOOLCHAIN_TARGET_TASK_append = " libc-staticdev"
217 </literallayout>
218 </para></listitem>
219 <listitem><para>
220 For additional information on building the
221 installer, see the
222 <ulink url='https://wiki.yoctoproject.org/wiki/TipsAndTricks/RunningEclipseAgainstBuiltImage'>Cookbook guide to Making an <trademark class='trade'>Eclipse</trademark> Debug Capable Image</ulink>
223 wiki page.
224 </para></listitem>
225 </itemizedlist>
226 </note>
227 </para></listitem>
228 <listitem><para>
229 <emphasis>Run the Installer:</emphasis>
230 You can now run the SDK installer from
231 <filename>tmp/deploy/sdk</filename> in the Build Directory.
232 Following is an example:
233 <literallayout class='monospaced'>
234 $ cd ~/poky/build/tmp/deploy/sdk
235 $ ./poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
236 </literallayout>
237 During execution of the script, you choose the root location
238 for the toolchain.
239 See the
240 "<link linkend='sdk-installed-standard-sdk-directory-structure'>Installed Standard SDK Directory Structure</link>"
241 section and the
242 "<link linkend='sdk-installed-extensible-sdk-directory-structure'>Installed Extensible SDK Directory Structure</link>"
243 section for more information.
244 </para></listitem>
245 </orderedlist>
246 </para>
247</section>
248
249<section id='sdk-extracting-the-root-filesystem'>
250 <title>Extracting the Root Filesystem</title>
251
252 <para>
253 After installing the toolchain, for some use cases you
254 might need to separately extract a root filesystem:
255 <itemizedlist>
256 <listitem><para>
257 You want to boot the image using NFS.
258 </para></listitem>
259 <listitem><para>
260 You want to use the root filesystem as the
261 target sysroot.
262 For example, the Eclipse IDE environment with the Eclipse
263 Yocto Plug-in installed allows you to use QEMU to boot
264 under NFS.
265 </para></listitem>
266 <listitem><para>
267 You want to develop your target application
268 using the root filesystem as the target sysroot.
269 </para></listitem>
270 </itemizedlist>
271 </para>
272
273 <para>
274 Follow these steps to extract the root filesystem:
275 <orderedlist>
276 <listitem><para>
277 <emphasis>Locate and Download the Tarball for the Pre-Built
278 Root Filesystem Image File:</emphasis>
279 You need to find and download the root filesystem image
280 file that is appropriate for your target system.
281 These files are kept in machine-specific folders in the
282 <ulink url='&YOCTO_DL_URL;/releases/yocto/yocto-&DISTRO;/machines/'>Index of Releases</ulink>
283 in the "machines" directory.</para>
284
285 <para>The machine-specific folders of the "machines" directory
286 contain tarballs (<filename>*.tar.bz2</filename>) for supported
287 machines.
288 These directories also contain flattened root filesystem
289 image files (<filename>*.ext4</filename>), which you can use
290 with QEMU directly.</para>
291
292 <para>The pre-built root filesystem image files
293 follow these naming conventions:
294 <literallayout class='monospaced'>
295<!--
296 core-image-<replaceable>profile</replaceable>-<replaceable>arch</replaceable>-<replaceable>date_time</replaceable>.rootfs.tar.bz2
297-->
298 core-image-<replaceable>profile</replaceable>-<replaceable>arch</replaceable>.tar.bz2
299
300 Where:
301 <replaceable>profile</replaceable> is the filesystem image's profile:
302 lsb, lsb-dev, lsb-sdk, minimal, minimal-dev, minimal-initramfs,
303 sato, sato-dev, sato-sdk, sato-sdk-ptest. For information on
304 these types of image profiles, see the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter in
305 the Yocto Project Reference Manual.
306
307 <replaceable>arch</replaceable> is a string representing the target architecture:
308 beaglebone-yocto, beaglebone-yocto-lsb, edgerouter, edgerouter-lsb,
309 genericx86, genericx86-64, genericx86-64-lsb, genericx86-lsb,
310 mpc8315e-rdb, mpc8315e-rdb-lsb, and qemu*.
311
312<!-->
313 <replaceable>date_time</replaceable> is a date and time stamp.
314-->
315
316 </literallayout>
317 The root filesystems provided by the Yocto Project are based
318 off of the <filename>core-image-sato</filename> and
319 <filename>core-image-minimal</filename> images.
320 </para>
321
322 <para>For example, if you plan on using a BeagleBone device
323 as your target hardware and your image is a
324 <filename>core-image-sato-sdk</filename>
325 image, you can download the following file:
326 <literallayout class='monospaced'>
327 core-image-sato-sdk-beaglebone-yocto.tar.bz2
328 </literallayout>
329 </para></listitem>
330 <listitem><para>
331 <emphasis>Initialize the Cross-Development Environment:</emphasis>
332 You must <filename>source</filename> the cross-development
333 environment setup script to establish necessary environment
334 variables.</para>
335
336 <para>This script is located in the top-level directory in
337 which you installed the toolchain (e.g.
338 <filename>poky_sdk</filename>).</para>
339
340 <para>Following is an example based on the toolchain installed
341 in the
342 "<link linkend='sdk-locating-pre-built-sdk-installers'>Locating Pre-Built SDK Installers</link>"
343 section:
344 <literallayout class='monospaced'>
345 $ source ~/poky_sdk/environment-setup-core2-64-poky-linux
346 </literallayout>
347 </para></listitem>
348 <listitem><para>
349 <emphasis>Extract the Root Filesystem:</emphasis>
350 Use the <filename>runqemu-extract-sdk</filename> command
351 and provide the root filesystem image.</para>
352
353 <para>Following is an example command that extracts the root
354 filesystem from a previously built root filesystem image that
355 was downloaded from the
356 <ulink url='&YOCTO_DOCS_OM_URL;#index-downloads'>Index of Releases</ulink>.
357 This command extracts the root filesystem into the
358 <filename>core2-64-sato</filename> directory:
359 <literallayout class='monospaced'>
360 $ runqemu-extract-sdk ~/Downloads/core-image-sato-sdk-beaglebone-yocto.tar.bz2 ~/beaglebone-sato
361 </literallayout>
362 You could now point to the target sysroot at
363 <filename>beablebone-sato</filename>.
364 </para></listitem>
365 </orderedlist>
366 </para>
367</section>
368
369<section id='sdk-installed-standard-sdk-directory-structure'>
370 <title>Installed Standard SDK Directory Structure</title>
371
372 <para>
373 The following figure shows the resulting directory structure after
374 you install the Standard SDK by running the <filename>*.sh</filename>
375 SDK installation script:
376 </para>
377
378 <para>
379 <imagedata fileref="figures/sdk-installed-standard-sdk-directory.png" scale="80" align="center" />
380 </para>
381
382 <para>
383 The installed SDK consists of an environment setup script for the SDK,
384 a configuration file for the target, a version file for the target,
385 and the root filesystem (<filename>sysroots</filename>) needed to
386 develop objects for the target system.
387 </para>
388
389 <para>
390 Within the figure, italicized text is used to indicate replaceable
391 portions of the file or directory name.
392 For example,
393 <replaceable>install_dir</replaceable>/<replaceable>version</replaceable>
394 is the directory where the SDK is installed.
395 By default, this directory is <filename>/opt/poky/</filename>.
396 And, <replaceable>version</replaceable> represents the specific
397 snapshot of the SDK (e.g. <filename>&DISTRO;</filename>).
398 Furthermore, <replaceable>target</replaceable> represents the target
399 architecture (e.g. <filename>i586</filename>) and
400 <replaceable>host</replaceable> represents the development system's
401 architecture (e.g. <filename>x86_64</filename>).
402 Thus, the complete names of the two directories within the
403 <filename>sysroots</filename> could be
404 <filename>i586-poky-linux</filename> and
405 <filename>x86_64-pokysdk-linux</filename> for the target and host,
406 respectively.
407 </para>
408</section>
409
410<section id='sdk-installed-extensible-sdk-directory-structure'>
411 <title>Installed Extensible SDK Directory Structure</title>
412
413 <para>
414 The following figure shows the resulting directory structure after
415 you install the Extensible SDK by running the <filename>*.sh</filename>
416 SDK installation script:
417 </para>
418
419 <para>
420 <imagedata fileref="figures/sdk-installed-extensible-sdk-directory.png" scale="80" align="center" />
421 </para>
422
423 <para>
424 The installed directory structure for the extensible SDK is quite
425 different than the installed structure for the standard SDK.
426 The extensible SDK does not separate host and target parts in the
427 same manner as does the standard SDK.
428 The extensible SDK uses an embedded copy of the OpenEmbedded
429 build system, which has its own sysroots.
430 </para>
431
432 <para>
433 Of note in the directory structure are an environment setup script
434 for the SDK, a configuration file for the target, a version file for
435 the target, and log files for the OpenEmbedded build system
436 preparation script run by the installer and BitBake.
437 </para>
438
439 <para>
440 Within the figure, italicized text is used to indicate replaceable
441 portions of the file or directory name.
442 For example,
443 <replaceable>install_dir</replaceable> is the directory where the SDK
444 is installed, which is <filename>poky_sdk</filename> by default, and
445 <replaceable>target</replaceable> represents the target
446 architecture (e.g. <filename>i586</filename>).
447 </para>
448</section>
449
450</appendix>
451<!--
452vim: expandtab tw=80 ts=4
453-->