The Embedded Linux Development Kit (ELDK) includes the GNU cross development tools, such as the compilers, binutils, gdb, etc., and a number of pre-built target tools and libraries necessary to provide some functionality on the target system.
It is provided for free with full source code, including all patches, extensions, programs and scripts used to build the tools.
Starting from version 4.1, the is available in two versions, which use Glibc resp. uClibc as the main C library for the target packages.
Packaging and installation is based on the RPM package manager.
Availability
The is available
- on CD-ROM from
- for download on the following server:
- for download on the following mirrors:
The can be installed onto and operate with the following operating systems:
- 2, 3, 4, 5, 6
- Linux 7.3, 8.0, 9
- Linux 8.x, 9.0, 9.1, 9.2, 9.3
- 3.0 (Woody) and testing (Sarge)
- 4.10, 5.04, 6.10
- 5.0
Users also reported successful installation and use of the on the following host systems:
- Linux 7.2, 7.3
- 8.2
- 8.1beta2
- Linux 2006.1
Note: It may be necessary, and is usually recommended, to install the latest available software updates on your host system. For example, on systems, you can use one of yum
, apt-get
or up2date
to keep your systems current.
The for ARM systems supports processors complying with the ARM architecture version 2 to 5. This includes ARM7, ARM9, XScale, AT91RM9200 and other ARM based systems.
There is also an for PowerPC and MIPS systems.
Stable versions of the are distributed in the form of an ISO image, which can be either burned onto a CD or mounted directly, using the loopback Linux device driver (Linux host only).
Development versions of the are available as directory trees so it is easy to update individual packages; instructions for download of these trees and creation of ISO images from it is described in section .
The contains an installation utility and a number of RPM packages, which are installed onto the hard disk of the cross development host by the installation procedure. The RPM packages can be logically divided into two parts:
- Embedded Linux Development Tools (ELDT)
- Target components
The first part contains the cross development tools that are executed on the host system. Most notably, these are the GNU cross compiler, binutils, and gdb
. For a full list of the provided ELDT packages, refer to section below.
The target components are pre-built tools and libraries which are executed on the target system. The includes necessary target components to provide a minimal working NFS-based environment for the target system. For a list of the target packages included in the , refer to section below.
The contains several independent sets of the target packages, one for each supported target CPU family. Each set has been built using compiler code generation and optimization options specific to the respective target CPU family.
You can either download the ready-to-burn ISO-images from one of the mirror sites (see ), or you can download the individual files of the from the development directory tree and either use these directly for installation or create an ISO image that can be burned on CD-ROM.
Change to a directory with sufficient free disk space; for the ARM version of the you need about 250 MiB, or twice as much (500 MiB) if you also want to create an ISO image in this directory.
To download the ISO image from the arm-linux-x86/iso directory of one of the mirror sites you can use standard tools like wget
or ncftpget
, for example:
bash$ wget ftp://ftp.sunet.se/pub/Linux/distributions/eldk/4.1/arm-linux-x86/iso/arm-2007-01-21.iso
If you want to download the whole directory tree instead you can - for example - use the ncftp FTP client:
bash$ ncftp ftp.sunet.se
...
ncftp / > cd /pub/Linux/distributions/eldk/4.1
ncftp /pub/Linux/distributions/eldk/4.1 > bin
ncftp /pub/Linux/distributions/eldk/4.1 > get -R arm-linux-x86/distribution
...
ncftp /pub/Linux/distributions/eldk/4.1 > bye
Depending on your combination of host and target architecture, you should download one of the following directories:
- arm-linux-x86/iso &<60;&<60;&<60;resp.
arm-linux-x86/distribution for ARM targets and x86 Linux hosts.
- mips-linux-x86/iso &<60;&<60;&<60;resp.
mips-linux-x86/distribution for MIPS targets and x86 Linux hosts, or
- ppc-linux-x86/iso &<60;&<60;&<60;resp.
ppc-linux-x86/distribution for PowerPC targets and x86 Linux hosts,
Note: If you don't find the ncftp
tool on your system you can download the NcFTP client from
There are a few executable files (binaries and scripts) in the tree. Make sure they have the execute permissions set in your local copy:
bash$ for file in \
> tools/bin/rpm \
> tools/usr/lib/rpm/rpmd \
> install \
> ELDK_MAKEDEV \
> ELDK_FIXOWNER
> do
> chmod +x arm-linux-x86/distribution/$file
> done
Now create an ISO image from the directory tree:
bash$ mkisofs \
> -A "ELDK-4.1 -- Target: ARM -- Host: x86 Linux" \
> -publisher "(C) `date "+%Y"` DENX Software Engineering, " \
> -p "`id -nu`@`hostname` -- `date`" \
> -V arm-linux-x86 \
> -l -J -R -o eldk-arm-linux-x86.iso arm-linux-x86/distribution
This will create an ISO image eldk-arm-linux-x86.iso in your local directory that can be burned on CD or mounted using the loopback device and used for installation as described above. Of course you can use the local copy of the directory tree directly for the installation, too.
Please refer to section for instructions on obtaining the build environment needed to re-build the from scratch.
The initial installation is performed using the install
utility located in the root of the ISO image directory tree. The install
utility has the following syntax:
$ ./install [-d ] [] [] ...
-d |
Specifies the root directory of the being installed. If omitted, the goes into the current directory. |
|
Specifies the target CPU family the user desires to install. If one or more parameters are specified, only the target components specific to the respective CPU families are installed onto the host. If omitted, the target components for all supported target CPU families are installed. |
Note: Make sure that the "exec"
option to the mount command is in effect when mounting the ISO image. Otherwise the install
program cannot be executed. On some distributions, it may be necessary to modify the /etc/fstab file, adding the "exec" mount option to the cdrom entry - it may also be the case that other existing mount options, such as "user" prevent a particular configuration from mounting the CD with appropriate "exec" permission. In such cases, consult your distribution documentation or mount the CD explicitly using a command such as "sudo mount -o exec /dev/cdrom /mnt/cdrom" (sudo allows regular users to run certain privileged commands but may not be configured - run the previous command as root without "sudo" in the case that "sudo" has not been setup for use on your particular GNU/Linux system).
You can install the to any empty directory you wish, the only requirement being that you have to have write and execute permissions on the directory. The installation process does not require superuser privileges.
Depending on the parameters the install
utility is invoked with, it installs one or more sets of target components. The ELDT packages are installed in any case.
Refer to section for a sample usage of the .
Note: If you intend to use the installation as a root filesystem exported over NFS, then you now have to finish the configuration of the following the instructions in .
Note: Installation of the Glibc- and uClibc-based versions into one directory is not yet supported.
The has an RPM-based structure. This means that on the ISO image, individual components of the are in the form of RPM packages, and after installation, the maintains its own database which contains information about installed packages. The RPM database is kept local to the specific installation, which allows you to have multiple independent installations on your host system. (That is, you can install several instances of under different directories and work with them independently). Also, this provides for easy installation and management of individual packages.
To list the installed RPM packages, use the following command:
bash$ ${CROSS_COMPILE}rpm -qa
To remove an package, use the following command:
bash$ ${CROSS_COMPILE}rpm -e
To install a package, use the following command:
bash$ ${CROSS_COMPILE}rpm -i
To update a package, use the following command:
bash$ ${CROSS_COMPILE}rpm -U
For the above commands to work correctly, it is crucial that the correct rpm
binary gets invoked. In case of multiple installations and RedHat-based host system, there may well be several rpm
tools installed on the host system.
You must make sure, either by using an explicit path or by having set an appropriate PATH
environment variable, that when you invoke rpm
to install/remove components of a installation, it is the 's rpm
utility that gets actually invoked. The rpm
utility is located in the bin
subdirectory relative to the root installation directory.
To avoid confusion with the host OS (RedHat) rpm
utility, the creates symlinks to its rpm
binary with the names such that it could be invoked using the ${CROSS_COMPILE}rpm
notation, for all supported values.
Note: The standard (host OS) rpm
utility allows various macros and configuration parameters to specified in user-specific ~/.rpmrc and ~/.rpmmacros files. The rpm tool also has this capability, but the names of the user-specific configuration files are ~/.eldk_rpmrc and ~/.eldk_rpmmacros, respectively.
To remove the entire installation, use the following command while in the root directory:
bash$ rm -rf
where
specifies the root directory of the to be removed.
After the initial installation is complete, all you have to do to start working with the is to set and export the CROSS_COMPILE
environment variable. Optionally, you may wish to add the bin
and usr/bin
directories of your installation to the value of your PATH
environment variable. For instance, a sample installation and usage scenario looks as follows:
- Create a new directory where the is to be installed, say:
bash$ mkdir /opt/eldk
- Mount a CD or an ISO image with the distribution:
bash$ mount /dev/cdrom /mnt/cdrom
- Run the installation utility included on the distribution to install into that specified directory:
bash$ /mnt/cdrom/install -d /opt/eldk
- After the installation utility completes, export the
CROSS_COMPILE
variable: bash$ export CROSS_COMPILE=arm-linux-
Note: The trailing '-' character in the CROSS_COMPILE
variable value is optional and has no effect on the cross tools behavior.
- Add the directories /opt/eldk/usr/bin and /opt/eldk/bin to
PATH
: bash$ PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin
- Compile a file:
bash$ ${CROSS_COMPILE}gcc -o hello_world hello_world.c
Note: You can also call the cross tools using the generic prefix arm-linux- for example: bash$ arm-linux-gcc -o hello_world hello_world.c
The value of the CROSS_COMPILE
variable must correspond to the target CPU family you want the cross tools to work for. Refer to the table below for the supported CROSS_COMPILE
variable values:
CROSS_COMPILE Value |
Predefined Compiler Flag |
FPU present or not |
arm-linux- |
-mcpu=arm9 |
No |
No special actions are required from the user to switch between multiple installations on the same host system. Which installation is used is determined entirely by the filesystem location of the binary that is being invoked. This approach can be illustrated using the following example.
Assume the directory /work/denx_tools/usr/bin, where the arm-linux-gcc
compiler binary has been installed, is a part of the PATH
environment variable. The user types the command as follows:
$ arm-linux-gcc -c myfile.c
To load the correct include files, find the correct libraries, spec files, etc., the compiler needs to know the root directory. The compiler determines this information by analyzing the shell command it was invoked with ( arm-linux-gcc
- without specifying the explicit path in this example) and, if needed, the value of the PATH
environment variable. Thus, the compiler knows that it has been executed from the /work/denx_tools/usr/bin directory.
Then, it knows that the compiler is installed in the usr/bin subdirectory of the root installation directory, so the , the compiler is a part of, has been installed in the subdirectories of the /work/denx_tools directory. This means that the target include files are in /work/denx_tools//usr/include, and so on.
The target components of the can be mounted via NFS as the root file system for your target machine. For instance, for an AT91-based target, and assuming the has been installed into the /opt/eldk directory, you can use the following directory as the NFS-based root file system:
/opt/eldk/arm
Note: Before the NFS-mounted root file system can work, you must create necessary device nodes in the //dev directory. This process requires superuser privileges and thus cannot be done by the installation procedure (which typically runs as non-root). To facilitate creation of the device nodes, the provides a script named ELDK_MAKEDEV
, which is located in the root of the distribution ISO image. The script acccepts the following optional arguments:
-d |
Specifies the root directory of the being installed. If omitted, then the current directory is assumed. |
-a |
Specifies the target CPU family directory. If omitted, all installed target directories will be populated with the device nodes. |
-h |
Prints usage. |
NOTE: Compared to older versions of the , options and behaviour of this command have been changed significantly. Please read the documentation.
Note: Some of the target utilities included in the , such as mount
and su
, have the SUID bit set. This means that when run, they will have privileges of the file owner of these utilities. That is, normally, they will have the privileges of the user who installed the on the host system. However, for these utilities to work properly, they must have superuser privileges. This means that if the was not installed by the superuser, the file owner of the target utilities that have the SUID bit set must be changed to root
before a target component may be mounted as the root file system. The distribution image contains an ELDK_FIXOWNER
script, which you can use to change file owners of all the appropriate files of the installation to root. The script accepts the same arguments as the ELDK_MAKEDEV
script above. Please note that you must have superuser privileges to run this script. For instance, if you have installed the in the /opt/eldk directory, you can use the following commands:
# cd /opt/eldk
# /mnt/cdrom/ELDK_FIXOWNER
Please note, that in the case that the installation directory, where the new distribution is being installed, is already populated with other distributions, the execution of the ELDK_FIXOWNER
script without arguments will make the script work with all installed target directories. This could take some time. To save the time, please use the -a
argument to specify the appropriate target . For instance:
# cd /opt/eldk
# /mnt/cdrom/ELDK_FIXOWNER -a arm
Components
Source Distribution
The is distributed with the full sources of all the components, so you may rebuild any package. The sources are provided in the form of SRPM packages, distributed as a separate ISO image.
To rebuild a target or ELDT package, you must first install the appropriate source RPM package from the ISO image into the environment. This can be done using the following command:
$ ${CROSS_COMPILE}rpm -i /mnt/cdrom/SRPMS/.src.rpm
After an source RPM is installed using the above command, its spec file and sources can be found in the subdirectories of the /usr/src/denx subdirectory.
The sections that follow provide detailed instructions on rebuilding ELDT and target components of the .
All the target packages can be rebuilt from the provided source RPM packages. At first you have to install the Source RPM itself:
bash$ ${CROSS_COMPILE}rpm -iv .src.rpm
Then you can rebuild the binary target RPM using the following command from the environment:
bash$ ${CROSS_COMPILE}rpmbuild -ba .spec
In order for the rebuilding process to work correctly, the following conditions must be true:
- The environment variable must be set as appropriate for the target CPU family.
- The /usr/arm-linux/bin directory must be in
PATH
before the /usr/bin directory. This is to make sure that the command gcc
results in the fact that the cross compiler is invoked, rather than the host gcc
.
All the ELDT packages allow for rebuilding from the provided source RPM packages using the following command from the environment:
$ unset CROSS_COMPILE
$ /usr/bin/rpmbuild -ba
In order for the rebuilding process to work correctly, make sure all of the following is true:
- The environment variable must NOT be set.
- Do NOT use the command prefix.
- The /usr/arm-linux/bin directory must NOT be in
PATH
. This is to make sure that the command gcc
causes invokation of the host gcc
, rather than the cross compiler.
Packages
Package Name |
Package Version |
crosstool |
0.35-9 |
gdb |
6.3.0.0-1.21_3 |
genext2fs |
1.3-8 |
ldd |
0.1-1 |
make |
3.80-7_1 |
make-doc |
3.80-7_1 |
mkcramfs |
0.0.1-1 |
mkimage |
1.2.0-1 |
mtd_utils |
2-2 |
rpm |
4.4.1-21_5 |
rpm-build |
4.4.1-21_5 |
Note: The crosstool 0.35
ELDT package provides the following packages: gcc 4.0.0
, gcc-c++ 4.0.0
, cpp 4.0.0
and binutils 2.16.1
. For more information about the crosstool
package please refer to .
Package Name |
Package Version |
appWeb |
1.2.2-1_6 |
autoconf |
2.59-5_1 |
bash |
3.0-31_2 |
binutils |
2.16.1-2 |
boa |
0.94.14rc19-2 |
busybox |
1.3.0-1 |
byacc |
1.9-29_1 |
bzip2 |
1.0.2-16_1 |
bzip2-devel |
1.0.2-16_1 |
bzip2-libs |
1.0.2-16_1 |
coreutils |
5.2.1-48.1_1 |
cpio |
2.6-7_1 |
cpp |
4.0.0-4 |
cracklib |
2.8.2-1 |
cracklib-dicts |
2.8.2-1 |
crosstool |
0.35-9 |
db4 |
4.3.27-3_1 |
db4-devel |
4.3.27-3_1 |
db4-utils |
4.3.27-3_1 |
dhclient |
3.0.2-12_2 |
dhcp |
3.0.2-12_2 |
diffutils |
2.8.1-15_2 |
dosfstools |
2.10-3_1 |
dropbear |
0.43-1_2 |
e2fsprogs |
1.38-0.FC4.1_2 |
e2fsprogs-devel |
1.38-0.FC4.1_2 |
expat |
1.95.8-6_1 |
expat-devel |
1.95.8-6_1 |
file |
4.13-4_1 |
findutils |
4.2.20-1_1 |
flex |
2.5.4a-34_1 |
ftp |
0.17-26_1 |
gawk |
3.1.4-5_1 |
gcc |
4.0.0-4 |
gcc-c++ |
4.0.0-4 |
gdb |
6.3.0.0-1.21_4 |
glib |
1.2.10-16_1 |
glib2 |
2.6.6-1_1 |
glib2-devel |
2.6.6-1_1 |
glib-devel |
1.2.10-16_1 |
grep |
2.5.1-48.2_1 |
groff |
1.18.1.1-5_1 |
gzip |
1.3.5-6_1 |
httpd |
2.0.54-10.2_2 |
httpd-devel |
2.0.54-10.2_2 |
httpd-manual |
2.0.54-10.2_2 |
initscripts |
8.11.1-1_3 |
iproute |
2.6.11-1_1 |
iputils |
20020927-22_2 |
kernel-headers |
2.6.19-1 |
kernel-source |
2.6.19-1 |
krb5-devel |
1.4.1-5_2 |
krb5-libs |
1.4.1-5_2 |
less |
382-7_1 |
libcap |
1.10-22_1 |
libcap-devel |
1.10-22_1 |
libtermcap |
2.0.8-41_1 |
libtermcap-devel |
2.0.8-41_1 |
libtool |
1.5.16.multilib2-2_2 |
libtool-ltdl |
1.5.16.multilib2-2_2 |
libuser |
0.53.7-1_2 |
libuser-devel |
0.53.7-1_2 |
logrotate |
3.7.1-10_2 |
lrzsz |
0.12.20-21_1 |
m4 |
1.4.3-1_2 |
mailcap |
2.1.19-1_1 |
make |
3.80-7_1 |
man |
1.5p-4_1 |
microwindows |
0.90-7 |
microwindows-fonts |
0.90-1 |
mingetty |
1.07-5_1 |
mktemp |
1.5-23_1 |
module-init-tools |
3.1-4_1 |
modutils |
2.4.22-8_2 |
modutils-devel |
2.4.22-8_2 |
mtd_utils |
1-4 |
ncompress |
4.2.4-42_1 |
ncurses |
5.4-17_1 |
ncurses-devel |
5.4-17_1 |
net-snmp |
5.2.1.2-1_2 |
net-snmp-devel |
5.2.1.2-1_2 |
net-snmp-libs |
5.2.1.2-1_2 |
net-snmp-utils |
5.2.1.2-1_2 |
net-tools |
1.60-52_2 |
nfs-utils |
1.0.7-12_3 |
ntp |
4.2.0.a.2004061-8_1 |
openssl |
0.9.7f-7.10_1 |
openssl-devel |
0.9.7f-7.10_1 |
pam |
0.79-9.5_2 |
pam-devel |
0.79-9.5_2 |
passwd |
0.69-3_2 |
patch |
2.5.4-24_1 |
pciutils |
2.1.99.test8-10_1 |
pciutils-devel |
2.1.99.test8-10_1 |
pcmcia-cs |
3.2.8-1_1 |
popt |
1.7-3 |
portmap |
4.0-65_2 |
procps |
3.2.5-6.3_2 |
psmisc |
21.5-5_2 |
rdate |
1.4-4_1 |
readline |
5.0-3_1 |
readline-devel |
5.0-3_1 |
routed |
0.17-12_1 |
rpm |
4.4.1-22_4 |
rpm-build |
4.4.1-22_4 |
rpm-devel |
4.4.1-22_4 |
rpm-libs |
4.4.1-22_4 |
rsh |
0.17-29_1 |
rsh-server |
0.17-29_1 |
sed |
4.1.4-1_1 |
SELF |
1.0-11 |
setup |
2.5.44-1.1_1 |
slang |
1.4.9-17_2 |
slang-devel |
1.4.9-17_2 |
strace |
4.5.11-1_3 |
sysklogd |
1.4.1-30_2 |
SysVinit |
2.85-39_1 |
tar |
1.15.1-10_2 |
tcp_wrappers |
7.6-39_2 |
telnet |
0.17-35_1 |
telnet-server |
0.17-35_1 |
termcap |
5.4-7_1 |
tftp |
0.40-6_1 |
tftp-server |
0.40-6_1 |
u-boot |
1.2.0-1 |
util-linux |
2.12p-9.12_3 |
vim-common |
6.3.086-0_1 |
vim-minimal |
6.3.086-0_1 |
wireless-tools |
28-1_1 |
wu-ftpd |
2.6.1-3 |
xinetd |
2.3.13-6_2 |
zlib |
1.2.2.2-3_1 |
zlib-devel |
1.2.2.2-3_1 |
Note 1: Not all packages will be installed automatically; for example the boa
and thttpd
web servers are mutually exclusive - you will have to remove one package before you can (manually) install the other one.
Note 2: The crosstool 0.35
target package provides the following packages: glibc 2.3.5
, glibc-common 2.3.5
, glibc-devel 2.3.5
, libstdc++ 4.0.0
and libstdc++-devel 4.0.0
. For more information about the crosstool
package please refer to
from Scratch
In this section, you will find instructions on how to build the from scratch, using the pristine package sources available on the Internet, and patches, spec files, and build scripts provided on the source CD-ROM.
Build Process Overview
The uses Fedora Core 4 Linux distribution as a source code reference. Any modifications to Fedora Core's sources the has introduced are in the form of patches applied by the RPM tool while building the packages. Also, the uses modified spec files for its RPM packages. So, the sources of almost every package consist of the following parts:
- Fedora Core pristine sources or
- source tarball,
- patches,
- spec file.
The Fedora Core pristine sources may be obtained from the Internet, see .
The patches and spec files are available on the source CD-ROM and from the DENX anonymous CVS server. To access this CVS server please use the following command to log on:
cvs -d :pserver:anonymous@:/cvsroot login
When prompted for the "CVS password:" just press the return key (empty password).
Please use the following commands to check out a copy of one of the modules:
cvs -z6 -d :pserver:anonymous@:/cvsroot co -rversion -P module
The following modules are available:
Module Name |
Contents |
eldk_tarballs |
Source tarballs |
eldk_build |
Build tools, patches, and spec files |
Using the "-rversion" option makes sure you download exactly the files that belong to a specific release of the ; for example, to get the files for release 4.0, please specify "-rELDK_4_0"
.
It must be noted that some of the packages which are included in the are not included in Fedora Core. Examples of such packages are appWeb
, microwindows
, and wu-ftpd
. For these packages tarballs are provided on the DENX anonymous CVS server.
To facilitate building of the , a build infrastructure has been developed. The infrastructure is composed of the following components:
ELDK_BUILD
script
build.sh
script
cpkgs.lst
file
tpkgs.lst
file
SRPMS.lst
file
tarballs.lst
file
The ELDK_BUILD
script is the main script of the build procedure. It is the tool that you would normally use to build the from scratch. In the simplest case, the script may be invoked without arguments, and it will perform all necessary steps to build the in a fully automated way. You may pass the following optional arguments to the ELDK_BUILD
script:
-d |
target architecture: "ppc", "arm" or "mips", defaults to "ppc". |
-n |
an identification string for the build. Defaults to the value based on the build architecture and current date, and has the following format: -YYYY-MM-DD |
-u |
build the uClibc-based version. |
Warning: The build scripts rely on standard behaviour of the RPM tool. Make sure you don't use non-standard settings in your personal ~/.rpmmacros
file that might cause conflicts.
build.sh
is a supplementary script that is called by ELDK_BUILD
to accomplish certain steps of the build. Refer to section below for more details.
The cpkgs.lst and tpkgs.lst files are read by build.sh
and must contain lines describing sub-steps of the eldt and trg build procedure steps. Essentially, the files contain the list of the ELDT and target packages to be included in the . The SRPMS.lst file contains the list of the Fedora Core source RPM packages used during the build. The tarballs.lst file contains the list of source tarballs of the packages that are included in the but are not present in Fedora Core 4.
For the ELDK_BUILD
script to work correctly, it must be invoked from a certain build environment created on the host system. The build environment can be either checked out from the DENX CVS (see section Build Environment below for details) or copied from the build environment CD-ROM.
To be more specific, the following diagram outlines the build environment needed for correct operation of the ELDK_BUILD
script:
/
build/cross_rpms//SPECS/...
SOURCES/...
target_rpms//SPECS/...
SOURCES/...
install/install.c
Makefile
misc/ELDK_MAKEDEV
ELDK_FIXOWNER
README.html
cpkgs.lst
tpkgs.lst
build.sh
ELDK_BUILD
SRPMS.lst
tarballs.lst
tarballs/....
SRPMS/....
In subdirectories of the cross_rpms and target_rpms directories, the sources and RPM spec files of, respectively, the ELDT and target packages are stored. The install subdirectory contains the sources of the installation utility which will be built and placed in the root of the ISO image. tarballs directory contains the source tarballs of the packages that are included in the but are not present in Fedora Core 4.
The SRPMS directory may contain the source RPM packages of Fedora Core 4. If some (or all) of the Fedora Core SRPMs needed for the build are missing in the directory, the ELDK_BUILD
script will download the source RPMs automatically from the Internet.
The build environment CD-ROM provides a ready-to-use build environment. Please refer to section Build Environment below for detailed instructions on setting up the build environment.
The ELDK_BUILD
script examines the contents of the ELDK_PREFIX
environment variable to determine the root directory of the build environment. If the variable is not set when the script is invoked, it is assumed that the root directory of the build environment is /opt/eldk. To build the in the example directory layout given above, you must set and export the ELDK_PREFIX
variable prior to invoking ELDK_BUILD
.
After all the build steps are complete, the following subdirectories are created in the build environment:
build//work/ - full ELDK environment
build//logs/ - build procedure log files
build//results/b_cdrom/ - binary cdrom tree, ready for mkisofs
results/s_cdrom/ - source cdrom tree, ready for mkisofs
On Linux hosts, the binary and source ISO images are created automatically by the ELDK_BUILD
script and placed in the results directory. On Solaris hosts, creating the ISO images is a manual step. Use the contents of the b_cdrom and s_cdrom directories for the contents of the ISO images.
Build Environment
For your convenience, the build environment CD-ROM provides full build environment. All you need to do is copy the contents of the CD-ROM to an empty directory on your host system. Assuming the build environment CD-ROM is mounted at /mnt/cdrom, and the empty directory where you want to create the build environment is named /opt/eldk, use the following commands to create the build environment:
bash$ cd /opt/eldk
bash$ cp -r /mnt/cdrom/* .
These commands will create the directory structure as described in section Build Process Overview above. All necessary scripts and specific source files will be placed in the build subdirectory, and the required tarballs can be found in the tarballs subdirectory. In the SRPMS subdirectory, you will find all the Fedora Core 4 SRPMS needed to build the .
Alternatively, you can obtain the build environment from the DENX anonymous CVS server. Two modules are provided for check out: eldk_build and eldk_tarballs. The first one contains the files for the build subdirectory in the build environment, and the second one contains source tarballs of the packages that are included in the but are not present in Fedora Core 4. To create the build environment from the DENX CVS server, use the following commands (the example below assumes that the root directory of the build environment is /opt/eldk):
bash$ cd /opt/eldk
bash$ cvs -d :pserver:anonymous@:/cvsroot login
bash$ cvs -z6 -d :pserver:anonymous@:/cvsroot co -P eldk_build
bash$ cvs -z6 -d :pserver:anonymous@:/cvsroot co -P eldk_tarballs
After the eldk_build and eldk_tarballs modules have been checked out, the only remaining piece that is needed for the build is the Fedora Core 4 source RPM packages, which will, if required, be automatically downloaded by the ELDK_BUILD
script.
If you wish to perform only a part of the build procedure, for instance to re-build or update a certain package, it may sometimes be convenient to invoke the build.sh
script manually, without the aid of the ELDK_BUILD
script. Please note, however, that this approach is in general discouraged.
The whole build procedure is logically divided into six steps, and the build.sh
must be told which of the build steps to perform. The build steps are defined as follows:
- rpm - build RPM
- eldt - build ELDT packages
- seldt - save ELDT SRPM packages to create a source ISO image later on
- trg - build target packages
- biso - prepare the file tree to create the binary ISO image
- siso - prepare the file tree to create the source ISO image
Further, the eldt and trg build steps are devided into sub-steps, as defined in the cpkgs.lst and tpkgs.lst
files (see below for details). You may specify which sub-steps of the build step are to be performed.
The formal syntax for the usage of build.sh
is as follows:
bash$ ./build.sh [-a ] [-n ] [-p ] [-r ] \
[-w ] []
-a |
target architecture: "ppc", "arm" or "mips", defaults to "ppc". |
-n |
an identification string for the build. It is used as a name for some directories created during the build. You may use for example the current date as the build name. |
-p |
is the name of the directory that contains the build environment. Refer to above for description of the build environment. |
-r |
is the name of the directory where the resulting RPMs and SRPMs created on this step will be placed. |
-w |
is the name of the directory where the build is performed. |
|
is the name of the build step that is to be performed. Refer to the list of the build procedure steps above. |
|
is an optional parameter which identifies sub-steps of the step which are to be performed. This is useful when you want to re-build only some specific packages. The numbers are defined in the cpkgs.lst and tpkgs.lst files discussed below. You can specify a range of numbers here. For instance, "2 5" means do steps from 2 to 5, while simply "2" means do all steps starting at 2. |
By default, the invocation of build.sh
assumes that the Glibc-based version is being built. For the uClibc-based build, set the UCLIBC
environment variable to 1
prior to running build.sh
:
bash$ export UCLIBC=1
Note: Please note that you must never use build.sh
to build the from scratch. For build.sh
to work correctly, the script must be invoked from the build environment after a successful build using the ELDK_BUILD
script. A possible scenario of build.sh
usage is such that you have a build environment with results of a build performed using the ELDK_BUILD
script and want to re-build certain ELDT and target packages, for instance, because you have updated sources of a package or added a new package to the build.
When building the target packages (during the trg buildstep), build.sh
examines the contents of the TARGET_CPU_FAMILY_LIST
environment variable, which may contain a list indicating which target CPU variants the packages must be built for. Possible CPU variants are arm. For example, the command below rebuilds the target RPM listed in the tpckgs.lst file under the number of 47 (see section for description of the tpckgs.lst and cpkgs.lst files), for the arm CPU:
bash$ TARGET_CPU_FAMILY_LIST="arm" \
> /opt/eldk/build.sh -a arm \
> -n 2005-03-06 \
> -p /opt/eldk/build/arm-2005-12-24 \
> -r /opt/eldk/build/arm-2005-12-24/results \
> -w /opt/eldk/build/arm-2005-12-24/work \
> trg 47 47
Note: If you are going to invoke build.sh
to re-build a package that has already been built in the build environment by the ELDK_BUILD
script, then you must first manually uninstall the package from installation created by the build procedure under the work directory of the build environment.
Note: It is recommended that you use the build.sh
script only at the final stage of adding/updating a package to the . For debugging purposes, it is much more convenient and efficient to build both ELDT and target packages using a working installation, as described in the sections and above.
Each line of these files has the following format:
\
The source CD-ROM contains the cpkgs.lst and tpkgs.lst files used to build this version of the distribution. Use them as reference if you want to include any additional packages into the , or remove unneeded packages.
To add a package to the you must add a line to either the cpkgs.lst file, if you are adding a ELDT package, or to the tpkgs.lst file, if it is a target package. Keep in mind that the relative positions of packages in the cpkgs.lst and tpkgs.lst files (the sub-step numbers) are very important. The build procedure builds the packages sequentially as defined in the *.lst files and installs the packages in the "work" environment as they are built. This implies that if a package depends on other packages, those packages must be specified earlier (with smaller sub-step numbers) in the *.lst files.
Note: For cpkgs.lst, the package_version may be replaced by the special keyword "RHAUX". Such packages are used as auxiliary when building 4.0 on non-Fedora hosts. These packages will be built and used during the build process, but will not be put into the 4.0 distribution ISO images.