tool chains

Upload: avinash-jha

Post on 06-Apr-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 Tool Chains

    1/33

    1

    Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Embedded Linux system development

    Cross-compiling

    toolchains

    Thomas Petazzoni

    Michael Opdenacker

    Free Electrons

    Copyright 2004-2010, Free Electrons.Creative Commons BY-SA 3.0 license

    Latest update: Jan 19, 2011,

    Document sources, updates and translations:

    http://free-electrons.com/docs/toolchains

    Corrections, suggestions, contributions and translations are welcome!

    http://free-electrons.com/docs/toolchainshttp://free-electrons.com/docs/toolchains
  • 8/3/2019 Tool Chains

    2/33

    2Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Definition (1)

    The usual development tools available on a GNU/Linux workstation is a

    native toolchain

    This toolchain runs on your workstation and generates code for your

    workstation, usually x86

    For embedded system development, it is usually impossible or not

    interesting to use a native toolchainThe target is too restricted in terms of storage and/or memory

    The target is very slow compared to your workstation

    You may not want to install all development tools on your target.

    Therefore, cross-compiling toolchains are generally used. They run

    on your workstation but generate code for your target.

  • 8/3/2019 Tool Chains

    3/33

    3Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Definition (2)

    x86

    ARMx86

    Compilation

    machine

    Execution

    machine

    Source code

    Native toolchainCross-compiling

    toolchain

    x86 binary ARM binary

  • 8/3/2019 Tool Chains

    4/33

    4Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Components

    Binutils Kernel headers

    C/C++ libraries GCC compiler

    GDB debugger

    (optional)

  • 8/3/2019 Tool Chains

    5/33

    5Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Binutils

    Binutils is a set of tools to generate and manipulate binaries for a

    given CPU architectureas, the assembler, that generates binary code from assemblersource code

    ld, the linker

    ar, ranlib, to generate .a archives, used for libraries

    objdump, readelf, size, nm, strings, to inspect binaries.Very useful analysis tools !

    strip, to strip useless parts of binaries in order to reduce their size

    http://www.gnu.org/software/binutils/

    GPL license

    http://www.gnu.org/software/binutils/http://www.gnu.org/software/binutils/
  • 8/3/2019 Tool Chains

    6/33

    6Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Kernel headers (1)

    The C library and compiled programs

    needs to interact with the kernelAvailable system calls and their

    numbers

    Constant definitions

    Data structures, etc.

    Therefore, compiling the C library

    requires kernel headers, and many

    applications also require them.

    Kernel

    Kernel headers

    C Library

    Applications

    Available in and and a few other

    directories corresponding to the ones visible in include/ in the

    kernel sources

  • 8/3/2019 Tool Chains

    7/33

    7Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Kernel headers (2)

    System call numbers, in

    Constant definitions, here in , included

    from , included from

    Data structures, here in

    #define __NR_exit 1#define __NR_fork 2#define __NR_read 3

    #define O_RDWR 00000002

    struct stat {

    unsigned long st_dev;unsigned long st_ino;

    [...]};

  • 8/3/2019 Tool Chains

    8/33

    8Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Kernel headers (3)

    The kernel-to-userspace ABI is backward compatible

    Binaries generated with a toolchain using kernel headers older than

    the running kernel will work without problem, but won't be able to

    use the new system calls, data structures, etc.

    Binaries generated with a toolchain using kernel headers newer

    than the running kernel might work on if they don't use the recentfeatures, otherwise they will break

    Using the latest kernel headers is not necessary, unless access to

    the new kernel features is needed

    The kernel headers are extracted from the kernel sources usingthe headers_install kernel Makefile target.

    GCC il

  • 8/3/2019 Tool Chains

    9/33

    9Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    GCC compiler

    GNU C Compiler, the famous free software compiler

    Can compile C, C++, Ada, Fortran, Java, Objective-

    C, Objective-C++, and generate code for a large

    number of CPU architectures, including ARM, AVR,

    Blackfin, CRIS, FRV, M32, MIPS, MN10300,

    PowerPC, SH, v850, i386, x86_64, IA64, Xtensa, etc.

    http://gcc.gnu.org/

    Available under the GPL license,

    libraries under the LGPL.

    C lib

    http://gcc.gnu.org/http://gcc.gnu.org/
  • 8/3/2019 Tool Chains

    10/33

    10Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    C library

    The C library is an essential component of a

    Linux systemInterface between the applications and the

    kernel

    Provides the well-known standard C API to

    ease application developmentSeveral C libraries are available:

    glibc, uClibc, eglibc, dietlibc, newlib, etc.

    The choice of the C library must be made at

    the time of the cross-compiling toolchaingeneration, as the GCC compiler is compiled

    against a specific C library.

    Kernel

    C Library

    Applications

    lib

  • 8/3/2019 Tool Chains

    11/33

    11Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    glibc

    http://www.gnu.org/software/libc/

    License: LGPL

    C library from the GNU project

    Designed for performance, standards compliance and

    portability

    Found on all GNU / Linux host systems

    Of course, actively maintained

    Quite big for small embedded systems: approx 2.5 MBon arm(version 2.9 - libc: 1.5 MB, libm: 750 KB)

    Clib

    http://www.gnu.org/software/libc/http://www.gnu.org/software/libc/
  • 8/3/2019 Tool Chains

    12/33

    12Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    uClibc

    http://www.uclibc.org/from CodePoet Consulting

    License: LGPL

    Lightweight C library for small embedded systems

    High configurability: many features can be enabled or

    disabled through a menuconfig interfaceWorks only with Linux/uClinux, works on most embedded

    architectures

    No stable ABI, different ABI depending on the library

    configurationFocus on size rather than performance

    Small compile time

    Clib (2)

    http://www.uclibc.org/http://www.uclibc.org/
  • 8/3/2019 Tool Chains

    13/33

    13Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    uClibc (2)

    Most of the applications compile with uClibc. This applies to all

    applications used in embedded systems.Size (arm): 4 times smaller than glibc!

    uClibc 0.9.30.1: approx. 600 KB (libuClibc: 460 KB, libm: 96KB)

    glibc 2.9: approx 2.5 MB

    Used on a large number of production embedded products, includingconsumer electronic devices

    Actively maintained, large developer and user base

    Now supported by MontaVista, TimeSys and Wind River.

    uClibc (3)

  • 8/3/2019 Tool Chains

    14/33

    14Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    uClibc (3)

    After compilation and installation, the following components are available

    Standard headers, stdio.h, stdlib.h, unistd.h and others,and Linux kernel headers, integrated with the C library headers.

    The libraries themselves, with mainly

    libuClibc, the C library itself

    ld-uClibc, the dynamic loader, responsible for loading the

    shared libraries at the beginning of a program's execution

    librt, the library implementing the real-time related functions

    libstdc++, the C++ standard library

    libpthread, the threads library

    libm, the mathematic library

    Honey I shrunk the programs!

  • 8/3/2019 Tool Chains

    15/33

    15Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Honey, I shrunk the programs!

    C program Compiled with shared libraries Compiled statically

    glibc uClibc glibc uClibc

    Plain hello world

    (stripped)

    5.6 K

    (glibc 2.9)

    5.4 K

    (uClibc 0.9.30.1)

    472 K

    (glibc 2.9)

    18 K

    (uClibc

    0.9.30.1)

    Busybox

    (stripped)

    245 K

    (older glibc)

    231 K

    (older uClibc)

    843 K

    (older glibc)

    311 K

    (older uClibc)

    Executable size comparison on ARM

    eglibc

  • 8/3/2019 Tool Chains

    16/33

    16Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    eglibc

    Embedded glibc , under the LGPL

    Variant of the GNU C Library (GLIBC) designed to work well onembedded systems

    Strives to be source and binary compatible with GLIBC

    eglibc's goals include reduced footprint, configurable components,

    better support for cross-compilation and cross-testing.

    Can be built without support for NIS, locales, IPv6, and many other

    features.

    Supported by a consortium, with Freescale, MIPS, MontaVista and

    Wind River as members.The Debian distribution is switching to eglibc too:

    http://blog.aurel32.net/?p=47

    http://www.eglibc.org

    Other smaller C libraries

    http://blog.aurel32.net/?p=47http://www.eglibc.org/http://www.eglibc.org/http://blog.aurel32.net/?p=47
  • 8/3/2019 Tool Chains

    17/33

    17Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Other smaller C libraries

    Several other smaller C libraries have been developed, but

    none of them have the goal of allowing the compilation oflarge existing applications

    They need specially written programs and applications

    Choices:

    Dietlibc, http://www.fefe.de/dietlibc/. Approximately 70 KB.

    Newlib, http://sourceware.org/newlib/

    Klibc, http://www.kernel.org/pub/linux/libs/klibc/, designed

    for use in an initramfs or initrd at boot time.

    Building a toolchain

    http://www.fefe.de/dietlibc/http://sourceware.org/newlib/http://www.kernel.org/pub/linux/libs/klibc/http://www.kernel.org/pub/linux/libs/klibc/http://sourceware.org/newlib/http://www.fefe.de/dietlibc/
  • 8/3/2019 Tool Chains

    18/33

    18Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Building a toolchain

    Three machines must be distinguished when discussing

    toolchain creation

    The build machine, where the toolchain is built.

    The host machine, where the toolchain will be executed.

    The target machine, where the binaries created by the

    toolchain will be executed.

    Four build types are possible

    Building a toolchain (2)

  • 8/3/2019 Tool Chains

    19/33

    19Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Building a toolchain (2)

    build host target

    Native buildused to build the normal gcc of a

    workstation

    build host target

    Cross buildused to build a toolchain that runs on your

    workstation but generates binaries for the

    target

    build host target

    Cross-native buildused to build a toolchain that runs on your

    target and generates binaries for the

    target

    build host target

    Canadian buildused to build on architecture A a toolchain

    that runs on architecture B and generates

    binaries for architecture C

    The most common solution in embedded

    Building a toolchain (3)

  • 8/3/2019 Tool Chains

    20/33

    20Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Building a toolchain (3)

    Many decisions must be made when building a toolchain

    Choosing the C library

    Choosing the version of the different components

    Choosing the configuration of the toolchain

    Which ABI should be used ? Toolchains for the ARMarchitecture for example, can generate binaries using the

    OABI (Old ABI) or the EABI (Embedded ABI), that are

    incompatible

    Should the toolchain support software floating point, or does

    the hardware support floating point operations ?

    Should the toolchain support locales, IPv6, or other specific

    features ?

    Building a toolchain (4)

  • 8/3/2019 Tool Chains

    21/33

    21Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Building a toolchain (4)

    Crosstool build reports: http://kegel.com/crosstool/crosstool-0.43/buildlogs

    Basic steps

    http://kegel.com/crosstool/crosstool-0.43/buildlogshttp://kegel.com/crosstool/crosstool-0.43/buildlogs
  • 8/3/2019 Tool Chains

    22/33

    22Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Basic steps

    Extract and install kernel headers

    Extract, configure, compile and install binutils

    Extract, configure and compile a first version gcc that

    generates binaries for the target. It will be used to cross-

    compile the C library.

    Extract, configure and compile the C library using the

    previously generated compiler.

    Re-configure and compile the final gcc cross-compiler.

    Homebuilt toolchains

  • 8/3/2019 Tool Chains

    23/33

    23Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Homebuilt toolchains

    Building a cross-compiling toolchain by yourself is a difficult

    and painful task! Can take days or weeks!Lots of details to learn. Several components to build.

    Lots of decisions to make

    (such as C library version and configuration for your platform)

    Need kernel headers and C library sources

    Need to be familiar with current gcc issues and patches on your

    platform

    Useful to be familiar with building and configuring toolshttp://www.aleph1.co.uk/armlinux/docs/toolchain/toolchHOWTO.pdf

    can show you how fun it can be!

    Get a precompiled toolchain

    http://www.aleph1.co.uk/armlinux/docs/toolchain/toolchHOWTO.pdfhttp://www.aleph1.co.uk/armlinux/docs/toolchain/toolchHOWTO.pdf
  • 8/3/2019 Tool Chains

    24/33

    24Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Get a precompiled toolchain

    Solution that most people choose, because it is the simplest

    and most convenient solution

    First, determine what toolchain you need: CPU, endianism, C

    library, component versions, ABI, soft float or hard float, etc.

    Many pre-compiled toolchains are freely available:

    CodeSourcery, http://www.codesourcery.com, is a

    reference in that area, but they only provide glibc

    toolchains.

    See the next page for Linaro toolchainsoptimized for ARM.

    See also http://elinux.org/Toolchains

    Linaro toolchains

    http://www.codesourcery.com/http://elinux.org/Toolchainshttp://elinux.org/Toolchainshttp://www.codesourcery.com/
  • 8/3/2019 Tool Chains

    25/33

    25Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Linaro toolchains

    https://wiki.linaro.org/WorkingGroups/ToolChain

    Linaro contributes to improving mainstream

    gcc on ARM, in particular by hiring

    CodeSourcery developers.

    For people who can't wait for the next releases of gcc, Linaro

    releases modified sources of stable releases of gcc, with theseoptimizations for ARM (mainly for recent Cortex A CPUs).

    As any gcc release, these sources can be used by build tools to

    build their own binary toolchains (Buildroot, OpenEmbedded...)

    This allows to support glibc, uClibc and eglibc.Binary packages are available for Ubuntu users:

    See https://launchpad.net/~linaro-maintainers/+archive/toolchain

    Installing and using a precompiled toolchain

    https://wiki.linaro.org/WorkingGroups/ToolChainhttps://launchpad.net/~linaro-maintainers/+archive/toolchainhttps://launchpad.net/~linaro-maintainers/+archive/toolchainhttps://wiki.linaro.org/WorkingGroups/ToolChain
  • 8/3/2019 Tool Chains

    26/33

    26Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    sta g a d us g a p eco p ed too c a

    Follow the installation procedure proposed by the vendor

    Usually, it is simply a matter of extracting a tarball at the

    proper place

    Toolchains used not to be relocatable!

    You must install them in the location they were built for.

    This is no longer true with gcc 4.x, thanks to sysroot

    support, but it is still more convenient to install them at

    the proper place.

    Then, add the path to toolchain binaries in your PATH:

    export PATH=/path/to/toolchain/bin/:$PATH

    Toolchain building utilities

  • 8/3/2019 Tool Chains

    27/33

    27Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    a b g s

    Another solution is to use utilities that automate the process of

    building the toolchain

    Same advantage as the pre-compiled toolchains: you don't need

    to mess up with all the details of the build process

    But also offers more flexibility in terms of toolchain configuration,

    component version selection, etc.

    They also usually contain several patches that fix known issues

    with the different components on some architectures

    Identical principle: shell scripts or Makefile that automatically

    fetch, extract, configure, compile and install the different

    components

    Toolchain building utilities (2)

  • 8/3/2019 Tool Chains

    28/33

    28Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    Crosstool

    The precursor, written by Dan Kegel

    Set of scripts and patches, glibc-only

    Not really maintained anymore

    http://www.kegel.com/crosstool

    Crosstool-ng

    Rewrite of Crosstool, with a menuconfig-like configuration system

    Feature-full: supports uClibc, glibc, eglibc, hard and soft float, many

    architectures

    Actively maintained

    http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool

    g ( )

    Toolchain building utilities (3)

    http://www.kegel.com/crosstoolhttp://ymorin.is-a-geek.org/dokuwiki/projects/crosstoolhttp://ymorin.is-a-geek.org/dokuwiki/projects/crosstoolhttp://www.kegel.com/crosstool
  • 8/3/2019 Tool Chains

    29/33

    29Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    g ( )

    Many root filesystem building systems also allow the construction of

    cross-compiling toolchain

    Buildroot

    Makefile-based, uClibc only, maintained by the community

    http://buildroot.uclibc.org

    PTXdist

    Makefile-based, uClibc or glibc, maintained mainly by

    Pengutronix

    http://www.pengutronix.de/software/ptxdist/index_en.html

    OpenEmbedded

    The feature-full, but complex building system

    http://www.openembedded.org/

    Practical lab Using Crosstool-NG

    http://buildroot.uclibc.org/http://www.pengutronix.de/software/ptxdist/index_en.htmlhttp://www.openembedded.org/http://www.openembedded.org/http://www.pengutronix.de/software/ptxdist/index_en.htmlhttp://buildroot.uclibc.org/
  • 8/3/2019 Tool Chains

    30/33

    30Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    g

    Time to build your toolchain

    Configure Crosstool-NG

    Run it to build your own cross-

    compiling toolchain

    Related documents

  • 8/3/2019 Tool Chains

    31/33

    Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    All our technical presentations

    on http://free-electrons.com/docs

    Linux kernel

    Device drivers

    Architecture specifics

    Embedded Linux system development

    How to help

    http://free-electrons.com/docshttp://free-electrons.com/docs
  • 8/3/2019 Tool Chains

    32/33

    Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free-electrons.com

    You can help us to improve and maintain this document...

    By sending corrections, suggestions, contributions and

    translations

    By asking your organization to order development, consulting

    and training services performed by the authors of these

    documents (see http://free-electrons.com/).

    By sharing this document with your friends, colleagues

    and with the local Free Software community.

    By adding links on your website to our on-line materials,to increase their visibility in search engine results.

    Free ElectronsLinux kernel

    http://free-electrons.com/http://free-electrons.com/
  • 8/3/2019 Tool Chains

    33/33

    Custom Development

    System integrationEmbedded Linux demos and prototypes

    System optimization

    Application and interface development

    Free ElectronsOur services

    Embedded Linux Training

    All materials released with a free license!

    Unix and GNU/Linux basics

    Linux kernel and drivers development

    Real-time Linux, uClinux

    Development and profiling tools

    Lightweight tools for embedded systemsRoot filesystem creation

    Audio and multimedia

    System optimization

    Consulting and technical support

    Help in decision making

    System architecture

    System design and performance review

    Development tool and application support

    Investigating issues and fixing tool bugs

    Linux device drivers

    Board support code

    Mainstreaming kernel code

    Kernel debugging