|  | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | 
|  | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" | 
|  | [<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] > | 
|  |  | 
|  | <appendix id='sdk-appendix-obtain'> | 
|  |  | 
|  | <title>Obtaining the SDK</title> | 
|  |  | 
|  | <section id='sdk-locating-pre-built-sdk-installers'> | 
|  | <title>Locating Pre-Built SDK Installers</title> | 
|  |  | 
|  | <para> | 
|  | You can use existing, pre-built toolchains by locating and running | 
|  | an SDK installer script that ships with the Yocto Project. | 
|  | Using this method, you select and download an architecture-specific | 
|  | SDK installer and then run the script to hand-install the | 
|  | toolchain. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | You can find SDK installers here: | 
|  | <itemizedlist> | 
|  | <listitem><para><emphasis>Standard SDK Installers:</emphasis> | 
|  | Go to <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink> | 
|  | and find the folder that matches your host development system | 
|  | (i.e. <filename>i686</filename> for 32-bit machines or | 
|  | <filename>x86_64</filename> for 64-bit machines).</para> | 
|  |  | 
|  | <para>Go into that folder and download the SDK installer | 
|  | whose name includes the appropriate target architecture. | 
|  | The toolchains provided by the Yocto Project are based off of | 
|  | the <filename>core-image-sato</filename> image and contain | 
|  | libraries appropriate for developing against that image. | 
|  | For example, if your host development system is a 64-bit x86 | 
|  | system and you are going to use your cross-toolchain for a | 
|  | 32-bit x86 target, go into the <filename>x86_64</filename> | 
|  | folder and download the following installer: | 
|  | <literallayout class='monospaced'> | 
|  | poky-glibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh | 
|  | </literallayout> | 
|  | </para></listitem> | 
|  | <listitem><para><emphasis>Extensible SDK Installers:</emphasis> | 
|  | Installers for the extensible SDK are also located in | 
|  | <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink>. | 
|  | These installers have the string | 
|  | <filename>ext</filename> as part of their names: | 
|  | <literallayout class='monospaced'> | 
|  | poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh | 
|  | </literallayout> | 
|  | </para></listitem> | 
|  | </itemizedlist> | 
|  | </para> | 
|  | </section> | 
|  |  | 
|  | <section id='sdk-building-an-sdk-installer'> | 
|  | <title>Building an SDK Installer</title> | 
|  |  | 
|  | <para> | 
|  | As an alternative to locating and downloading a SDK installer, | 
|  | you can build the SDK installer assuming you have first sourced | 
|  | the environment setup script. | 
|  | See the | 
|  | "<ulink url='&YOCTO_DOCS_QS_URL;#qs-building-images'>Building Images</ulink>" | 
|  | section in the Yocto Project Quick Start for steps that show you | 
|  | how to set up the Yocto Project environment. | 
|  | In particular, you need to be sure the | 
|  | <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink> | 
|  | variable matches the architecture for which you are building and that | 
|  | the | 
|  | <ulink url='&YOCTO_DOCS_REF_URL;#var-SDKMACHINE'><filename>SDKMACHINE</filename></ulink> | 
|  | variable is correctly set if you are building a toolchain designed to | 
|  | run on an architecture that differs from your current development host | 
|  | machine (i.e. the build machine). | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | To build the SDK installer for a standard SDK and populate | 
|  | the SDK image, use the following command: | 
|  | <literallayout class='monospaced'> | 
|  | $ bitbake <replaceable>image</replaceable> -c populate_sdk | 
|  | </literallayout> | 
|  | You can do the same for the extensible SDK using this command: | 
|  | <literallayout class='monospaced'> | 
|  | $ bitbake <replaceable>image</replaceable> -c populate_sdk_ext | 
|  | </literallayout> | 
|  | These commands result in a SDK installer that contains the sysroot | 
|  | that matches your target root filesystem. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | When the <filename>bitbake</filename> command completes, the SDK | 
|  | installer will be in | 
|  | <filename>tmp/deploy/sdk</filename> in the Build Directory. | 
|  | <note><title>Notes</title> | 
|  | <itemizedlist> | 
|  | <listitem><para> | 
|  | By default, this toolchain does not build static binaries. | 
|  | If you want to use the toolchain to build these types of | 
|  | libraries, you need to be sure your image has the | 
|  | appropriate static development libraries. | 
|  | Use the | 
|  | <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink> | 
|  | variable inside your <filename>local.conf</filename> file | 
|  | to install the appropriate library packages. | 
|  | Following is an example using <filename>glibc</filename> | 
|  | static development libraries: | 
|  | <literallayout class='monospaced'> | 
|  | IMAGE_INSTALL_append = " glibc-staticdev" | 
|  | </literallayout> | 
|  | </para></listitem> | 
|  | <listitem><para> | 
|  | For additional information on building the installer, | 
|  | see the | 
|  | <ulink url='https://wiki.yoctoproject.org/wiki/TipsAndTricks/RunningEclipseAgainstBuiltImage'>Cookbook guide to Making an Eclipse Debug Capable Image</ulink> | 
|  | wiki page. | 
|  | </para></listitem> | 
|  | </itemizedlist> | 
|  | </note> | 
|  | </para> | 
|  | </section> | 
|  |  | 
|  | <section id='sdk-extracting-the-root-filesystem'> | 
|  | <title>Extracting the Root Filesystem</title> | 
|  |  | 
|  | <para> | 
|  | After installing the toolchain, for some use cases you | 
|  | might need to separately extract a root filesystem: | 
|  | <itemizedlist> | 
|  | <listitem><para>You want to boot the image using NFS. | 
|  | </para></listitem> | 
|  | <listitem><para>You want to use the root filesystem as the | 
|  | target sysroot. | 
|  | For example, the Eclipse IDE environment with the Eclipse | 
|  | Yocto Plug-in installed allows you to use QEMU to boot | 
|  | under NFS.</para></listitem> | 
|  | <listitem><para>You want to develop your target application | 
|  | using the root filesystem as the target sysroot. | 
|  | </para></listitem> | 
|  | </itemizedlist> | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | To extract the root filesystem, first <filename>source</filename> | 
|  | the cross-development environment setup script to establish | 
|  | necessary environment variables. | 
|  | If you built the toolchain in the Build Directory, you will find | 
|  | the toolchain environment script in the | 
|  | <filename>tmp</filename> directory. | 
|  | If you installed the toolchain by hand, the environment setup | 
|  | script is located in <filename>/opt/poky/&DISTRO;</filename>. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | After sourcing the environment script, use the | 
|  | <filename>runqemu-extract-sdk</filename> command and provide the | 
|  | filesystem image. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | Following is an example. | 
|  | The second command sets up the environment. | 
|  | In this case, the setup script is located in the | 
|  | <filename>/opt/poky/&DISTRO;</filename> directory. | 
|  | The third command extracts the root filesystem from a previously | 
|  | built filesystem that is located in the | 
|  | <filename>~/Downloads</filename> directory. | 
|  | Furthermore, this command extracts the root filesystem into the | 
|  | <filename>qemux86-sato</filename> directory: | 
|  | <literallayout class='monospaced'> | 
|  | $ cd ~ | 
|  | $ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux | 
|  | $ runqemu-extract-sdk \ | 
|  | ~/Downloads/core-image-sato-sdk-qemux86-2011091411831.rootfs.tar.bz2 \ | 
|  | $HOME/qemux86-sato | 
|  | </literallayout> | 
|  | You could now point to the target sysroot at | 
|  | <filename>qemux86-sato</filename>. | 
|  | </para> | 
|  | </section> | 
|  |  | 
|  | <section id='sdk-installed-standard-sdk-directory-structure'> | 
|  | <title>Installed Standard SDK Directory Structure</title> | 
|  |  | 
|  | <para> | 
|  | The following figure shows the resulting directory structure after | 
|  | you install the Standard SDK by running the <filename>*.sh</filename> | 
|  | SDK installation script: | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | <imagedata fileref="figures/sdk-installed-standard-sdk-directory.png" scale="60" align="center" /> | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | The installed SDK consists of an environment setup script for the SDK, | 
|  | a configuration file for the target, a version file for the target, | 
|  | and the root filesystem (<filename>sysroots</filename>) needed to | 
|  | develop objects for the target system. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | Within the figure, italicized text is used to indicate replaceable | 
|  | portions of the file or directory name. | 
|  | For example, | 
|  | <replaceable>install_dir</replaceable>/<replaceable>version</replaceable> | 
|  | is the directory where the SDK is installed. | 
|  | By default, this directory is <filename>/opt/poky/</filename>. | 
|  | And, <replaceable>version</replaceable> represents the specific | 
|  | snapshot of the SDK (e.g. <filename>&DISTRO;</filename>). | 
|  | Furthermore, <replaceable>target</replaceable> represents the target | 
|  | architecture (e.g. <filename>i586</filename>) and | 
|  | <replaceable>host</replaceable> represents the development system's | 
|  | architecture (e.g. <filename>x86_64</filename>). | 
|  | Thus, the complete names of the two directories within the | 
|  | <filename>sysroots</filename> could be | 
|  | <filename>i586-poky-linux</filename> and | 
|  | <filename>x86_64-pokysdk-linux</filename> for the target and host, | 
|  | respectively. | 
|  | </para> | 
|  | </section> | 
|  |  | 
|  | <section id='sdk-installed-extensible-sdk-directory-structure'> | 
|  | <title>Installed Extensible SDK Directory Structure</title> | 
|  |  | 
|  | <para> | 
|  | The following figure shows the resulting directory structure after | 
|  | you install the Extensible SDK by running the <filename>*.sh</filename> | 
|  | SDK installation script: | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | <imagedata fileref="figures/sdk-installed-extensible-sdk-directory.png" scale="60" align="center" /> | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | The installed directory structure for the extensible SDK is quite | 
|  | different than the installed structure for the standard SDK. | 
|  | The extensible SDK does not separate host and target parts in the | 
|  | same manner as does the standard SDK. | 
|  | The extensible SDK uses an embedded copy of the OpenEmbedded | 
|  | build system, which has its own sysroots. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | Of note in the directory structure are an environment setup script | 
|  | for the SDK, a configuration file for the target, a version file for | 
|  | the target, and a log file for the OpenEmbedded build system | 
|  | preparation script run by the installer. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | Within the figure, italicized text is used to indicate replaceable | 
|  | portions of the file or directory name. | 
|  | For example, | 
|  | <replaceable>install_dir</replaceable> is the directory where the SDK | 
|  | is installed, which is <filename>poky_sdk</filename> by default. | 
|  | <replaceable>target</replaceable> represents the target | 
|  | architecture (e.g. <filename>i586</filename>) and | 
|  | <replaceable>host</replaceable> represents the development system's | 
|  | architecture (e.g. <filename>x86_64</filename>). | 
|  | </para> | 
|  | </section> | 
|  |  | 
|  | </appendix> | 
|  | <!-- | 
|  | vim: expandtab tw=80 ts=4 | 
|  | --> |