最近开始摸索rtems系统,之所以选择它作为我心目中理想的RTOS还是看中它是开源、可靠性非常好、资料齐全、功能也能满足要求。关注了很久以后于是乎决定自己尝试动手移植到我的STM32板子上,不过千里之行始于足下,当然要从最基础的做起。不想一开始就在部署开发环境上耽误了许久,这篇bolg就记录了部署开发环境的整个过程。
1、环境的准备
一直是ubuntu的爱好者所以很自然的选择了最新的ubuntu 11.04,这是个在U盘上部署的linux,主要是方便,可以随便找台电脑来启动我的系统。rtems自然也会部署到这里。由于ubuntu对权限管理的很死,安装时如果频繁输入sudo很痛苦,而且使用root用户也为以后带来诸多不变,这里我干脆将rtems的安装目录放到了home/llemmx下。整个编译过程是参考官方wiki上的一遍文章。http://www.rtems.com/wiki/index.php/Building_the_RTEMS_toolset_on_Ubuntu
安装系统支持包
sudo aptitude install m4 patch build-essential texinfo cvs \ libncurses5-dev libgmp3-dev libmpfr-dev libmpc-dev autoconf \ autotools-dev automake
2、编译目录与安装包准备
从http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/上下载rtems工具链的源代码主要有:
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/binutils-2.21.1.tar.bz2
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/gcc-core-4.6.1.tar.bz2
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/gcc-core-4.6.1-rtems4.11-20110825.diff
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/gcc-g++-4.6.1.tar.bz2
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/gdb-7.3.1.tar.bz2
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/gdb-7.3.1-rtems4.11-20110905.diff
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/gmp-4.3.2.tar.bz2
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/mpc-0.8.1.tar.gz
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/mpfr-2.4.2.tar.bz2
http://www.rtems.org/ftp/pub/rtems/SOURCES/4.11/newlib-1.19.0.tar.gz
在/home/llemmx/下建立rtems-4.11与rtems-bsp目录,建立这么特殊的目录方便频繁替换。
3、解压缩源代码
tar xjf ../rtems/binutils-2.21.1.tar.bz2 tar xjf ../rtems/gcc-core-4.6.1.tar.bz2 tar xjf ../rtems/gcc-g++-4.6.1.tar.bz2 tar xzf ../rtems/newlib-1.19.0.tar.gz tar xjf ../rtems/gdb-7.3.1.tar.bz2 tar xjf ../rtems/gmp-4.3.2.tar.bz2 tar xjf ../rtems/mpc-0.8.1.tar.gz tar xjf ../rtems/mpfr-2.4.2.tar.bz24、 编译源代码与相关问题解决cd binutils-2.21/ cat ../../rtems-src/binutils-2.21-rtems4.11-20110107.diff | patch -p1 cd ../gcc-4.6.1/ cat ../../rtems-src/gcc-core-4.6.1-rtems4.11-20110825.diff | patch -p1 cd ../newlib-1.19.0/ cat ../../rtems-src/newlib-1.19.0-rtems4.11-20110826.diff | patch -p1 cd ../gdb-7.3.1/ cat ../../rtems-src/gdb-7.3.1-rtems4.11-20110905.diff | patch -p1 cd ..
mkdir b-binutils cd b-binutils ../binutils-2.21/configure --target=arm-rtemseabi --prefix=/home/llemmx/rtems-4.11 make all make info sudo make install cd .. export PATH=/home/llemmx/rtems-4.11/bin:${PATH}
在编译binutils时遇到了语法错误后修改其中一个结构体的初始化才解决问题,这个问题比较简单。
cd gcc-4.6.1/ ln -s ../newlib-1.19.0/newlib . cd .. mkdir b-gcc cd b-gcc/ ../gcc-4.6.1/configure --target=arm-rtemseabi --with-gnu-as --with-newlib --verbose --enable-threads \ --enable-languages="c,c++" --prefix=/home/llemmx/rtems-4.11 make all make info sudo make install cd ..
这里遇到的问题比较棘手, 主要的错误集中在mpfr库的路径上,一直查到最后才发现原来ubuntu使用的mpfr库版本以及改变,这里偷懒使用 ln -sf libmpfr.so.4.0.0 libmpfr.so.1终于解决问题。 另外因为目标器件是STM32所以MCU编译的选择是arm-rtemseabi支持最新的arm指令集。
在编译最新的gcc-4.8.0时遇到了奇怪的[s-automata] error 137错误的字样,后来确认是内存不足引起。 类似gdb还有其它软件包暂时可以不需要,这里编译掠过。 下面准备写一下编译BSP包的问题。