1. ELDK 5.x Documentation
Table of contents:
- 1. ELDK 5.x Documentation
- 2. Git Repository Setup
- 3. ELDK Building
- 4. Frequently Asked Questions (and Answers)
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 idba6000e
- ELDK v5.5.2:
- released on Sat Jun 14, 2014
Git tag:"eldk-5.5.2"
= commit idb1642a5
- ELDK v5.5.1:
- released on Mon May 05, 2014
Git tag:"eldk-5.5.1"
= commit id32a7986
- ELDK v5.5:
- released on Sun Feb 16, 2014
Git tag:"eldk-5.5"
= commit iddf9de1f
- ELDK v5.4:
- released on Sun Aug 04, 2013
Git tag:"eldk-5.4"
= commit id9a46fd5
- ELDK v5.3:
- released on Fri Dec 14, 2012
Git tag:"eldk-5.3"
= commit idc2836a8
- ELDK v5.2.1:
- released on Wed Jun 20, 2012
Git tag:"eldk-5.2.1"
= commit id33c5d31
- ELDK v5.2:
- released on Mon May 07, 2012
Git tag:"eldk-5.2"
= commit id3dfe6e5
- ELDK v5.1:
- released on Sun Dec 11, 2011
Git tag:"eldk-5.1"
= commit ida999e4a
- ELDK v5.0:
- released on Sun May 22, 2011
Git tag:"eldk-5.0"
= commit id5cde06e
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. |
- GMAE/Sato: This configuration is based on the
GNOME Mobile & Embedded Initiative (GMAE) software stack.
It focuses on mobile devices and provides user interfaces like
Pimlico, Clutter, Sato and other GNOME Mobile technologies.
In ELDK v5.5.3 this is represented by the"gmae"
cross tool chain and the"sato*"
target root file system packages. - QT Embedded: This configuration uses the Qt application framework.
In ELDK v5.5.3 this is represented by the"qte"
cross tool chain and the"qte*"
target root file system packages.
1.6. Download
1.6.1. Binaries
Ready-to-use binaries of ELDK v5.5.3 are available on our FTP server in the ftp://ftp.denx.de/pub/eldk/5.5.3/ directory. On the FTP server you can find:- An install script: ftp://ftp.denx.de/pub/eldk/5.5.3/install.sh
- For each target architecture one directory:
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv4t
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv5te
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv6
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a-hf
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/mips
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/powerpc
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/powerpc-softfloat
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/powerpc-4xx
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/powerpc-4xx-softfloat
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/powerpc-e500v2
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/m28evk
ftp://ftp.denx.de/pub/eldk/5.5.3/targets/m53evk
- In each target directory there is:
- a file
"*.sha256"
with the SHA256 checksums of all provided files - a configuration file
"target.conf"
for the install script - one or more cross tool chain images
"eldk-eglibc-*-toolchain-*-5.5.3.tar.bz2"
- one or more root file system images
"core-image-*.tar.gz"
- a file
"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 ftp://ftp.denx.de/pub/eldk/5.5.3/install.sh $ cd targets/armv7a $ wget ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a/target.conf $ wget ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a/eldk-eglibc-i686-arm-toolchain-gmae-5.5.3.sh $ wget ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a/core-image-minimal-generic-armv7a.tar.gz $ wget ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a/core-image-sato-sdk-generic-armv7a.tar.gzMake 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 ftp://ftp.denx.de/pub/eldk/5.5.3/targets/armv7a/armv7a.sha256 $ 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:- While ELDK v5.3 (and newer) can be installed in any directory,
for ELDK v5.2 and older, the cross tool chain packages are not
relocatable and can only be installed into their default
location, i. e. into the
"/opt/eldk-5.5.3/"
directory.
Note: To be able to do this, you need write permissions in the"/opt/eldk-5.5.3/"
directory. If needed, run for example the command"sudo chmod 01777 /opt/eldk-5.5.3/"
.
Note 2: The installer attempts to be clever and runs "sudo" where needed, after printing a respective warning message. - The root file system images can be installed anywhere, but superuser (root) permissions are needed to install them as they contain device files etc., and exact ownership and permissions of all files must be preserved.
- At the moment, only one target configuration can be installed on a host. This is again a consequence of the fact that the tools are not relocatable. It is possible to install into another directory but then you will have to make software 'think' that it is installed into the default location, for example by using symbolic links or bind mounts (globally visible for all users) or name spaces (may be used on a per-process base), etc. We intentionally leave this to the experienced user here
install.sh [-D] [-d <dest_dir>] [-a <host_arch>] [-s <sdk_images> ] [-r <rfs_images> ] [<target>] install.sh -l [<target>] install.sh -hOptions:
- -D:
- 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. - -h:
- Print help message.
- -l:
- 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.
- target:
- selects the target architecture and defaults to
"powerpc"
1.7.1. Examples
- To install the GNOME Mobile / Sato configuration of the SDK and
the "minimal", "lsb-sdk" and "sato-sdk" root file system images
for the armv6 architecture:
$ ./install.sh -s gmae -r "lsb-sdk minimal sato-sdk" armv6 *** Installing ./targets/armv6/eldk-eglibc-i686-arm-toolchain-gmae-5.5.3.tar.bz2 into /opt/eldk-5.5.3/armv6 -------------------------------------------------------------------- NOTICE: superuser priviledges will be needed to install the root file system; make sure you have sufficient permissions. -------------------------------------------------------------------- *** Installing ./targets/armv6/core-image-lsb-sdk-generic-armv6.tar.gz into /opt/eldk-5.5.3/armv6/rootfs-lsb-sdk [sudo] password for wd: *** Installing ./targets/armv6/core-image-minimal-generic-armv6.tar.gz into /opt/eldk-5.5.3/armv6/rootfs-minimal *** Installing ./targets/armv6/core-image-sato-sdk-generic-armv6.tar.gz into /opt/eldk-5.5.3/armv6/rootfs-sato-sdk
- To install only the cross tools (but not the root file system) for the
Qt Embedded configuration for the armv7a architecture:
$ ./install.sh -s qte -r - armv7a ...
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 theU-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
Example:
$ 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
Example:
$ 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-".
Example:
$ 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 CROSS_COMPILE=${TARGET_PREFIX} $ 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, theeldk-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://git.denx.de/eldk-switch.git $ cd eldk-switch $ sudo make installThen define the following shell function:
eldk-switch () { eval `eldk-switch.sh $*` }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: eldk-switch.sh [-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. eldk-switch.sh -l Lists the installed ELDKs eldk-switch.sh -q Queries the currently used ELDKThe
"-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} powerpcIf 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.

"-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 CROSS_COMPILE=arm-linux-gnueabi- ARCH=armAnd 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) Examples: 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 | ||||