Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173841
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-01 12:35
个人简介

不断超越自己,将更强大!

文章分类

全部博文(35)

文章存档

2022年(1)

2017年(5)

2016年(29)

我的朋友

分类: 嵌入式

2016-05-16 21:08:13

       最近一直在折腾学习RTEMS,想移植到:STM32F429上,终于在VM 虚拟机:CentOS 6.6上架起了基于STM32F429-Discovery 的RTEMS 4.11 的开发测试环境并成功跑起了RTEMS,虽然只是初步进入,但是,中间还是经历了各种困难,原因就是资料少,英文的资料需要慢慢理解,不断的编译与验证。

因为使用最新的工具链RTEMS 4.12 + 最新的RTEMS内核,STM32F429 的ticker跑不正常,时钟不走,因此,就换成较低的RTEMS 4.11(支持STM32F4系列的)。

原来的官方工具链又太旧,编译出错,找不到正确的解决方法,因此,直接使用官方提供的工具,生成较新的工具链,来验证一下,结果,正常了。helloworld ticker shell 文件系统,都可以正常的运行。

下面为:RTEMS 4.11工具链的编译方式(不是RPM安装,是使用官方提供的工具直接编译)。


开发环境如下:

PC机:windows 7 64bit

VM: CentOS 6.6

RTEMS: RTEMS-4.11

目标:RTEMS工具链:arm-rtems-4.11(用来编译最新的RTEMS 4.11的内核)


       其实官方网站ftp上有RTEMS 4.11的工具链,不过gcc等太旧了,也一直没有更新,如果想更新,需要官方提供的RTEMS Source Builder来更新工具链。

       开始以为很难,仔细看了一下安装文档,发现命令很容易理解,因此编译了一下,除了编译时间长外,一切正常!!!

        通过git下载到最新的RTEMS的内核源码,现在都更新到了:4.12版本了。。。只是没有release,可能还在不断的测试验证中。我用老的官方的工具链是不能正常编译最新的rtems内核源码的,提示错误好像也是工具链方面的。

        工欲善其事,必先利其器,如果想编译RTEMS 4.11分支的内核源码,感觉基本稳定,就需要编译配套的工具链。

       我这里为:gcc version 4.9.3 20150626 (RTEMS 4.11, RSB no-repo, Newlib 2.2.0.20150423) (GCC)

以下为编译整个流程:

(1)下载 RTEMS Source Builder,可以使用git,或是直接下载安装包。


我这里下载:4.11分支的源码,而不是master最新的4.12的。


(2)根据rtems-source-builder/doc 里的安装提示,我这里为centos ,因此,先安装环境需要的工具软件。命令如下:


CentOS
^^^^^^


The following packages are required on a minimal CentOS 6.3 64bit installation:


-------------------------------------------------------------
# yum install autoconf automake binutils gcc gcc-c++ gdb make patch \
bison flex xz unzip ncurses-devel texinfo zlib-devel -devel git

-------------------------------------------------------------


The minimal CentOS distribution is a specific DVD that installs a minimal
system. If you use a full system some of these packages may have been
installed.


(3) 通过shell进入:rtems-source-builder-4.11/rtems 目录下,

# ../source-builder/sb-check (这里为测试一下环境是否准备好,准备好才能编译并安装rtems 4.11的工具链)

# ../source-builder/sb-set-builder --log=l-arm.txt --prefix=/opt/rtems-4.11 4.11/rtems-arm.bset

即可下载、编译,安装,最终在/opt/rtems-4.11目录下,生成所需要的工具集与gcc库等。

注意安装目录为:/opt/rtems-4.11,如果已经安装过官方的rtems-4.11工具链,最好改个名字。


(如果网速慢:访问国外的网速都很慢,整个过程约为:1~2个小时

最后,成功后,就可以生成相应的RTEM 4.11的工具链了。


(4)编译成功后,进入:/opt/rtems-4.11/bin/ 

# ./arm-rtems4.11-gcc -v


[ bin]# ./arm-rtems4.11-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-rtems4.11-gcc
COLLECT_LTO_WRAPPER=/opt/rtems-4.11/libexec/gcc/arm-rtems4.11/4.9.3/lto-wrapper
Target: arm-rtems4.11
Configured with: ../gcc-4.9.3/configure --prefix=/opt/rtems-4.11 --bindir=/opt/rtems-4.11/bin --exec_prefix=/opt/rtems-4.11 --includedir=/opt/rtems-4.11/include --libdir=/opt/rtems-4.11/lib --libexecdir=/opt/rtems-4.11/libexec --mandir=/opt/rtems-4.11/share/man --infodir=/opt/rtems-4.11/share/info --datadir=/opt/rtems-4.11/share --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-rtems4.11 --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --verbose --with-newlib --with-system-zlib --disable-nls --without-included-gettext --disable-win32-registry --enable-version-specific-runtime-libs --disable-lto --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-obsolete --enable-libgomp 
--enable-languages=c,c++
Thread model: rtems
gcc version 4.9.3 20150626 (RTEMS 4.11, RSB no-repo, Newlib 2.2.0.20150423) (GCC) 


官方rpm包安装的应该为:4.8.3左右的,有点老。


(5)可以通过设置环境变量(当然也可以直接全路径)使用arm-rtems4.11-gcc 等工具链,

我这里修改 /etc/profile

添加:


# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
    #pathmunge /opt/arm-2010q1/bin
    #pathmunge /opt/rtems-4.10/bin
    #pathmunge /opt/rtems-4.12/bin
    pathmunge /opt/rtems-4.11/bin



注销再重新登录,永久修改环境变量,可以直接在shell上执行如:arm-rtems-gcc 等命令,不用再输入全路径。


(6)下载RTEMS 4.11的内核源码并编译。(我这里下载rtems4.11分支的源码,而不是master最新的)


然后进入:rtems-4.11 的根目录

# ./bootstrap -c

# ./bootstrap -p

# ./bootstrap(此步骤时间比较长)

# cd ..

#mkdir stm32f4

#cd stm32f4

../rtems-4.11/configure --target=arm-rtems4.11 --disable-posix --disable-itron --disable-cxx --disable-networking  --enable-rtemsbsp="stm32f4" --prefix=/home/RTEMS/stm32f4

#make
#make install
这样,就会在当前:/home/RTEMS/stm32f4 目录下,生成相应的BSP开发包文件了。

       可以直接使用    /home/RTEMS/stm32f4/arm-rtems4.12/c/stm32f4/testsuites/samples/hello下面生成hello.exe文件进行调试。

(7)生成bin文件的方法


下载stlink 的Linux下的工具源码,编译安装后,就可以使用st-flash等工具了。

# arm-rtems4.11-objcopy -O hello.exe hello.bin
连接开发板下载:
# st-flash write hello.bin0x800 0000  (注意 flash地址:0x800 0000 而不是:0x8000 0000 )

(8)使用基于Linux下的st-linkV2下载并运行。

        连接串口(这里为:串口3,PD8/PD9),看看是否有Hello World打印,        如果成功打印出来,基本上说明RTEMS 跑起来了,接下来,就要修改一下,使之更完善。rtems 4.11支持基于stm32f407的BSP,与stm32f429相似,因此,简单的修改,就可以运行。

(9)如果下载并成功的运行hello.bin,就会打印出:

*** BEGIN OF TEST HELLO WORLD ***

Hello World

*** END OF TEST HELLO WORLD ***


 具体的操作,还需要细化,下次再整理一下。

阅读(2630) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~