pc386平台RTEMS开发环境的建立

prtos, info 嵌入式实时系统 RTEMS评论字数 6071阅读20分14秒阅读模式

第1章 搭建编译器

主机环境:Linux debian 2.6.38

目标平台:pc386

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-1.18.0.tar.gz

 

Newlib软件包补丁:

newlib-1.17.0-rtems4.10-20091009.diff

newlib-1.18.0-rtems4.11-20101126.diff

下载目录:

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

http://www.mmnt.net/db/0/0/ftp.rtems.eu/pub/rtems/4.10.2

备注:我在编译pc386平台时,首先使用的库是newlib-1.17.0.tar.gz,但在配置rtems支持posix接口时,出现sched.h找不到的错误,目前的解决方案是使用newlib-1.18.0.tar.gz库,并应用newlib-1.18.0-rtems4.11-20101126.diff补丁。

下载浮点运算C库包MPFR(multiple-precision floating-point) mpfr-2.4.2.tar.bz2:

http://ftp.gnu.org/gnu/mpfr/

 

下载复数运算C库包mpc-0.9.tar.gz:

http://www.multiprecision.org/index.php?prog=mpc&page=download

备注:该网站同时指出了mpc的最新版本,所依赖的mpfr和gmp的最低版本,比如网站主页指出,对于mpc-0.9.tar.gz版本,需求的gmp和mpfr的版本为:gmp version 4.3.2 或者更高,mpfr version 2.4.2或者更高

下载整数,有理数,浮点数算术库包gmp-5.0.5.tar.bz2:

http://ftp.gnu.org/gnu/gmp/

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

newlib-1.18.0.tar.gz

newlib-1.18.0-rtems4.11-20101126.diff

gmp-5.0.5.tar.bz2

mpc-0.9.tar.gz

mpfr-2.4.2.tar.bz2

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

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

 

1.3 创建环境变量

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

#! /bin/sh

export PRJECT=rtems

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

export TARGET=i386-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=i386-rtems4.10

更改为:

export TARGET=arm-rtems4.10

使用库: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 ../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.18.0.tar.gz,并应用补丁

$cd build

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

$cd newlib-1.18.0

$patch -p1 <../../archive/ newlib-1.18.0-rtems4.11-20101126.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 .

 

$tar xvf ../archive/mpfr-2.4.2.tar.bz2

$cp mpfr-2.4.2/ ./gcc-4.5.4/mpfr -a

 

$tar xvf ../archive/mpc-0.9.tar.gz

$cp mpc-0.9/ ./gcc-4.5.4/mpc –a

 

$tar xvf ../archive/gmp-5.0.5.tar.bz2

$cp gmp-5.0.5 ./gcc-4.5.4/gmp –a

第五步:完全编译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

 

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

pc386平台RTEMS开发环境的建立

第1章 编译RTEMS内核

$cd rtem-i386

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

$mkdir build-rtems

$cd build-rtems

编译rtems使其支持posix和网络

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

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

--enable-rtemsbsp=pc386 \

--prefix=/home/tom/Public/rtems-i386/install_dir

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

pc386平台RTEMS开发环境的建立

如果用newlib-1.17.0.tar.gz搭建基于i386的编译器,则会出现:

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也是需要打newlib-1.18.0-rtems4.11-20101126.diff补丁,否则rtems支持posix接口模块无法编译通过。

 

  • 编译microwindows运行

下载microwindows-full-0.92.tar.gz

下载地址:http://microwindows.censoft.com/

Microwindows的编译依赖于库:

freetype-2.3.12.tar.bz2

下载地址:

http://download.savannah.gnu.org/releases/freetype/freetype-old/

 

编译并安装freetype-2.3.12.tar.bz2:

$ tar xvf freetype-2.3.12.tar.bz2

$ cd freetype-2.3.12/

$ ./configure -host=i386-rtems4.10  -prefix=/home/tom/Public/rtems-i386/freetypelib

备注:其中-host=i386-rtems4.10指明使用的是交叉编译器的前缀,-prefex指明的是安装路径。freetype自动生成的include文件夹有点小问题,编译完成后的include目录结构是 /include/ft2build.h和  /include/freetype2/freetype/***.h如果直接使用会出现头文件找不到的问题,这里涉及到freetype的一个小技巧:使用freetype时只需要包含ft2build.h这一个头文件即可,因为ft2build.h里面会自动包含其他需要的头文件。而ft2build.h中的包含其他头文件的路径是/freetype/***.h,显然找不到相应的头文件。我们把freetype2中的freetype文件整个拷贝到include目录下,然后把 freetype2删除即可。

然后将其拷贝到rtems的安装目录install_dir/i386-rtems4.10/pc386/lib/include即可。示意图如下:

pc386平台RTEMS开发环境的建立

下载libpng-1.0.62.tar.bz2

http://sourceforge.net/projects/libpng/files/libpng10/1.0.62/

 

编译安装:

$ tar xvf libpng-1.0.62.tar.bz2

$ cd libpng-1.0.62/

$CC=i386-rtems4.10-gcc ./configure --build=i686-pc-linux --target=i386-rtems4.10  --host=i386-rtems4.10  --prefix=/home/tom/Public/rtems-i386/libpng_install

$make install

然后将生成的库文件和头文件:

pc386平台RTEMS开发环境的建立

拷贝到: rtems-i386\install_dir\i386-rtems4.10\pc386\lib目录中

 

下载: zlib-1.2.3.tar.bz2

编译安装:

$ tar xvf zlib-1.2.3.tar.bz2 zlib-1.2.3/

$ cd zlib-1.2.3/

$ CC=i386-rtems4.10-gcc ./configure --prefix=/home/tom/Public/rtems-i386/zlib –share

$make install

生成:

 

pc386平台RTEMS开发环境的建立

拷贝到: rtems-i386\install_dir\i386-rtems4.10\pc386\lib目录中

参考资料:http://blog.chinaunix.net/uid-24875436-id-3013114.html

 

$tar xvf microwindows-full-0.92.tar.gz

$cd microwindows-full-0.92/src

$RTEMS_MAKEFILE_PATH=/home/tom/Public/rtems-i386/install_dir/i386-rtems4.10/pc386/  \

 CONFIG=`pwd`/Configs/config.rtems  \

make -f Makefile.rtems  clean all >log.txt  2>&1

 

继续阅读
prtos, info
  • 本文由 发表于 2016年2月15日 22:10:57
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
VxWorks内核解读-FAQ 嵌入式实时系统

VxWorks内核解读-FAQ

本文概述:本网站自2016年2月份建站以来,陆续发布了一系列关于VxWorks Wind内核运行机制的博文,并陆续收到一些读者提出的问题,我从中选出了几个问题系统性的分析和解答下。 先回忆一下我学习V...
VxWorks内核解读-7 嵌入式实时系统

VxWorks内核解读-7

为了实现应用层程序的平台无关性,操作系统为应用层提供了一套标准的接口函数,这些接口函数在所有的平台上都保持一致,只是随着平台的变化,底层驱动或接近驱动部分操作系统中间层可能会随着调整。这样可以使用户程...
VxWorks内核解读-5 嵌入式实时系统

VxWorks内核解读-5

本篇博文,我们该谈到Wind内核的内存管理模块了,嵌入式操作系统中, 内存的管理及分配占据着极为重要的位置, 因为在嵌入式系统中, 存储容量极为有限, 而且还受到体积、成本的限制, 更重要的是其对系统...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定