diff options
Diffstat (limited to 'poky/documentation/adt-manual')
-rw-r--r-- | poky/documentation/adt-manual/adt-command.rst | 180 | ||||
-rw-r--r-- | poky/documentation/adt-manual/adt-intro.rst | 138 | ||||
-rw-r--r-- | poky/documentation/adt-manual/adt-manual-intro.rst | 24 | ||||
-rw-r--r-- | poky/documentation/adt-manual/adt-manual.rst | 17 | ||||
-rw-r--r-- | poky/documentation/adt-manual/adt-package.rst | 70 | ||||
-rw-r--r-- | poky/documentation/adt-manual/adt-prepare.rst | 752 | ||||
-rw-r--r-- | poky/documentation/adt-manual/adt-prepare.xml | 4 |
7 files changed, 1183 insertions, 2 deletions
diff --git a/poky/documentation/adt-manual/adt-command.rst b/poky/documentation/adt-manual/adt-command.rst new file mode 100644 index 000000000..de854772b --- /dev/null +++ b/poky/documentation/adt-manual/adt-command.rst @@ -0,0 +1,180 @@ +.. SPDX-License-Identifier: CC-BY-2.0-UK + +********************** +Using the Command Line +********************** + +Recall that earlier the manual discussed how to use an existing +toolchain tarball that had been installed into the default installation +directory, ``/opt/poky/DISTRO``, which is outside of the :term:`Build Directory` +(see the section +"`Using a Cross-Toolchain +Tarball) <#using-an-existing-toolchain-tarball>`__". And, that sourcing +your architecture-specific environment setup script initializes a +suitable cross-toolchain development environment. + +During this setup, locations for the compiler, QEMU scripts, QEMU +binary, a special version of ``pkgconfig`` and other useful utilities +are added to the ``PATH`` variable. Also, variables to assist +``pkgconfig`` and ``autotools`` are also defined so that, for example, +``configure.sh`` can find pre-generated test results for tests that need +target hardware on which to run. You can see the "`Setting Up the +Cross-Development +Environment <#setting-up-the-cross-development-environment>`__" section +for the list of cross-toolchain environment variables established by the +script. + +Collectively, these conditions allow you to easily use the toolchain +outside of the OpenEmbedded build environment on both Autotools-based +projects and Makefile-based projects. This chapter provides information +for both these types of projects. + +Autotools-Based Projects +======================== + +Once you have a suitable cross-toolchain installed, it is very easy to +develop a project outside of the OpenEmbedded build system. This section +presents a simple "Helloworld" example that shows how to set up, +compile, and run the project. + +Creating and Running a Project Based on GNU Autotools +----------------------------------------------------- + +Follow these steps to create a simple Autotools-based project: + +1. *Create your directory:* Create a clean directory for your project + and then make that directory your working location: $ mkdir + $HOME/helloworld $ cd $HOME/helloworld + +2. *Populate the directory:* Create ``hello.c``, ``Makefile.am``, and + ``configure.in`` files as follows: + + - For ``hello.c``, include these lines: #include <stdio.h> main() { + printf("Hello World!\n"); } + + - For ``Makefile.am``, include these lines: bin_PROGRAMS = hello + hello_SOURCES = hello.c + + - For ``configure.in``, include these lines: AC_INIT(hello.c) + AM_INIT_AUTOMAKE(hello,0.1) AC_PROG_CC AC_PROG_INSTALL + AC_OUTPUT(Makefile) + +3. *Source the cross-toolchain environment setup file:* Installation of + the cross-toolchain creates a cross-toolchain environment setup + script in the directory that the ADT was installed. Before you can + use the tools to develop your project, you must source this setup + script. The script begins with the string "environment-setup" and + contains the machine architecture, which is followed by the string + "poky-linux". Here is an example that sources a script from the + default ADT installation directory that uses the 32-bit Intel x86 + Architecture and the DISTRO_NAME Yocto Project release: $ source + /opt/poky/DISTRO/environment-setup-i586-poky-linux + +4. *Generate the local aclocal.m4 files and create the configure + script:* The following GNU Autotools generate the local + ``aclocal.m4`` files and create the configure script: $ aclocal $ + autoconf + +5. *Generate files needed by GNU coding standards:* GNU coding + standards require certain files in order for the project to be + compliant. This command creates those files: $ touch NEWS README + AUTHORS ChangeLog + +6. *Generate the configure file:* This command generates the + ``configure``: $ automake -a + +7. *Cross-compile the project:* This command compiles the project using + the cross-compiler. The + :term:`CONFIGURE_FLAGS` + environment variable provides the minimal arguments for GNU + configure: $ ./configure ${CONFIGURE_FLAGS} + +8. *Make and install the project:* These two commands generate and + install the project into the destination directory: $ make $ make + install DESTDIR=./tmp + +9. *Verify the installation:* This command is a simple way to verify + the installation of your project. Running the command prints the + architecture on which the binary file can run. This architecture + should be the same architecture that the installed cross-toolchain + supports. $ file ./tmp/usr/local/bin/hello + +10. *Execute your project:* To execute the project in the shell, simply + enter the name. You could also copy the binary to the actual target + hardware and run the project there as well: $ ./hello As expected, + the project displays the "Hello World!" message. + +Passing Host Options +-------------------- + +For an Autotools-based project, you can use the cross-toolchain by just +passing the appropriate host option to ``configure.sh``. The host option +you use is derived from the name of the environment setup script found +in the directory in which you installed the cross-toolchain. For +example, the host option for an ARM-based target that uses the GNU EABI +is ``armv5te-poky-linux-gnueabi``. You will notice that the name of the +script is ``environment-setup-armv5te-poky-linux-gnueabi``. Thus, the +following command works to update your project and rebuild it using the +appropriate cross-toolchain tools: $ ./configure +--host=armv5te-poky-linux-gnueabi \\ --with-libtool-sysroot=sysroot_dir + +.. note:: + + If the + configure + script results in problems recognizing the + --with-libtool-sysroot= + sysroot-dir + option, regenerate the script to enable the support by doing the + following and then run the script again: + :: + + $ libtoolize --automake + $ aclocal -I ${OECORE_NATIVE_SYSROOT}/usr/share/aclocal \ + [-I dir_containing_your_project-specific_m4_macros] + $ autoconf + $ autoheader + $ automake -a + + +Makefile-Based Projects +======================= + +For Makefile-based projects, the cross-toolchain environment variables +established by running the cross-toolchain environment setup script are +subject to general ``make`` rules. + +To illustrate this, consider the following four cross-toolchain +environment variables: +:term:`CC`\ =i586-poky-linux-gcc -m32 +-march=i586 --sysroot=/opt/poky/1.8/sysroots/i586-poky-linux +:term:`LD`\ =i586-poky-linux-ld +--sysroot=/opt/poky/1.8/sysroots/i586-poky-linux +:term:`CFLAGS`\ =-O2 -pipe -g +-feliminate-unused-debug-types +:term:`CXXFLAGS`\ =-O2 -pipe -g +-feliminate-unused-debug-types Now, consider the following three cases: + +- *Case 1 - No Variables Set in the ``Makefile``:* Because these + variables are not specifically set in the ``Makefile``, the variables + retain their values based on the environment. + +- *Case 2 - Variables Set in the ``Makefile``:* Specifically setting + variables in the ``Makefile`` during the build results in the + environment settings of the variables being overwritten. + +- *Case 3 - Variables Set when the ``Makefile`` is Executed from the + Command Line:* Executing the ``Makefile`` from the command line + results in the variables being overwritten with command-line content + regardless of what is being set in the ``Makefile``. In this case, + environment variables are not considered unless you use the "-e" flag + during the build: $ make -e file If you use this flag, then the + environment values of the variables override any variables + specifically set in the ``Makefile``. + +.. note:: + + For the list of variables set up by the cross-toolchain environment + setup script, see the " + Setting Up the Cross-Development Environment + " section. diff --git a/poky/documentation/adt-manual/adt-intro.rst b/poky/documentation/adt-manual/adt-intro.rst new file mode 100644 index 000000000..5372f4f54 --- /dev/null +++ b/poky/documentation/adt-manual/adt-intro.rst @@ -0,0 +1,138 @@ +.. SPDX-License-Identifier: CC-BY-2.0-UK + +***************************************** +The Application Development Toolkit (ADT) +***************************************** + +Part of the Yocto Project development solution is an Application +Development Toolkit (ADT). The ADT provides you with a custom-built, +cross-development platform suited for developing a user-targeted product +application. + +Fundamentally, the ADT consists of the following: + +- An architecture-specific cross-toolchain and matching sysroot both + built by the :term:`OpenEmbedded Build System`. + The toolchain and + sysroot are based on a `Metadata <&YOCTO_DOCS_DEV_URL;#metadata>`__ + configuration and extensions, which allows you to cross-develop on + the host machine for the target hardware. + +- The Eclipse IDE Yocto Plug-in. + +- The Quick EMUlator (QEMU), which lets you simulate target hardware. + +- Various user-space tools that greatly enhance your application + development experience. + +The Cross-Development Toolchain +=============================== + +The `Cross-Development +Toolchain <&YOCTO_DOCS_DEV_URL;#cross-development-toolchain>`__ consists +of a cross-compiler, cross-linker, and cross-debugger that are used to +develop user-space applications for targeted hardware. This toolchain is +created either by running the ADT Installer script, a toolchain +installer script, or through a :term:`Build Directory` +that is based on +your Metadata configuration or extension for your targeted device. The +cross-toolchain works with a matching target sysroot. + +Sysroot +======= + +The matching target sysroot contains needed headers and libraries for +generating binaries that run on the target architecture. The sysroot is +based on the target root filesystem image that is built by the +OpenEmbedded build system and uses the same Metadata configuration used +to build the cross-toolchain. + +.. _eclipse-overview: + +Eclipse Yocto Plug-in +===================== + +The Eclipse IDE is a popular development environment and it fully +supports development using the Yocto Project. When you install and +configure the Eclipse Yocto Project Plug-in into the Eclipse IDE, you +maximize your Yocto Project experience. Installing and configuring the +Plug-in results in an environment that has extensions specifically +designed to let you more easily develop software. These extensions allow +for cross-compilation, deployment, and execution of your output into a +QEMU emulation session. You can also perform cross-debugging and +profiling. The environment also supports a suite of tools that allows +you to perform remote profiling, tracing, collection of power data, +collection of latency data, and collection of performance data. + +For information about the application development workflow that uses the +Eclipse IDE and for a detailed example of how to install and configure +the Eclipse Yocto Project Plug-in, see the "`Working Within +Eclipse <&YOCTO_DOCS_DEV_URL;#adt-eclipse>`__" section of the Yocto +Project Development Manual. + +The QEMU Emulator +================= + +The QEMU emulator allows you to simulate your hardware while running +your application or image. QEMU is made available a number of ways: + +- If you use the ADT Installer script to install ADT, you can specify + whether or not to install QEMU. + +- If you have cloned the ``poky`` Git repository to create a + :term:`Source Directory` and you have + sourced the environment setup script, QEMU is installed and + automatically available. + +- If you have downloaded a Yocto Project release and unpacked it to + create a :term:`Source Directory` + and you have sourced the environment setup script, QEMU is installed + and automatically available. + +- If you have installed the cross-toolchain tarball and you have + sourced the toolchain's setup environment script, QEMU is also + installed and automatically available. + +User-Space Tools +================ + +User-space tools are included as part of the Yocto Project. You will +find these tools helpful during development. The tools include +LatencyTOP, PowerTOP, OProfile, Perf, SystemTap, and Lttng-ust. These +tools are common development tools for the Linux platform. + +- *LatencyTOP:* LatencyTOP focuses on latency that causes skips in + audio, stutters in your desktop experience, or situations that + overload your server even when you have plenty of CPU power left. + +- *PowerTOP:* Helps you determine what software is using the most + power. You can find out more about PowerTOP at + https://01.org/powertop/. + +- *OProfile:* A system-wide profiler for Linux systems that is capable + of profiling all running code at low overhead. You can find out more + about OProfile at http://oprofile.sourceforge.net/about/. For + examples on how to setup and use this tool, see the + "`OProfile <&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile>`__" + section in the Yocto Project Profiling and Tracing Manual. + +- *Perf:* Performance counters for Linux used to keep track of certain + types of hardware and software events. For more information on these + types of counters see https://perf.wiki.kernel.org/. For + examples on how to setup and use this tool, see the + "`perf <&YOCTO_DOCS_PROF_URL;#profile-manual-perf>`__" section in the + Yocto Project Profiling and Tracing Manual. + +- *SystemTap:* A free software infrastructure that simplifies + information gathering about a running Linux system. This information + helps you diagnose performance or functional problems. SystemTap is + not available as a user-space tool through the Eclipse IDE Yocto + Plug-in. See http://sourceware.org/systemtap for more + information on SystemTap. For examples on how to setup and use this + tool, see the + "`SystemTap <&YOCTO_DOCS_PROF_URL;#profile-manual-systemtap>`__" + section in the Yocto Project Profiling and Tracing Manual. + +- *Lttng-ust:* A User-space Tracer designed to provide detailed + information on user-space activity. See http://lttng.org/ust + for more information on Lttng-ust. diff --git a/poky/documentation/adt-manual/adt-manual-intro.rst b/poky/documentation/adt-manual/adt-manual-intro.rst new file mode 100644 index 000000000..4e98da16d --- /dev/null +++ b/poky/documentation/adt-manual/adt-manual-intro.rst @@ -0,0 +1,24 @@ +.. SPDX-License-Identifier: CC-BY-2.0-UK + +************ +Introduction +************ + +Welcome to the Yocto Project Application Developer's Guide. This manual +provides information that lets you begin developing applications using +the Yocto Project. + +The Yocto Project provides an application development environment based +on an Application Development Toolkit (ADT) and the availability of +stand-alone cross-development toolchains and other tools. This manual +describes the ADT and how you can configure and install it, how to +access and use the cross-development toolchains, how to customize the +development packages installation, how to use command-line development +for both Autotools-based and Makefile-based projects, and an +introduction to the Eclipse IDE Yocto Plug-in. + +.. note:: + + The ADT is distribution-neutral and does not require the Yocto + Project reference distribution, which is called Poky. This manual, + however, uses examples that use the Poky distribution. diff --git a/poky/documentation/adt-manual/adt-manual.rst b/poky/documentation/adt-manual/adt-manual.rst new file mode 100644 index 000000000..695230c5c --- /dev/null +++ b/poky/documentation/adt-manual/adt-manual.rst @@ -0,0 +1,17 @@ +.. SPDX-License-Identifier: CC-BY-2.0-UK + +=========================================== +Yocto Project Application Developer's Guide +=========================================== + +| + +.. toctree:: + :caption: Table of Contents + :numbered: + + adt-manual-intro + adt-intro + adt-prepare + adt-package + adt-command diff --git a/poky/documentation/adt-manual/adt-package.rst b/poky/documentation/adt-manual/adt-package.rst new file mode 100644 index 000000000..787d406e6 --- /dev/null +++ b/poky/documentation/adt-manual/adt-package.rst @@ -0,0 +1,70 @@ +.. SPDX-License-Identifier: CC-BY-2.0-UK + +************************************************************ +Optionally Customizing the Development Packages Installation +************************************************************ + +Because the Yocto Project is suited for embedded Linux development, it +is likely that you will need to customize your development packages +installation. For example, if you are developing a minimal image, then +you might not need certain packages (e.g. graphics support packages). +Thus, you would like to be able to remove those packages from your +target sysroot. + +Package Management Systems +========================== + +The OpenEmbedded build system supports the generation of sysroot files +using three different Package Management Systems (PMS): + +- *OPKG:* A less well known PMS whose use originated in the + OpenEmbedded and OpenWrt embedded Linux projects. This PMS works with + files packaged in an ``.ipk`` format. See + http://en.wikipedia.org/wiki/Opkg for more information about + OPKG. + +- *RPM:* A more widely known PMS intended for GNU/Linux distributions. + This PMS works with files packaged in an ``.rpm`` format. The build + system currently installs through this PMS by default. See + http://en.wikipedia.org/wiki/RPM_Package_Manager for more + information about RPM. + +- *Debian:* The PMS for Debian-based systems is built on many PMS + tools. The lower-level PMS tool ``dpkg`` forms the base of the Debian + PMS. For information on dpkg see + http://en.wikipedia.org/wiki/Dpkg. + +Configuring the PMS +=================== + +Whichever PMS you are using, you need to be sure that the +:term:`PACKAGE_CLASSES` +variable in the ``conf/local.conf`` file is set to reflect that system. +The first value you choose for the variable specifies the package file +format for the root filesystem at sysroot. Additional values specify +additional formats for convenience or testing. See the +``conf/local.conf`` configuration file for details. + +.. note:: + + For build performance information related to the PMS, see the " + package.bbclass + " section in the Yocto Project Reference Manual. + +As an example, consider a scenario where you are using OPKG and you want +to add the ``libglade`` package to the target sysroot. + +First, you should generate the IPK file for the ``libglade`` package and +add it into a working ``opkg`` repository. Use these commands: $ bitbake +libglade $ bitbake package-index + +Next, source the cross-toolchain environment setup script found in the +:term:`Source Directory`. Follow +that by setting up the installation destination to point to your sysroot +as sysroot_dir. Finally, have an OPKG configuration file conf_file that +corresponds to the ``opkg`` repository you have just created. The +following command forms should now work: $ opkg-cl –f conf_file -o +sysroot_dir update $ opkg-cl –f cconf_file -o sysroot_dir \\ +--force-overwrite install libglade $ opkg-cl –f cconf_file -o +sysroot_dir \\ --force-overwrite install libglade-dbg $ opkg-cl –f +conf_file> -osysroot_dir> \\ --force-overwrite install libglade-dev diff --git a/poky/documentation/adt-manual/adt-prepare.rst b/poky/documentation/adt-manual/adt-prepare.rst new file mode 100644 index 000000000..9b6bd0514 --- /dev/null +++ b/poky/documentation/adt-manual/adt-prepare.rst @@ -0,0 +1,752 @@ +.. SPDX-License-Identifier: CC-BY-2.0-UK + +************************************* +Preparing for Application Development +************************************* + +In order to develop applications, you need set up your host development +system. Several ways exist that allow you to install cross-development +tools, QEMU, the Eclipse Yocto Plug-in, and other tools. This chapter +describes how to prepare for application development. + +.. _installing-the-adt: + +Installing the ADT and Toolchains +================================= + +The following list describes installation methods that set up varying +degrees of tool availability on your system. Regardless of the +installation method you choose, you must ``source`` the cross-toolchain +environment setup script, which establishes several key environment +variables, before you use a toolchain. See the "`Setting Up the +Cross-Development +Environment <#setting-up-the-cross-development-environment>`__" section +for more information. + +.. note:: + + Avoid mixing installation methods when installing toolchains for + different architectures. For example, avoid using the ADT Installer + to install some toolchains and then hand-installing cross-development + toolchains by running the toolchain installer for different + architectures. Mixing installation methods can result in situations + where the ADT Installer becomes unreliable and might not install the + toolchain. + + If you must mix installation methods, you might avoid problems by + deleting ``/var/lib/opkg``, thus purging the ``opkg`` package + metadata. + +- *Use the ADT installer script:* This method is the recommended way to + install the ADT because it automates much of the process for you. For + example, you can configure the installation to install the QEMU + emulator and the user-space NFS, specify which root filesystem + profiles to download, and define the target sysroot location. + +- *Use an existing toolchain:* Using this method, you select and + download an architecture-specific toolchain installer and then run + the script to hand-install the toolchain. If you use this method, you + just get the cross-toolchain and QEMU - you do not get any of the + other mentioned benefits had you run the ADT Installer script. + +- *Use the toolchain from within the Build Directory:* If you already + have a :term:`Build Directory`, + you can build the cross-toolchain within the directory. However, like + the previous method mentioned, you only get the cross-toolchain and + QEMU - you do not get any of the other benefits without taking + separate steps. + +Using the ADT Installer +----------------------- + +To run the ADT Installer, you need to get the ADT Installer tarball, be +sure you have the necessary host development packages that support the +ADT Installer, and then run the ADT Installer Script. + +For a list of the host packages needed to support ADT installation and +use, see the "ADT Installer Extras" lists in the "`Required Packages for +the Host Development +System <&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system>`__" +section of the Yocto Project Reference Manual. + +Getting the ADT Installer Tarball +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ADT Installer is contained in the ADT Installer tarball. You can get +the tarball using either of these methods: + +- *Download the Tarball:* You can download the tarball from + ` <&YOCTO_ADTINSTALLER_DL_URL;>`__ into any directory. + +- *Build the Tarball:* You can use + :term:`BitBake` to generate the + tarball inside an existing :term:`Build Directory`. + + If you use BitBake to generate the ADT Installer tarball, you must + ``source`` the environment setup script + (````` <&YOCTO_DOCS_REF_URL;#structure-core-script>`__ or + ```oe-init-build-env-memres`` <&YOCTO_DOCS_REF_URL;#structure-memres-core-script>`__) + located in the Source Directory before running the ``bitbake`` + command that creates the tarball. + + The following example commands establish the + :term:`Source Directory`, check out the + current release branch, set up the build environment while also + creating the default Build Directory, and run the ``bitbake`` command + that results in the tarball + ``poky/build/tmp/deploy/sdk/adt_installer.tar.bz2``: + + .. note:: + + Before using BitBake to build the ADT tarball, be sure to make + sure your + local.conf + file is properly configured. See the " + User Configuration + " section in the Yocto Project Reference Manual for general + configuration information. + + $ cd ~ $ git clone git://git.yoctoproject.org/poky $ cd poky $ git + checkout -b DISTRO_NAME origin/DISTRO_NAME $ source OE_INIT_FILE $ + bitbake adt-installer + +Configuring and Running the ADT Installer Script +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before running the ADT Installer script, you need to unpack the tarball. +You can unpack the tarball in any directory you wish. For example, this +command copies the ADT Installer tarball from where it was built into +the home directory and then unpacks the tarball into a top-level +directory named ``adt-installer``: $ cd ~ $ cp +poky/build/tmp/deploy/sdk/adt_installer.tar.bz2 $HOME $ tar -xjf +adt_installer.tar.bz2 Unpacking it creates the directory +``adt-installer``, which contains the ADT Installer script +(``adt_installer``) and its configuration file (``adt_installer.conf``). + +Before you run the script, however, you should examine the ADT Installer +configuration file and be sure you are going to get what you want. Your +configurations determine which kernel and filesystem image are +downloaded. + +The following list describes the configurations you can define for the +ADT Installer. For configuration values and restrictions, see the +comments in the ``adt-installer.conf`` file: + +- ``YOCTOADT_REPO``: This area includes the IPKG-based packages and the + root filesystem upon which the installation is based. If you want to + set up your own IPKG repository pointed to by ``YOCTOADT_REPO``, you + need to be sure that the directory structure follows the same layout + as the reference directory set up at + http://adtrepo.yoctoproject.org. Also, your repository needs + to be accessible through HTTP. + +- ``YOCTOADT_TARGETS``: The machine target architectures for which you + want to set up cross-development environments. + +- ``YOCTOADT_QEMU``: Indicates whether or not to install the emulator + QEMU. + +- ``YOCTOADT_NFS_UTIL``: Indicates whether or not to install user-mode + NFS. If you plan to use the Eclipse IDE Yocto plug-in against QEMU, + you should install NFS. + + .. note:: + + To boot QEMU images using our userspace NFS server, you need to be + running + portmap + or + rpcbind + . If you are running + rpcbind + , you will also need to add the + -i + option when + rpcbind + starts up. Please make sure you understand the security + implications of doing this. You might also have to modify your + firewall settings to allow NFS booting to work. + +- ``YOCTOADT_ROOTFS_``\ arch: The root filesystem images you want to + download from the ``YOCTOADT_IPKG_REPO`` repository. + +- ``YOCTOADT_TARGET_SYSROOT_IMAGE_``\ arch: The particular root + filesystem used to extract and create the target sysroot. The value + of this variable must have been specified with + ``YOCTOADT_ROOTFS_``\ arch. For example, if you downloaded both + ``minimal`` and ``sato-sdk`` images by setting + ``YOCTOADT_ROOTFS_``\ arch to "minimal sato-sdk", then + ``YOCTOADT_ROOTFS_``\ arch must be set to either "minimal" or + "sato-sdk". + +- ``YOCTOADT_TARGET_SYSROOT_LOC_``\ arch: The location on the + development host where the target sysroot is created. + +After you have configured the ``adt_installer.conf`` file, run the +installer using the following command: $ cd adt-installer $ +./adt_installer Once the installer begins to run, you are asked to enter +the location for cross-toolchain installation. The default location is +``/opt/poky/``\ release. After either accepting the default location or +selecting your own location, you are prompted to run the installation +script interactively or in silent mode. If you want to closely monitor +the installation, choose "I" for interactive mode rather than "S" for +silent mode. Follow the prompts from the script to complete the +installation. + +Once the installation completes, the ADT, which includes the +cross-toolchain, is installed in the selected installation directory. +You will notice environment setup files for the cross-toolchain in the +installation directory, and image tarballs in the ``adt-installer`` +directory according to your installer configurations, and the target +sysroot located according to the ``YOCTOADT_TARGET_SYSROOT_LOC_``\ arch +variable also in your configuration file. + +.. _using-an-existing-toolchain-tarball: + +Using a Cross-Toolchain Tarball +------------------------------- + +If you want to simply install a cross-toolchain by hand, you can do so +by running the toolchain installer. The installer includes the pre-built +cross-toolchain, the ``runqemu`` script, and support files. If you use +this method to install the cross-toolchain, you might still need to +install the target sysroot by installing and extracting it separately. +For information on how to install the sysroot, see the "`Extracting the +Root Filesystem <#extracting-the-root-filesystem>`__" section. + +Follow these steps: + +1. *Get your toolchain installer using one of the following methods:* + + - Go to ` <&YOCTO_TOOLCHAIN_DL_URL;>`__ and find the folder that + matches your host development system (i.e. ``i686`` for 32-bit + machines or ``x86_64`` for 64-bit machines). + + Go into that folder and download the toolchain installer whose + name includes the appropriate target architecture. The toolchains + provided by the Yocto Project are based off of the + ``core-image-sato`` 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 + ``x86_64`` folder and download the following installer: + poky-glibc-x86_64-core-image-sato-i586-toolchain-DISTRO.sh + + - Build your own toolchain installer. For cases where you cannot use + an installer from the download area, you can build your own as + described in the "`Optionally Building a Toolchain + Installer <#optionally-building-a-toolchain-installer>`__" + section. + +2. *Once you have the installer, run it to install the toolchain:* + + .. note:: + + You must change the permissions on the toolchain installer script + so that it is executable. + + The following command shows how to run the installer given a + toolchain tarball for a 64-bit x86 development host system and a + 32-bit x86 target architecture. The example assumes the toolchain + installer is located in ``~/Downloads/``. $ + ~/Downloads/poky-glibc-x86_64-core-image-sato-i586-toolchain-DISTRO.sh + The first thing the installer prompts you for is the directory into + which you want to install the toolchain. The default directory used + is ``/opt/poky/DISTRO``. If you do not have write permissions for the + directory into which you are installing the toolchain, the toolchain + installer notifies you and exits. Be sure you have write permissions + in the directory and run the installer again. + + When the script finishes, the cross-toolchain is installed. You will + notice environment setup files for the cross-toolchain in the + installation directory. + +.. _using-the-toolchain-from-within-the-build-tree: + +Using BitBake and the Build Directory +------------------------------------- + +A final way of making the cross-toolchain available is to use BitBake to +generate the toolchain within an existing :term:`Build Directory`. +This method does +not install the toolchain into the default ``/opt`` directory. As with +the previous method, if you need to install the target sysroot, you must +do that separately as well. + +Follow these steps to generate the toolchain into the Build Directory: + +1. *Set up the Build Environment:* Source the OpenEmbedded build + environment setup script (i.e. + ````` <&YOCTO_DOCS_REF_URL;#structure-core-script>`__ or + ```oe-init-build-env-memres`` <&YOCTO_DOCS_REF_URL;#structure-memres-core-script>`__) + located in the :term:`Source Directory`. + +2. *Check your Local Configuration File:* At this point, you should be + sure that the :term:`MACHINE` + variable in the ``local.conf`` file found in the ``conf`` directory + of the Build Directory is set for the target architecture. Comments + within the ``local.conf`` file list the values you can use for the + ``MACHINE`` variable. If you do not change the ``MACHINE`` variable, + the OpenEmbedded build system uses ``qemux86`` as the default target + machine when building the cross-toolchain. + + .. note:: + + You can populate the Build Directory with the cross-toolchains for + more than a single architecture. You just need to edit the + MACHINE + variable in the + local.conf + file and re-run the + bitbake + command. + +3. *Make Sure Your Layers are Enabled:* Examine the + ``conf/bblayers.conf`` file and make sure that you have enabled all + the compatible layers for your target machine. The OpenEmbedded build + system needs to be aware of each layer you want included when + building images and cross-toolchains. For information on how to + enable a layer, see the "`Enabling Your + Layer <&YOCTO_DOCS_DEV_URL;#enabling-your-layer>`__" section in the + Yocto Project Development Manual. + +4. *Generate the Cross-Toolchain:* Run ``bitbake meta-ide-support`` to + complete the cross-toolchain generation. Once the ``bitbake`` command + finishes, the cross-toolchain is generated and populated within the + Build Directory. You will notice environment setup files for the + cross-toolchain that contain the string "``environment-setup``" in + the Build Directory's ``tmp`` folder. + + Be aware that when you use this method to install the toolchain, you + still need to separately extract and install the sysroot filesystem. + For information on how to do this, see the "`Extracting the Root + Filesystem <#extracting-the-root-filesystem>`__" section. + +Setting Up the Cross-Development Environment +============================================ + +Before you can develop using the cross-toolchain, you need to set up the +cross-development environment by sourcing the toolchain's environment +setup script. If you used the ADT Installer or hand-installed +cross-toolchain, then you can find this script in the directory you +chose for installation. For this release, the default installation +directory is ````. If you installed the toolchain in the +:term:`Build Directory`, you can find the +environment setup script for the toolchain in the Build Directory's +``tmp`` directory. + +Be sure to run the environment setup script that matches the +architecture for which you are developing. Environment setup scripts +begin with the string "``environment-setup``" and include as part of +their name the architecture. For example, the toolchain environment +setup script for a 64-bit IA-based architecture installed in the default +installation directory would be the following: +YOCTO_ADTPATH_DIR/environment-setup-x86_64-poky-linux When you run the +setup script, many environment variables are defined: +:term:`SDKTARGETSYSROOT` - +The path to the sysroot used for cross-compilation +:term:`PKG_CONFIG_PATH` - The +path to the target pkg-config files +:term:`CONFIG_SITE` - A GNU +autoconf site file preconfigured for the target +:term:`CC` - The minimal command and +arguments to run the C compiler +:term:`CXX` - The minimal command and +arguments to run the C++ compiler +:term:`CPP` - The minimal command and +arguments to run the C preprocessor +:term:`AS` - The minimal command and +arguments to run the assembler :term:`LD` +- The minimal command and arguments to run the linker +:term:`GDB` - The minimal command and +arguments to run the GNU Debugger +:term:`STRIP` - The minimal command and +arguments to run 'strip', which strips symbols +:term:`RANLIB` - The minimal command +and arguments to run 'ranlib' +:term:`OBJCOPY` - The minimal command +and arguments to run 'objcopy' +:term:`OBJDUMP` - The minimal command +and arguments to run 'objdump' :term:`AR` +- The minimal command and arguments to run 'ar' +:term:`NM` - The minimal command and +arguments to run 'nm' +:term:`TARGET_PREFIX` - The +toolchain binary prefix for the target tools +:term:`CROSS_COMPILE` - The +toolchain binary prefix for the target tools +:term:`CONFIGURE_FLAGS` - The +minimal arguments for GNU configure +:term:`CFLAGS` - Suggested C flags +:term:`CXXFLAGS` - Suggested C++ +flags :term:`LDFLAGS` - Suggested +linker flags when you use CC to link +:term:`CPPFLAGS` - Suggested +preprocessor flags + +Securing Kernel and Filesystem Images +===================================== + +You will need to have a kernel and filesystem image to boot using your +hardware or the QEMU emulator. Furthermore, if you plan on booting your +image using NFS or you want to use the root filesystem as the target +sysroot, you need to extract the root filesystem. + +Getting the Images +------------------ + +To get the kernel and filesystem images, you either have to build them +or download pre-built versions. For an example of how to build these +images, see the "`Buiding +Images <&YOCTO_DOCS_QS_URL;#qs-buiding-images>`__" section of the Yocto +Project Quick Start. For an example of downloading pre-build versions, +see the "`Example Using Pre-Built Binaries and +QEMU <#using-pre-built>`__" section. + +The Yocto Project ships basic kernel and filesystem images for several +architectures (``x86``, ``x86-64``, ``mips``, ``powerpc``, and ``arm``) +that you can use unaltered in the QEMU emulator. These kernel images +reside in the release area - ` <&YOCTO_MACHINES_DL_URL;>`__ and are +ideal for experimentation using Yocto Project. For information on the +image types you can build using the OpenEmbedded build system, see the +":ref:`ref-manual/ref-images:Images`" chapter in the Yocto +Project Reference Manual. + +If you are planning on developing against your image and you are not +building or using one of the Yocto Project development images (e.g. +``core-image-*-dev``), you must be sure to include the development +packages as part of your image recipe. + +If you plan on remotely deploying and debugging your application from +within the Eclipse IDE, you must have an image that contains the Yocto +Target Communication Framework (TCF) agent (``tcf-agent``). You can do +this by including the ``eclipse-debug`` image feature. + +.. note:: + + See the " + Image Features + " section in the Yocto Project Reference Manual for information on + image features. + +To include the ``eclipse-debug`` image feature, modify your +``local.conf`` file in the :term:`Build Directory` +so that the +:term:`EXTRA_IMAGE_FEATURES` +variable includes the "eclipse-debug" feature. After modifying the +configuration file, you can rebuild the image. Once the image is +rebuilt, the ``tcf-agent`` will be included in the image and is launched +automatically after the boot. + +Extracting the Root Filesystem +------------------------------ + +If you install your toolchain by hand or build it using BitBake and you +need a root filesystem, you need to extract it separately. If you use +the ADT Installer to install the ADT, the root filesystem is +automatically extracted and installed. + +Here are some cases where you need to extract the root filesystem: + +- You want to boot the image using NFS. + +- 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. + +- You want to develop your target application using the root filesystem + as the target sysroot. + +To extract the root filesystem, first ``source`` 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 ``tmp`` directory. If you installed +the toolchain by hand, the environment setup script is located in +``/opt/poky/DISTRO``. + +After sourcing the environment script, use the ``runqemu-extract-sdk`` +command and provide the filesystem image. + +Following is an example. The second command sets up the environment. In +this case, the setup script is located in the ``/opt/poky/DISTRO`` +directory. The third command extracts the root filesystem from a +previously built filesystem that is located in the ``~/Downloads`` +directory. Furthermore, this command extracts the root filesystem into +the ``qemux86-sato`` directory: $ 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 You could now point to the target sysroot at +``qemux86-sato``. + +Optionally Building a Toolchain Installer +========================================= + +As an alternative to locating and downloading a toolchain installer, you +can build the toolchain installer if you have a :term:`Build Directory`. + +.. note:: + + Although not the preferred method, it is also possible to use + bitbake meta-toolchain + to build the toolchain installer. If you do use this method, you must + separately install and extract the target sysroot. For information on + how to install the sysroot, see the " + Extracting the Root Filesystem + " section. + +To build the toolchain installer and populate the SDK image, use the +following command: $ bitbake image -c populate_sdk The command results +in a toolchain installer that contains the sysroot that matches your +target root filesystem. + +Another powerful feature is that the toolchain is completely +self-contained. The binaries are linked against their own copy of +``libc``, which results in no dependencies on the target system. To +achieve this, the pointer to the dynamic loader is configured at install +time since that path cannot be dynamically altered. This is the reason +for a wrapper around the ``populate_sdk`` archive. + +Another feature is that only one set of cross-canadian toolchain +binaries are produced per architecture. This feature takes advantage of +the fact that the target hardware can be passed to ``gcc`` as a set of +compiler options. Those options are set up by the environment script and +contained in variables such as :term:`CC` +and :term:`LD`. This reduces the space +needed for the tools. Understand, however, that a sysroot is still +needed for every target since those binaries are target-specific. + +Remember, before using any BitBake command, you must source the build +environment setup script (i.e. +````` <&YOCTO_DOCS_REF_URL;#structure-core-script>`__ or +```oe-init-build-env-memres`` <&YOCTO_DOCS_REF_URL;#structure-memres-core-script>`__) +located in the Source Directory and you must make sure your +``conf/local.conf`` variables are correct. In particular, you need to be +sure the :term:`MACHINE` variable +matches the architecture for which you are building and that the +:term:`SDKMACHINE` 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). + +When the ``bitbake`` command completes, the toolchain installer will be +in ``tmp/deploy/sdk`` in the Build Directory. + +.. note:: + + 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 + IMAGE_INSTALL + variable inside your + local.conf + file to install the appropriate library packages. Following is an + example using + glibc + static development libraries: + :: + + IMAGE_INSTALL_append = " glibc-staticdev" + + +Optionally Using an External Toolchain +====================================== + +You might want to use an external toolchain as part of your development. +If this is the case, the fundamental steps you need to accomplish are as +follows: + +- Understand where the installed toolchain resides. For cases where you + need to build the external toolchain, you would need to take separate + steps to build and install the toolchain. + +- Make sure you add the layer that contains the toolchain to your + ``bblayers.conf`` file through the + :term:`BBLAYERS` variable. + +- Set the + :term:`EXTERNAL_TOOLCHAIN` + variable in your ``local.conf`` file to the location in which you + installed the toolchain. + +A good example of an external toolchain used with the Yocto Project is +Mentor Graphics Sourcery G++ Toolchain. You can see information on how +to use that particular layer in the ``README`` file at +http://github.com/MentorEmbedded/meta-sourcery/. You can find +further information by reading about the +:term:`TCMODE` variable in the Yocto +Project Reference Manual's variable glossary. + +.. _using-pre-built: + +Example Using Pre-Built Binaries and QEMU +========================================= + +If hardware, libraries and services are stable, you can get started by +using a pre-built binary of the filesystem image, kernel, and toolchain +and run it using the QEMU emulator. This scenario is useful for +developing application software. + +|Using a Pre-Built Image| + +For this scenario, you need to do several things: + +- Install the appropriate stand-alone toolchain tarball. + +- Download the pre-built image that will boot with QEMU. You need to be + sure to get the QEMU image that matches your target machine's + architecture (e.g. x86, ARM, etc.). + +- Download the filesystem image for your target machine's architecture. + +- Set up the environment to emulate the hardware and then start the + QEMU emulator. + +Installing the Toolchain +------------------------ + +You can download a tarball installer, which includes the pre-built +toolchain, the ``runqemu`` script, and support files from the +appropriate directory under ` <&YOCTO_TOOLCHAIN_DL_URL;>`__. Toolchains +are available for 32-bit and 64-bit x86 development systems from the +``i686`` and ``x86_64`` directories, respectively. The toolchains the +Yocto Project provides are based off the ``core-image-sato`` image and +contain libraries appropriate for developing against that image. Each +type of development system supports five or more target architectures. + +The names of the tarball installer scripts are such that a string +representing the host system appears first in the filename and then is +immediately followed by a string representing the target architecture. + +:: + + poky-glibc-host_system-image_type-arch-toolchain-release_version.sh + + Where: + host_system is a string representing your development system: + + i686 or x86_64. + + image_type is a string representing the image you wish to + develop a Software Development Toolkit (SDK) for use against. + The Yocto Project builds toolchain installers using the + following BitBake command: + + bitbake core-image-sato -c populate_sdk + + arch is a string representing the tuned target architecture: + + i586, x86_64, powerpc, mips, armv7a or armv5te + + release_version is a string representing the release number of the + Yocto Project: + + DISTRO, DISTRO+snapshot + + +For example, the following toolchain installer is for a 64-bit +development host system and a i586-tuned target architecture based off +the SDK for ``core-image-sato``: +poky-glibc-x86_64-core-image-sato-i586-toolchain-DISTRO.sh + +Toolchains are self-contained and by default are installed into +``/opt/poky``. However, when you run the toolchain installer, you can +choose an installation directory. + +The following command shows how to run the installer given a toolchain +tarball for a 64-bit x86 development host system and a 32-bit x86 target +architecture. You must change the permissions on the toolchain installer +script so that it is executable. + +The example assumes the toolchain installer is located in +``~/Downloads/``. + +.. note:: + + If you do not have write permissions for the directory into which you + are installing the toolchain, the toolchain installer notifies you + and exits. Be sure you have write permissions in the directory and + run the installer again. + +$ ~/Downloads/poky-glibc-x86_64-core-image-sato-i586-toolchain-DISTRO.sh + +For more information on how to install tarballs, see the "`Using a +Cross-Toolchain +Tarball <&YOCTO_DOCS_ADT_URL;#using-an-existing-toolchain-tarball>`__" +and "`Using BitBake and the Build +Directory <&YOCTO_DOCS_ADT_URL;#using-the-toolchain-from-within-the-build-tree>`__" +sections in the Yocto Project Application Developer's Guide. + +Downloading the Pre-Built Linux Kernel +-------------------------------------- + +You can download the pre-built Linux kernel suitable for running in the +QEMU emulator from ` <&YOCTO_QEMU_DL_URL;>`__. Be sure to use the kernel +that matches the architecture you want to simulate. Download areas exist +for the five supported machine architectures: ``qemuarm``, ``qemumips``, +``qemuppc``, ``qemux86``, and ``qemux86-64``. + +Most kernel files have one of the following forms: \*zImage-qemuarch.bin +vmlinux-qemuarch.bin Where: arch is a string representing the target +architecture: x86, x86-64, ppc, mips, or arm. + +You can learn more about downloading a Yocto Project kernel in the +"`Yocto Project Kernel <&YOCTO_DOCS_DEV_URL;#local-kernel-files>`__" +bulleted item in the Yocto Project Development Manual. + +Downloading the Filesystem +-------------------------- + +You can also download the filesystem image suitable for your target +architecture from ` <&YOCTO_QEMU_DL_URL;>`__. Again, be sure to use the +filesystem that matches the architecture you want to simulate. + +The filesystem image has two tarball forms: ``ext3`` and ``tar``. You +must use the ``ext3`` form when booting an image using the QEMU +emulator. The ``tar`` form can be flattened out in your host development +system and used for build purposes with the Yocto Project. +core-image-profile-qemuarch.ext3 core-image-profile-qemuarch.tar.bz2 +Where: profile is the filesystem image's profile: lsb, lsb-dev, lsb-sdk, +lsb-qt3, minimal, minimal-dev, sato, sato-dev, or sato-sdk. For +information on these types of image profiles, see the +":ref:`ref-manual/ref-images:Images`" chapter in the Yocto +Project Reference Manual. arch is a string representing the target +architecture: x86, x86-64, ppc, mips, or arm. + +Setting Up the Environment and Starting the QEMU Emulator +--------------------------------------------------------- + +Before you start the QEMU emulator, you need to set up the emulation +environment. The following command form sets up the emulation +environment. $ source +YOCTO_ADTPATH_DIR/environment-setup-arch-poky-linux-if Where: arch is a +string representing the target architecture: i586, x86_64, ppc603e, +mips, or armv5te. if is a string representing an embedded application +binary interface. Not all setup scripts include this string. + +Finally, this command form invokes the QEMU emulator $ runqemu qemuarch +kernel-image filesystem-image Where: qemuarch is a string representing +the target architecture: qemux86, qemux86-64, qemuppc, qemumips, or +qemuarm. kernel-image is the architecture-specific kernel image. +filesystem-image is the .ext3 filesystem image. + +Continuing with the example, the following two commands setup the +emulation environment and launch QEMU. This example assumes the root +filesystem (``.ext3`` file) and the pre-built kernel image file both +reside in your home directory. The kernel and filesystem are for a +32-bit target architecture. $ cd $HOME $ source +YOCTO_ADTPATH_DIR/environment-setup-i586-poky-linux $ runqemu qemux86 +bzImage-qemux86.bin \\ core-image-sato-qemux86.ext3 + +The environment in which QEMU launches varies depending on the +filesystem image and on the target architecture. For example, if you +source the environment for the ARM target architecture and then boot the +minimal QEMU image, the emulator comes up in a new shell in command-line +mode. However, if you boot the SDK image, QEMU comes up with a GUI. + +.. note:: + + Booting the PPC image results in QEMU launching in the same shell in + command-line mode. + +.. |Using a Pre-Built Image| image:: figures/using-a-pre-built-image.png diff --git a/poky/documentation/adt-manual/adt-prepare.xml b/poky/documentation/adt-manual/adt-prepare.xml index 684eb75c5..2dc984325 100644 --- a/poky/documentation/adt-manual/adt-prepare.xml +++ b/poky/documentation/adt-manual/adt-prepare.xml @@ -232,7 +232,7 @@ own location, you are prompted to run the installation script interactively or in silent mode. If you want to closely monitor the installation, - choose “I” for interactive mode rather than “S” for silent mode. + choose "I" for interactive mode rather than "S" for silent mode. Follow the prompts from the script to complete the installation. </para> @@ -765,7 +765,7 @@ <itemizedlist> <listitem><para>Install the appropriate stand-alone toolchain tarball.</para></listitem> <listitem><para>Download the pre-built image that will boot with QEMU. - You need to be sure to get the QEMU image that matches your target machine’s + You need to be sure to get the QEMU image that matches your target machine's architecture (e.g. x86, ARM, etc.).</para></listitem> <listitem><para>Download the filesystem image for your target machine's architecture. </para></listitem> |