Skip to main content.

1. ELDK 5.x Documentation

Table of contents:

1.1. Author

This document was written by Wolfgang Denk (wd {at} denx {dot} de).

1.2. Available versions

ELDK v5.5.3:
released on Fri Nov 14, 2014
Git tag: "eldk-5.5.3" = commit id ba6000e
ELDK v5.5.2:
released on Sat Jun 14, 2014
Git tag: "eldk-5.5.2" = commit id b1642a5
ELDK v5.5.1:
released on Mon May 05, 2014
Git tag: "eldk-5.5.1" = commit id 32a7986
ELDK v5.5:
released on Sun Feb 16, 2014
Git tag: "eldk-5.5" = commit id df9de1f
ELDK v5.4:
released on Sun Aug 04, 2013
Git tag: "eldk-5.4" = commit id 9a46fd5
ELDK v5.3:
released on Fri Dec 14, 2012
Git tag: "eldk-5.3" = commit id c2836a8
ELDK v5.2.1:
released on Wed Jun 20, 2012
Git tag: "eldk-5.2.1" = commit id 33c5d31
ELDK v5.2:
released on Mon May 07, 2012
Git tag: "eldk-5.2" = commit id 3dfe6e5
ELDK v5.1:
released on Sun Dec 11, 2011
Git tag: "eldk-5.1" = commit id a999e4a
ELDK v5.0:
released on Sun May 22, 2011
Git tag: "eldk-5.0" = commit id 5cde06e

This document covers the most recent version.

1.3. Supported Host Systems

ELDK v5.5.3 can be installed and run on any recent Linux distribution running on x86 (i686) and x86_64 systems.

Note: In the provided default configuration, 64-bit hosts require a compatibility layer; please see the FAQ for details. Of course it is possible to modify the configuration and build the ELDK with direct support for x86_64 systems.

1.4. Supported Target Architectures

At the moment the following target architectures are supported:

 Target Architecture  Purpose
armv4t Generic ARM target for the ARMv4T architecture
(StrongARM, ARM7TDMI and ARM9TDMI processors
armv5te Generic ARM target for the ARMv5TE architecture
(ARM9E, ARM10E, XScale processors)
Similar to the "arm" target in older versions of the ELDK
armv6 Generic ARM target for the ARMv6 architecture
(ARM11 processors)
armv7a Generic ARM target for the ARMv7-A architecture
(Cortex-A5, -A8, -A9, -A15 processors)
Similar to the "armVFP" target in older versions of the ELDK
armv7a-hf Generic ARM target for the ARMv7-A architecture
(Cortex-A5, -A8, -A9, -A15 processors)
using the Hard-Float ABI ( "-mfloat-abi=hard" )
mips Generic MIPS target for the MIPS32 architecture
Similar to a combination of the "mips_4KC" and "mips_4KCle" targets in older versions of the ELDK (target files are in Big-Endian mode, though)
Note: There is no Xenomai support available for MIPS systems.
powerpc Generic PowerPC target with FPU support
Similar to the "ppc_6xx" target in older versions of the ELDK
powerpc-softfloat Generic PowerPC target for FPU-less systems like MPC8321 etc.
Similar to the "ppc_8xx" target in older versions of the ELDK
powerpc-4xx Generic PowerPC target with FPU support for PPC4xx processors,
similar to the "ppc_4xxFP" target in older versions of the ELDK
powerpc-4xx-softfloat Generic PowerPC target for FPU-less PPC4xx processors,
similar to the "ppc_4xx" target in older versions of the ELDK
powerpc-e500v2 Generic PowerPC target for e500v2 core based processors,
similar to the "ppc_85xxDP" target in older versions of the ELDK
Board-Specific Configurations:
m28evk armv5te based configuration for the M28EVK board
m53evk armv7a-hf based configuration for the M53EVK board

1.5. Supported Target Configurations

ELDK v5.5.3 supports a number of different target configurations. These include different sets of target tools and target libraries depending on the primary usage mode of the target system. At this point of time the following configurations are available:

Image Name Purpose
minimal A small image just capable of allowing a device to boot.
minimal-xenomai Same as "minimal", but with added support for Xenomai.
minimal-mtdutils A "minimal" image that also has support for the Minimal MTD Utilities, which let the user interact with the MTD subsystem in the kernel to perform operations on flash devices.
minimal-dev A "minimal" image suitable for development work.
base A console-only image that fully supports the target device hardware.
basic A foundational basic image without support for X that can be reasonably used for customization.
clutter An image with support for the Open GL-based toolkit Clutter, which enables development of rich and animated graphical user interfaces.
lsb A "basic" image suitable for implementations that conform to Linux Standard Base (LSB).
lsb-dev A "lsb" image that is suitable for development work.
lsb-sdk A "lsb" image that includes everything in meta-toolchain but also includes development headers and libraries to form a complete standalone SDK.
qte-sdk A Qt Embedded based image that also includes development headers and libraries to form a complete standalone SDK.
qte-xenomai-sdk Same as "qte-sdk", but with added support for Xenomai.
sato An image with Sato support, a mobile environment and visual style that works well with mobile devices. The image supports X11 with a Sato theme and Pimlico applications and also contains terminal, editor, and file manager.
sato-dev A "sato" image suitable for development that also includes a native toolchain and libraries needed to build applications on the device itself. The image also includes testing and profiling tools as well as debug symbols.
sato-sdk A "sato" image that also includes development headers and libraries to form a complete standalone SDK.
x11 An X11 image with simple applications such as terminal, editor, and file manager.

For details, please see Appendix D. Reference: Images of The Yocto Project Reference Manual .

There are two different environments for GUI oriented systems:

1.6. Download

1.6.1. Binaries

Ready-to-use binaries of ELDK v5.5.3 are available on our FTP server in the directory.

On the FTP server you can find:

To install ELDK v5.5.3 for a specific target architecture please download at least the install script, the "target.conf" file and the images you want to install.

For example, for a installation of the GMAE/Sato configuration of the tool chain and both the "minimal" and "sato-sdk" root file systems for armv7a targets you would download the following files:

$ mkdir eldk-download
$ cd eldk-download
$ mkdir -p targets/armv7a
$ wget
$ cd targets/armv7a
$ wget
$ wget
$ wget
$ wget

Make sure to keep the same directory structure on your system, as this is what the install script expects.

Note that it is also an excellent idea to download the file with the SHA256 checksums so you can verify the integrity of your downloads using the "sha256sum -c" command:

$ cd eldk-download/targets/armv7a
$ wget
$ sha256sum -c armv7a.sha256
eldk-eglibc-i686-arm-toolchain-gmae-5.5.3.tar.bz2: OK
core-image-minimal-generic-armv7a.tar.gz: OK
core-image-sato-sdk-generic-armv7a.tar.gz: OK
target.conf: OK

1.6.2. Source Code

The source code and all needed tools to build ELDK yourself from scratch are available from our git repository, see section 2. Git Repository Setup.

1.7. Installation

In principle you can install ELDK v5.5.3 by just unpacking the provided tarballs. There are however a few distinctive requirements that have to be kept in mind:

For the average user we recommend to use the install script which tries to hide these complexities and to provide a simple user interface: [-D] [-d <dest_dir>] [-a <host_arch>] [-s <sdk_images> ] [-r <rfs_images> ] [<target>] -l [<target>] -h
Dry-run: display commands, but don't actually execute them.
-a host_arch:
Select the SDK host architecture. Chose one of 'i686' or 'x86_64". Defaults to "i686". (at the moment only the 32 bit version of the packages is provided on the FTP server)
-d dest_dir:
Destination defaults to "/opt/eldk-5.5.3"; you can override it here but for ELDK v5.2 and older you will need to make software 'think' that it is installed into the default location (use symlink or namespaces or ...) Please make sure to read the comments above.
Print help message.
List the SDK and RFS images that are available for the selected target architecture.
-s sdk_images:
Select SDK image. Chose one of 'gmae', 'qte', or '-' for none. Defaults to "gmae".
-r rfs_images:
Select list of RFS images. Chose one or more of 'minimal', 'minimal-mtdutils', 'minimal-dev', 'base', 'basic', 'core', 'clutter', 'lsb', 'lsb-dev', 'lsb-sdk', 'sato', 'sato-dev', 'sato-sdk', 'qte-sdk', or '-' for none. Defaults to all vailable.
selects the target architecture and defaults to "powerpc"

1.7.1. Examples

1.8. Usage

The use of the ELDK for software development tasks is controlled by a number of environment variables. There are two major groups of such software packages, which have slightly different requirements.

The ELDK provides (as "/opt/eldk-*/*/environment-setup-*") as script that sets (most of) the needed variables. The following sections describe how to use these for different development tasks.

1.8.1. Low Level Code

Many low level software packages, like for example the U-Boot boot loader or the Linux kernel, are (intentionally) implemented such that they are mostly self-contained, i. e. they do not depend on header files, system libraries or such of the development host or the used tool chain - instead, they contain all needed code, header files and libraries. This makes them largely independent from the actual build environment.

To build these tools, only very few environment variables need to be set correctly: PATH: defines in which directory the needed tools can be found

$ export PATH=/opt/eldk-5.5.3/powerpc/sysroots/i686-eldk-linux/usr/bin:/opt/eldk-5.5.3/powerpc/sysroots/i686-eldk-linux/usr/bin/powerpc-linux:$PATH
ARCH: defines the processor architecture
$ export ARCH=powerpc
CROSS_COMPILE: defines the common prefix of the cross development tools; for example, the GNU C compiler is usually called by the name "gcc", while the Power Architecture® cross compiler would be run as "powerpc-linux-gcc". Thus the prefix would be ="powerpc-linux-".
$ export CROSS_COMPILE=powerpc-linux-

Note that while the "environment-setup-*" script correctly sets PATH, it does not set ARCH nor CROSS_COMPILE. However, it sets another environment variable, which can be used to extract the needed information (TARGET_PREFIX). An automatic way to set all needed environment variables for low level code like U-Boot or Linux could be:

$ source /opt/eldk-5.5.3/powerpc/environment-setup-*
Here the /powerpc/ part is the critical information which selects which tool chain configuration to chose (and of course the /eldk-5.5.3/ part to select the release to use). The rest can be done automatically:
$ export ARCH=${TARGET_PREFIX%%-*}

1.8.2. User Space Code

User space code, especially when building with complex software packages, requires more variable settings. Usually you want to provide definitions for the compilers (CC, CXX), default compiler options and linker flags (CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS), debugger (GDB), etc. The "environment-setup-*" script provides all these.

When installing the QT Embedded configuration of the development tools, the script also provides the needed definitions to build software for the Qt application framework (i. e. variables like QMAKESPEC, OE_QMAKE_QT_CONFIG, OE_QMAKE_CC etc.)

1.8.3. Using "eldk-switch"

To make life a bit easier, especially when you have to work with multiple architectures and tool chain versions, the eldk-switch tool was created. It can be used to easily switch the build environment, and to provide a lot of other related information.

Installation of the tool is simple:

$ git clone git://
$ cd eldk-switch
$ sudo make install

Then define the following shell function:

eldk-switch () 
    eval ` $*`
Note: It is a good idea to add this definition to your ~/.bash_profile file, so you always have it ready available.

Running the eldk-switch function without arguments gives an idea how to use it:

$ eldk-switch
usage: [-v] [-m] [-r <release>] <board, cpu, eldkcc/target>
        Switches to using the ELDK <release> for
        <board>, <cpu> or <eldkcc>/<target>.
      -m will only effact a minimal amount of environment variables. -l
        Lists the installed ELDKs -q
        Queries the currently used ELDK

The "-l" option allows to query which versions and configurations of the ELDK are installed on this machine:

eldk 3.0: /opt/eldk-3.0 ppc_{4xx,4xxFP,74xx,7xx,82xx,8xx}
eldk 3.1: /opt/eldk-3.1 arm mips_{4KC,4KCle} ppc_{4xx,4xxFP,6xx,6xx,6xx,74xx,8xx}
eldk 3.1.1: /opt/eldk-3.1.1 arm mips_{4KC,4KCle} ppc_{4xx,4xxFP,6xx,74xx,85xx,8xx}
eldk 3.1.1: /opt/eldk-3.1.1-2006-06-07 ppc_{4xx,4xxFP,6xx,74xx,85xx,8xx}
eldk 4.0: /opt/eldk-4.0  ->  eldk-4.0-2006-02-19
eldk 4.0: /opt/eldk-4.0-2006-02-19 arm mips_{4KC,4KCle} ppc_{4xx,4xxFP,6xx,74xx,85xx,8xx}
eldk 4.1: /opt/eldk-4.1  ->  eldk-4.1-2007-01-19
eldk 4.1: /opt/eldk-4.1-2007-01-19 arm mips_{4KC,4KCle} ppc_{4xx,4xxFP,6xx,74xx,85xx,8xx}
eldk 4.1: /opt/eldk-4.1-2007-01-22-uclibc arm
eldk 4.2: /opt/eldk-4.2  ->  eldk-4.2-2008-04-01
eldk 4.2: /opt/eldk-4.2-2008-04-01 ppc_{4xx,4xxFP,6xx,74xx,85xx,85xxDP,8xx}
eldk 4.2: /opt/eldk-4.2-2008-11-24 arm{,VFP}
eldk 4.2: /opt/eldk-4.2-arm  ->  eldk-4.2-2008-11-24
eldk 4.2: /opt/eldk-4.2-ppc64-2008-04-01 ppc64
eldk 5.0: /opt/eldk-5.0 armv{5te,7a,7a-qte,7a-qte.old,7a-qte-rootfs.old} powerpc{,-softfloat}
eldk 5.1: /opt/eldk-5.1 armv{4t,5te,6,7a} imx53 mips powerpc{,-4xx,-4xx-softfloat,-e500v2,-softfloat}
eldk 5.2: /opt/eldk-5.2 armv7a powerpc
eldk 5.2.1: /opt/eldk-5.2.1 armv{4t,5te,6,7a} imx53 mips powerpc{,-4xx,-4xx-softfloat,-e500v2,-softfloat}
eldk 5.3: /opt/eldk-5.3 armv{4t,5te,6,7a,7a-hf} mips powerpc{,-4xx,-4xx-softfloat,-e500v2,-softfloat}
eldk 5.3: /opt/eldk-5.3-qte armv{5te,7a,7a-hf} powerpc
eldk 5.4: /opt/eldk-5.4 armv{5te,7a,7a-2013-07-02,7a-hf} mips powerpc{,-2013-07-02,-4xx,-4xx-softfloat}
eldk 5.5: /opt/eldk-5.5 armv{5te,7a-hf} powerpc

If you want to use ELDK release 5.5 to develop software for an ARMv7a system, you just have to type:

$ eldk-switch -r 5.5 armv7a-hf
Setup for armv7a-hf (using ELDK 5.5)

Sometimes it is not necessary or not wanted to set all the variables defined in the "environment-setup-*" script script, which is what "eldk-switch" will do by default. You can use the "-m" option to acchieve a minimally intrusive effect, i. e. to only set the PATH, ARCH and CROSS_COMPILE environment variables.

ALERT! WARNING: Be careful not to mix using "eldk-switch" with and without the "-m" option. For example, if you use "eldk-switch" without "-m" first to select - say - building for Power architecture systems, and later use "eldk-switch" with "-m" to switch to the ARM architecture, the second call will correctly define a minimal set of settings for ARM, but it will not undo any of the other settings made previously, so you will for example still have envrionment variables like "CC=powerpc-linux-gcc" etc. set. This may cause all kinds of nasty errors. So make it a habit to either always or never use "-m"; don't mix usage.

The "-q" option allows to query the current settings:

$ eldk-switch -q
Currently using eldk 5.5.3 from /opt/eldk-5.5.3/armv7a-hf

And additional tool, "eldk-map", can be used to retrieve all kinds of information that may be needed to map for example CPU types to board names or vice versa, etc.:

$ eldk-map
usage: eldk-map <from> <to> <key>
        The table { <from>, <to> } is queried for <from> = <key>
        where <from> and <to> are fieldnames.
       eldk-map <column>
        Lists all possible values for <column> where
        <column> is a fieldname.
        Valid field names: 'board', 'cpu', 'eldkcc', 'arch', 'alias'
                         'target', 'uboot_config', 'linux_config'
        (can be abbreviated by shortest unique substring)

        eldk-map c b ppc440epx  - show all boards using 440EPx
        eldk-map e b ppc_8xx    - show all boards using ppc_8xx-
          as CROSS_COMPILE.
        eldk-map c              - show all known CPUs
        eldk-map v              - verify integrity of database

1.9. Origin

Release 5.5.3 of our Embedded Linux Development Kit (ELDK) is based on Version "Yocto 1.5.3" (git release tag "yocto-1.5.3" resp. "dora-10.0.3") of the Yocto Project.

The Yocto Project is an open-source collaboration project which is driven by the Linux Foundation. It targets x86, ARM, MIPS, and Power Architecture based systems. The Poky platform builder is used for development and building, which in turn is derived from and intimately connected with the OpenEmbedded project.

1. ELDK 5.x Documentation 2. Git Repository Setup
Home Next