3.嵌入式Linux开发套件
Linux开发套件(ELDK)包括GNU交叉编译 工具,例如 compilers, binutils, gdb 等等,还包括一些为了使目标系统正常工作而预安装的目标工具和必要的库。
创建Linux开发套件所用的程序是免费的,并且可以得到源码(包括 所有的补丁,扩展代码,程序源代码 和脚本文件)。
Some versions of ELDK (4.1) are available in two versions, which use Glibc resp. uClibc as the main C
library for the target packages(这一句我也不知道怎么翻译,请各位大神不吝赐教)。
开发套件的打包和安装都是基于RPM包管理系统的。
3.1从哪里可以得到ELDK
The ELDK is available
1.on DVD-ROM from DENX Computer Systems(office@denx.de )
2.可以从下面的服务器下载:
FTP HTTP
ftp://ftp.denx.de/pub/eldk/ http://www.denx.de/ftp/pub/eldk/
3提供下载的镜像网址:
FTP HTTP
ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/eldk/ http://ftp-stud.hs-esslingen.de/pub/Mirrors/eldk/
ftp://mirror.switch.ch/mirror/eldk/ http://mirror.switch.ch/ftp/mirror/eldk/
not available http://mira.sunsite.utk.edu/eldk/
ftp://ftp.sunet.se/pub/Linux/distributions/eldk/ http://ftp.sunet.se/pub/Linux/distributions/eldk/
3.2从哪里可以得到关于ELDK的帮助
可以从ELDK的邮件列表得到社区对ELDK的支持信息.http://lists.denx.de/mailman/listinfo/eldk
这个邮件列表的早期内容可以从这个连接得到.http://lists.denx.de/pipermail/eldk/
对于ELDK的商业支持,请联系DENX软件工程师GmbH(office@denx.de )
3.3 ELDK能支持的系统
ELDK能够安装并运行在下面的操作系统上:
· Fedora Core 4, 5, 6 Fedora 7, 8, 9, 10, 11, 12
· Red Hat Linux 7.3, 8.0, 9
· SuSE Linux 8.x, 9.0, 9.1, 9.2, 9.3, 10.0
· OpenSUSE 10.2, 10.3 (32 Bit); OpenSUSE 11.0 (32 and 64 Bit)
· Debian 3.0 (Woody), 3.1 (Sarge) and 4.0 (Etch)
· Ubuntu 4.10, 5.04, 6.10, 8.04, 9.04, 9.10, 10.04
· FreeBSD 5.0
ELDK的使用者证实ELDK能够在下面这些操作系统上成功安装:
· Suse Linux 7.2, 7.3
· Mandrake 8.2
· Slackware 8.1beta2
· Gentoo Linux 2006.1
注:对于在操作系统上运行的软件,推荐安装这些软件的最新版本.例如,对于Fedora系统, 可以使用yum或者dnf来保证你所使用系统上的软件都是最新的.
3.4ELDK所支持的目标架构
The ELDK includes target components and supports code generation for the following Power Architecture®
types of processors:
· ppc_4xx = AMCC 4xx processors without FPU
· ppc_4xxFP = AMCC 4xx processors with FPU (440EP, 440EPx)
ppc_6xx = PowerPC processors based on 60x cores with FPU
(This includes support for MPC5xxx, 7xx, 82xx, 83xx and P40xx processors).
ppc_74xx = 74xx processors
(This includes support for MPC86xx processors).
·
· ppc_8xx = MPC8xx processors without FPU
· ppc_85xx = MPC85xx processors (without FPU, but with a SPE)
ppc_85xxDP = MPC8544 and similar processors using a e500v2 core (without FPU, but with a V.2
SPE); this includes the P10xx and P20xx QorIQ processors, too.
·
· ppc64 = 64 bit Power Architecture processors with FPU (for example, PA6T)
还有支持ARM和MIPS系统的ELDK版本.
3.5 安装
3.5.1安装包
稳定版的ELDK以IOS镜像的方式发布,这种形式的安装包可以烧写到DVD盘,或者直接作为回环设备驱动的形式挂载在linux主机上。(mount -o loop xx.ios /mnt/xxx)
对于Power架构的目标机,ELDK的发布版本有三种独立的ISO镜像。第一种用于4xx系列处理器上(AMCC),第二种种用于ppc64系列处理器上,第三种用于Freescale的8xx,6xx,74xx和85xx系列处理器上。这使得IOS镜像适合烧写到标准的DVDROM媒介上。
如果你的DVDROM足够大,还有一种适用于所有32位的AMCC和Freescale处理器的镜像。
开发版的ELDK是以目录树的形式存在,因此,更新单独的安装包是很容易的。如何下载这些目录树,如何制作IOS镜像将会在3.5.2小节讲述。
ELDK安装包含安装说明和RPM包。通过这些安装说明,这些RPM包可以安装在用于交叉编译环境的主机的硬盘上。逻辑上,这些RPM包可以分为两部分。
1.嵌入式linux开发工具(ELDT)。
2.目标组成部分(Target components)。
上述第一部分包含需要在主机上执行的交叉编译工具。值得注意的是,他们是GNU交叉编译器,binutils,和gdb。ELDT提供的完整的安装包,请参考3.9.1小节。
上述第二部分包括预先创建的工具、库。这些库能运行与目标机上。ELDK需要包含目标机成分(target component)来为目标机提供一个最小的可以使用的基于NFS的环境。对于ELDK提供的完整的目标机安装包(target packages),请参考3.9.2小节。
ELDK包含几个独立的目标安装包集。每一个安装包集支持一种目标CPU架构。这些安装包集都是按照各个CPU系列进行优化,并使用编译器代码生成器生成的。
3.5.2下载ELDK
你可以下载用于烧写的ISO镜像文件(参考3.1小节下载镜像列表),你也可以通过ELDK的开发目录树来单独下载各个文件,你可以使用这些文件直接安装ELDK或者利用这些文件来创建ISO镜像。
进入一个有足够大空间的路径。对于Power架构版本的ELDK,大概需要1.6GB,如果要在这个路径下创建一个ISO镜像,大概需要3.2GB。
使用标准工具wget 或者ncftpget从镜像站点的ppc-linux-x86/iso目录下下载ISO镜像。例如:
bash$ wget ftp://ftp.sunet.se/pub/Linux/distributions/eldk/4.2/ppc-linux-x86/iso/ppc-2008-04-01.iso
如果你想下载真个ELDK目录树,你可以使用ncftp TFP客户端, 例如:
bash$ ncftp ftp.sunet.se
...
ncftp / > cd /pub/Linux/distributions/eldk/4.2
ncftp /pub/Linux/distributions/eldk/4.2 > bin
ncftp /pub/Linux/distributions/eldk/4.2 > get -R ppc-linux-x86/distribution
...
ncftp /pub/Linux/distributions/eldk/4.2 > bye
如果你的系统上没有ncftp工具,你可以从下面的网址下载NcFTP客户端。
http://www.ncftp.com/download/
在ELDK目录树中有几个可执行文件(二进制文件和脚本文件)。确保他们在你的机器上由执行权限。
bash$ for file in \
> tools/bin/rpm \
> tools/usr/lib/rpm/rpmd \
> install \
> ELDK_MAKEDEV \
> ELDK_FIXOWNER
> do
> chmod +x ppc-linux-x86/distribution/$file
> done
在目录树中创建ISO镜像:
bash$ mkisofs \
> -A "ELDK-4.2 -- Target: PowerPC -- Host: x86 Linux" \
> -publisher "(C) `date "+%Y"` DENX Software Engineering, www.denx.de" \
> -p "`id -nu`@`hostname` -- `date`" \
> -V ppc-linux-x86 \
> -l -J -R -o eldk-ppc-linux-x86.iso ppc-linux-x86/distribution
上述命令将会在你的机器上创建一个名为eldk-ppc-linux-x86.iso的ISO镜像,这个镜像可以烧写在DVD上或者像回环设备驱动一样被挂载并安装。当然也可以直接使用下载的目录树直接安装。
请参考3.10.2小节为重新创建ELDK搭建环境。
3.5.3初始化安装
使用ELDK镜像目录树下的install实体(utility)进行初始化安装。install安装实体有这样的语法:
$ ./install [-d <dir>] [<cpu_family1>] [<cpu_family2>] ...
-d <dir> 指定ELDK安装的跟目录。如果省略的话,ELDK就会被安装在当前目录下。
<cpu_family> 指定目标CPU系列。如果存在一个或者多个<cpu_family>参数,只有各个CPU系列的目标组成成分被安装到主机上。如果省略的话,所有被支持的CPU系列的目标组成成分都会被安装。
注:确保当安装ELDK ISO镜像的时候,mount的“exec”(可执行)选项被使用。否则,install程序不能被执行。对于有些发行版,可能需要更改/etc/fstab文件以增加挂载点的mount的“exec”(可执行)选项。对于其他已经存在的挂载点可能也需要这么做。例如 “user”目录不会让ELDK的镜像以“exec”的权限挂载在目录下。这种情况下,可以参考发行版本的文件,或者使用命令sudo mount -o exec /dev/cdrom /mnt/cdrom 来挂载镜像。如果你的系统不能使用sudo命令进行安装,你需要以root用户执行命令
mount -o exec /dev/cdrom /mnt/cdrom进行安装。
ELDK可以被安装在任何你希望的空目录,但是你必须对此目录有写和执行的权限。安装过程不需要超级用户权限。
对于install安装实体(utility)的不同参数,一个或者多个目标组成部分将会安装在主机上,但是ELDT包在任何情况下都会被安装。
注:如果你打算把上述的安装作为NFS的根文件系统,你必须参考3.7小节完成ELDK的配置。
目前还不支持安装基于Glibc和uClibc版本的ELDK到一个目录。
目前还不支持安装32 位和64位版本的ELDK到一个目录。
3.5.4 安装、卸载单个安装包
ELDK还有基于RPM的结构,意思是说在ELDK生成的ISO镜像文件中,ELDK的文件都是RPM包,在安装完ELDK的RPM包之后,ELDK维护一个包含所有已经安装的包的信息的数据库。每一个RELDK都有一个RPM包的数据库,你可以安装多个相互独立的ELDK。(这意味着,你可以在不同的目录下安装不同的ELDK并且不同的ELDK相互独立)。并且安装和管理单独的ELDK包都是很容易的。
可以用下面的命令列出已经安装的ELDK的RPM包。
bash$ ${CROSS_COMPILE}rpm -qa
可以用下面的命令删除一个ELDK的安装包
bash$ ${CROSS_COMPILE}rpm -e <package_name>
可以用下面的命令安装安装包
bash$ ${CROSS_COMPILE}rpm -i <package_file_name>
可以用下面的命令更新安装包
bash$ ${CROSS_COMPILE}rpm -U <package_file_name>
为了能让上述命令执行成功,你必须确定使用正确的rpm二进制包。如果在RedHat系统上安装多个ELDK,系统上应该安装有一些rpm工具。
当使用rpm工具安装、卸载已经安装的ELDK的安装包时,必须确保使用了确定的路径或者正确的设置了PATH,使用rpm时,实际上是用的ELDK的rpm工具。rpm工具在ELDK安装目录下的bin子目录下。
为了避免和RedHat系统的rpm工具混淆,ELDK使用了特殊名字的符号链接,这个符号链接链接到了ELDK的rpm二进制工具,这个名字表达式是${CROSS_COMPILE}rpm。$CROSS_COMPILE代表ELDK所有支持的交叉编译器。
操作系统标准的rpm工具可以在各个用户的~/.rpmrc 和 ~/.rpmmacros 文件中设置各种宏和配置参数。ELDK的rpm工具也可以这么做,只是在各个用户的.~/.eldk_rpmrc and ~/.eldk_rpmmacros文件中设置。
3.5.5 删除所有安装包
在ELDK的安装目录下,执行以下的命令可以删除所有ELDK的安装包。
bash$ rm -rf <dir>
<dir>代表需要被删除的ELDK的安装目录。
3.6使用ELDK
初始化安装完成后,在正式使用ELDK之前,需要设置环境变量CROSS_COMPILE,你可能希望在PATH环境变量中增加已经安装的ELDK的bin和usr/bin目录。一个安装和使用ELDK的场景如下:
为安装ELDK创建一个新目录,如下:
bash$ mkdir /opt/eldk
挂在一个有ELDK的CD或者ELDK的ISO镜像:
bash$ mount /dev/cdrom /mnt/cdrom
使用ELDK的安装实例(install utility)将ELDK安装在一个目录中:
bash$ /mnt/cdrom/install -d /opt/eldk
安装完后,导出变量CROSS_COMPILE:
bash$ export CROSS_COMPILE=ppc_4xxFP-
CROSS_COMPILE变量的‘-’字符是可选的,它对于交叉编译工具没有影响。然而在创建Linux 内核和U-boot镜像时,这个字符是必须的。
在PATH中增加目录/opt/eldk/usr/bin 和/opt/eldk/bin.
bash$ PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin
编译一个文件:
bash$ ${CROSS_COMPILE}gcc -o hello_world hello_world.c
也可以使用通用的前缀ppc-linux-来使用教材编译器,例如:
bash$ ppc-linux-gcc -o hello_world hello_world.c
或者:
bash$ /opt/eldk/usr/ppc-linux/bin/gcc -o hello_world hello_world.c
CROSS_COMPIL变量的值必须与目标CPU系列一致。参考下表查看ELDK支持的CROSS_COMPILE变量的值:
表3.6$CROSS_COMPILEDE的值
CROSS_COMPILE Value Predefined Compiler Flag FPU present or not
ppc_4xx- -mcpu=403 No
ppc_4xxFP- -mcpu=405fp Yes
ppc_6xx- -mcpu=603 Yes
ppc_74xx- -mcpu=7400 Yes
ppc_8xx- -mcpu=860 No
ppc_85xx- -mcpu=8540 Yes
ppc_85xxDP- -mcpu=8540 Yes
ppc64-linux- -mcpu=powerpc64 Yes
为了兼容老版本的ELDK和其他工具,$CROSS_COMPILE的值可以是ppc_7xx- 和 ppc_82xx-。他们等同于ppc_6xx.
3.6.1在多个安装版本之间切换
在一台主机上,在ELDK不同安装版本之间切换时,不需要使用特殊的操作。使用哪一个ELDK的安装版本完全由ELDK的可执行文件的安装位置决定。下面的例子能够看到这种切换方式的效果。
假如ppc-linux-gcc编译器的可执行文件安装在/work/denx _tools/usr/bin目录下,并且这个目录放在环境变量PATH中,执行下面的命令:
$ppc-8xx-gcc -c myfiile.c
为了能够正确包含头文件,使用相应的库和特殊文件等等,编译器需要知道安装的ELDK的根目录。编译器通过分析使用它的shell命令来确定这些信息(在上面的例子中并没有明确指定pcc-8xx-gcc 编译器的路径),并且,如果有必要的话编译器还要分析PATH环境变量的值。此后,编译器才知道它的执行路径是/work/denx _tools/usr/bin目录。
接着,shell能够确定使用的编译器安装在ELDK安装的根目录下的/usr/bin子目录下,进而确定此版本的ELDK安装/work/denx _tools目录下。这意味着,目标文件中需要的头文件位于/work/denx _tools/ <target_cpu_variant>/usr/include目录下,目标文件所需要的其他信息也能够这样找到。