前言
-
rtems 是一款比较优秀的 RTOS,官方网址 https://www.rtems.org/
-
当前 rtems 最新发布的版本:rtems-5.3 版本, 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/
-
rtems 支持的 平台也是比较多的,当前支持 STM32F4,也支持 qemu(模拟器)
realview_pbx_a9
下载 rtems-5.3
- 通过下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ 下载 rtmes-5.3 以及
rtems-source-builder-5.3
-
rtems-5.3.tar.xz
是 rtems 5.3 版本的源码 -
rtems-source-builder-5.3.tar.xz
是 rtems 5.3 编译工具链的构建源码,用于构建编译 rtems 的编译工具链,比如 ARM gcc 交叉编译工具链
编译 rtems 的工具链
-
rtems bsp
realview_pbx_a9
,需要使用 ARM gcc 交叉编译工具链,使用rtems-source-builder-5.3
进行构建 -
编译平台:
ubuntu 20.04
-
解压下载的
rtems-source-builder-5.3.tar.xz
,tar xf /mnt/hgfs/rtems/5.3/rtems-5.3.tar.xz -C ./
-
进入
rtems-source-builder-5.3/rtems
目录,运行
../source-builder/sb-set-builder --prefix=$HOME/rtems/arm/5.3 config/5/rtems-arm
-
这里的
--prefix=$HOME/rtems/arm/5.3
表示编译的产物,也就是 rtems arm gcc 交叉编译工具链的存放路径,rtems 默认使用 newlib C 库,因此需要手动编译 rtems arm gcc 交叉编译工具链 -
rtems-source-builder
是一套编译 rtems 工具链的脚本,会自动下载 编译工具链依赖的各个软件包,如 gcc、gdb 等,并编译生成一套编译工具链,可以认为是生成编译工具链的一套脚本。
- 当前 rtems 5.3 版本:arm (32位) gcc 交叉编译工具链依赖的软件包清单如下:
c
$ ls sources/
autoconf-2.69.tar.gz expat-2.1.0.tar.gz gmp-6.1.0.tar.bz2 mpfr-3.1.4.tar.bz2
automake-1.12.6.tar.gz gcc-7.5.0.tar.xz isl-0.16.1.tar.bz2 newlib-7947581.tar.gz
binutils-2.34.tar.bz2 gdb-9.1.tar.xz mpc-1.0.3.tar.gz rtems-tools-5.3.tar.xz
- 工具链编译过程比较长,如果电脑性能、内存比较小的情况下,如果网速慢,下载各个软件包也需要较长的时间
- 【备注】如果某个软件包下载失败导致编译终止,建议手动下载指定的版本,然后放在
rtems-source-builder-5.3/rtems/sources
目录下,再次编译
验证 rtems arm gcc 工具
- 可以进入 rtems arm gcc 的目录,运行
./arm-rtems5-gcc -v
,也可以把 rtems arm gcc 的路径设置到环境变量中,export PATH=$PATH:/home/zhangsz/rtems/arm/5.3/bin
,然后运行arm-rtems5-gcc -v
c
zhangsz@zhangsz:~/rtems/arm/5.3$ arm-rtems5-gcc -v
Using built-in specs.
COLLECT_GCC=arm-rtems5-gcc
COLLECT_LTO_WRAPPER=/home/zhangsz/rtems/arm/5.3/libexec/gcc/arm-rtems5/7.5.0/lto-wrapper
Target: arm-rtems5
Configured with: ../gcc-7.5.0/configure --prefix=/home/zhangsz/rtems/arm/5.3 --bindir=/home/zhangsz/rtems/arm/5.3/bin --exec_prefix=/home/zhangsz/rtems/arm/5.3 --includedir=/home/zhangsz/rtems/arm/5.3/include --libdir=/home/zhangsz/rtems/arm/5.3/lib --libexecdir=/home/zhangsz/rtems/arm/5.3/libexec --mandir=/home/zhangsz/rtems/arm/5.3/share/man --infodir=/home/zhangsz/rtems/arm/5.3/share/info --datadir=/home/zhangsz/rtems/arm/5.3/share --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-rtems5 --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --verbose --with-newlib --disable-nls --without-included-gettext --disable-win32-registry --disable-werror --enable-version-specific-runtime-libs --enable-newlib-io-c99-formats --enable-newlib-iconv --enable-newlib-iconv-encodings=big5,cp775,cp850,cp852,cp855,cp866,euc_jp,euc_kr,euc_tw,iso_8859_1,iso_8859_10,iso_8859_11,iso_8859_13,iso_8859_14,iso_8859_15,iso_8859_2,iso_8859_3,iso_8859_4,iso_8859_5,iso_8859_6,iso_8859_7,iso_8859_8,iso_8859_9,iso_ir_111,koi8_r,koi8_ru,koi8_u,koi8_uni,ucs_2,ucs_2_internal,ucs_2be,ucs_2le,ucs_4,ucs_4_internal,ucs_4be,ucs_4le,us_ascii,utf_16,utf_16be,utf_16le,utf_8,win_1250,win_1251,win_1252,win_1253,win_1254,win_1255,win_1256,win_1257,win_1258 --enable-threads --disable-plugin --enable-libgomp --enable-languages=c,c++,lto
Thread model: rtems
gcc version 7.5.0 20191114 (RTEMS 5, RSB 5.3, Newlib 7947581) (GCC)
-
当前 rtems 5.3 arm gcc 的版本:
gcc version 7.5.0
-
自此, rtems 5.3 版本 ARM 32位 的 交叉编译工具链生成成功
小结
-
本篇注意记录 rtems 5.3 版本 arm gcc 交叉编译工具链的生成,使用了 newlib C 库
-
rtems 支持 bsp qemu realview_pbx_a9 ,后续可以在没有硬件的情况下运行、调试 rtems,熟悉 rtems
-
rtems arm gcc 交叉编译工具链还支持其他 arm 系列的平台,比如 rtems 支持的 STM32F4 平台,后续尝试在 STM32 平台上移植适配 rtems