搭建RTEMS的交叉工具链-针对arm,powerpc,i386

最近在调研实时操作系统的SMP扩展时,偶尔瞅了瞅RTEMS实时操作系统,深深的被它的性能和与众不同的结构所吸引,于是下决心把RTEMS的内核研读一下。在读它的内核代码之前,按照我的习惯首先搭建RTEMS的交叉编译器O(∩_∩)O~。

备注:

关于RTMES系统参考:

http://www.rtems.org/

http://www.rtems.net/index.htm

 

我在fedora14中成功搭建了基于powerpc、arm以及i386平台的交叉编译器,为方便描述我以powerpc平台对象。

第一部分 实验环境配置

主机环境:Linux-2.6.35.6-45.fc14.i686

目标平台:powerpc

1.1 搭建编译器所需要的软件包

Gcc软件包:gcc-4.3.2.tar.bz2

下载网址:

http://ftp.gnu.org/gnu/gcc/gcc-4.3.2

ftp://ftp.rtems.com/pub/rtems/SOURCES

gcc软件包补丁:gcc-4.3.2-20080910.diff

下载网址:ftp://ftp.rtems.com/pub/rtems/SOURCES/4.10/

Binutils软件包:binutils-2.20.tar.bz2

下载网址:

http://ftp.gnu.org/gnu/binutils/

ftp://ftp.rtems.com/pub/rtems/SOURCES/4.10/

Newlib软件包:newlib-1.17.0.tar.gz

Newlib软件包补丁:newlib-1.17.0-rtems4.10-20091009.diff

下载网址:

ftp://ftp.rtems.com/pub/rtems/SOURCES/4.10/

1.2 RTEMS软件包

rtems源码:rtems-4.10.2.tar.bz2

下载目录:ftp://ftp.rtems.com/pub/rtems/4.10.2/

1.3 开发平台目录树

在我的主机上建立的目录树:

/whatever/prefix/you/choose/

archive/               //存放源码包目录

         gcc-4.3.2.tar.bz2

         gcc-4.3.2-20080910.diff

         binutils-2.20.tar.bz2

         newlib-1.17.0.tar.gz

         newlib-1.17.0-rtems4.10-20091009.diff

         rtems-4.10.2.tar.bz2

build/                //存放解压包和编译包目录

tools/                //存放编译的交叉包目录

1.3 创建环境变量

在build目录下创建一个set-rtems.sh的脚本文件,内容如下:

#! /bin/sh

export PRJECT=rtems

export PRJROOT=/home/tom/${PRJECT}

export TARGET=powerpc-rtems4.10

export PREFIX=${PRJROOT}/tools/rtems-4.10

export TARGET_PREFIX=${PREFIX}/${TARGET}

export PATH=${PREFIX}/bin:${PATH}

pwd

cd $PRJROOT

执行命令:

$cd build

$sudo chmod +x  ./set-rtems.sh

备注:给set-rtems.sh加上可执行权限需要用到root权限。

$source  ./set-rtems.sh

备注:该命令使得set-rtems.sh中的环境变量在当前shell中可见,也可以使用

$. ./set-rtems.sh  

注意:两个点之间至少要有一个空格

 

备注三:如果编译基于arm平台的编译器,需要将:

export TARGET=powerpc-rtems4.10

更改为:

export TARGET=arm-rtems4.10

同时把newlib更新至:newlib-1.18.0.tar.gz

同时应用补丁:newlib-1.18.0-rtems4.11-20101126.diff

补丁下载网址:

ftp://ftp.rtems.com/pub/rtems/SOURCES/4.10/

需要注意在下载网址中的补丁是逐个累积的,我们只需要应用最新的补丁即可。

第二部建立步骤:

第一步:安装binutils工具包

$cd build

$tar xvf ../archive/binutils-2.20.tar.bz2

$mkdir b-binutils

$cd b-binutils

$../ binutils-2.20/configure --target=$TARGET --prefix=$PREFIX

$make

$make install

第二步:解压gcc-4.3.2.tar.bz2,并应用补丁

$cd build

$tar xvf tar xvf ../archive/gcc-4.3.2.tar.bz2

$cd gcc-4.3.2

$patch -p1 <../../archive/gcc-4.3.2-20080910.diff  //应用补丁

$find . -name "*.rej" -print                       //如果没有扩展名为.rej的文件,说明补丁应用成功

第三步:解压newlib-1.17.0.tar.gz,并应用补丁

$cd build

$tar xvf tar xvf ../archive/newlib-1.17.0.tar.gz

$cd newlib-1.17.0

$patch -p1 <../../archive/newlib-1.17.0-rtems4.10-20091009.diff  //应用补丁

$find . -name "*.rej" -print       //如果没有扩展名为.rej的文件,说明补丁应用成功

第四步:为了避免通常的两步编译gcc(即第一步:编译bootstrap gcc,第二步编译:full gcc)我们把newlib库作为gcc的一个子目录进行编译,即使用符号链接将newlib库作为一个子目录链接到gcc目录中。

$cd gcc- 4.3.2

$ln -s ../newlib-1.16.0/newlib .

第五步:完全编译gcc

$mkdir b-gcc

$cd b-gcc

$../gcc-4.3.2/configure --target=$TARGET \

 --with-gnu-as --with-gnu-ld --with-newlib --verbose \

 --enable-threads --enable-languages="c,c++" \

 --prefix=$PREFIX

$make all

$make info

$make install

经过上面的五步之后,基于PowerPC的交叉编译器就搭建起来了,我们可以用 $powerpc-rtems4.10-gcc –v 查看我们编译的编译器版本,示意图如下:

 搭建RTEMS的交叉工具链-针对arm,powerpc,i386
第三部分 编译rtems系统

$cd tools

$tar xjf ../archive/rtems-4.10.2.tar.bz2

$mkdir build-rtems

$cd build-rtems

$../rtems-4.10.2/configure --target=$TARGET \

 --disable-posix --disable-networking --disable-cxx \

 --enable-rtemsbsp=mpc8349eamds\

 --prefix=/home/tom/install_dir

$make all

$make install

这样编译的rtems系统就被安装到install_dir目录,示意图如下:

 搭建RTEMS的交叉工具链-针对arm,powerpc,i386

备注:

如果用上述的软件包直接编译基于arm的编译器,怎会出现:

checking sched.h usability... no

checking sched.h presence... no

checking for sched.h... no

configure: error: Required header sched.h not found

configure: error: /bin/sh '../../../../../rtems-4.10.2/c/src/../../cpukit/configure' failed for ../../cpukit

gmake[2]: *** [smdk2410] Error 1

 

解决办法:把newlib更新至:newlib-1.18.0.tar.gz

同时应用补丁:newlib-1.18.0-rtems4.11-20101126.diff

下载目录:

ftp://ftp.rtems.com/pub/rtems/SOURCES/4.10/

需要注意:下载目录中的补丁是逐个累积的,我们只需要应用最新的补丁即可

另外使用newlib-1.18.0.tar.gz其它软件包不变,可以直接编译i386平台的编译器,该平台newlib-1.18.0.tar.gz不需要打补丁。

 

附注:

为了把我们制作的上述编译器打包,这里说明一下经常用到的tar打包命令,tar在linux上是常用的打包、压缩、加压缩工具,参数很多,这儿仅仅列举常用的压缩与解压缩参数

参数:

-c :create 建立压缩档案的参数;

-x : 解压缩压缩档案的参数;

-z : 是否需要用gzip压缩;

-v: 压缩的过程中显示档案;

-f: 置顶文档名,在f后面立即接文件名,不能再加参数

举例:

1.将整个/home/tom/images 目录下的文件全部打包为/home/tom/images.tar

$tar -cvf /home/tom/images.tar /home/tom/images       //仅打包,不压缩

$tar -zcvf /home/tom/images.tar.gz /home/tom/images   //打包后,以gzip压缩

在参数f后面的压缩文件名是自己取的,习惯上用tar来做,如果加z参数,则以tar.gz 或tgz来代表gzip压缩过的tar file文件

2.将 /home/tom/images.tar.gz 解压到/home/tom下面

$ cd /home/tom

$ tar -zxvf /home/images.tar.gz

解压到指定的目录

$ tar -zxvf /home/images.tar.gz -C /specific dir

解包到指定的目录

tar xvf filename.tar -C /specific dir

参考资料:

http://www.rtems.com/onlinedocs/releases/rtemsdocs-4.6.5/share/rtems/pdf/started.pdf

http://www.aps.anl.gov/epics/base/RTEMS/tutorial/

http://www.rtems.com/ml/rtems-users/2012/august/msg00040.html

http://www.rtems.com/wiki/index.php/Building_Tools

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RTEMS(Real-Time Executive for Multiprocessor Systems)是一个开源的实时操作系统,专门为嵌入式系统设计。RTEMS操作系统文档是关于RTEMS操作系统的详细说明和使用指南的文档集合。 RTEMS操作系统文档提供了关于系统架构、功能特性、安装配置、编程API和应用开发等方面的详细介绍。这些文档包括用户手册、开发者指南、API参考手册等等。 用户手册是针对系统用户的文档,它介绍了RTEMS操作系统的基本概念、安装过程和基本操作等内容。用户手册还提供了一些常见问题的解答和实用技巧,以帮助用户更好地使用RTEMS操作系统。 开发者指南是面向RTEMS操作系统开发者的文档,它提供了关于RTEMS软件开发包的详细说明和使用指南。开发者指南介绍了RTEMS的开发环境搭建、应用程序开发、调试和性能优化等方面的内容。它还包含了一些实例代码和开发案例,以帮助开发者更好地理解和运用RTEMS操作系统。 API参考手册是RTEMS操作系统编程API的详细说明文档,它列举了RTEMS操作系统提供的各种API函数和数据结构,以及它们的使用方法和参数说明。API参考手册是开发者在使用RTEMS进行具体编程时不可或缺的参考资料。 总的来说,RTEMS操作系统文档是帮助用户和开发者了解和使用RTEMS操作系统的重要资料。通过阅读这些文档,用户和开发者能够更好地掌握和运用RTEMS操作系统的强大功能,从而开发出高品质的嵌入式系统应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值