zoukankan      html  css  js  c++  java
  • Linux下编译RTThread

    Host:ubuntu-10.10
    Rtos:RT-Thread-0.3.1
    Packages :sudo apt-get install scons python zlib1g-dev libsdl1.2-dev
    ---------------------------------------------------------------
    RT-Thread是一款国人开发的嵌入式实时操作系统。关于RT-Thread更多信息可访问以下地址:

    * RT-Thread 官方网站论坛:www.rt-thread.org/phpbbforum
    * RT-Thread 英文网站及SVN源代码服务器:code.google.com/p/rt-thread/
    * 阿莫综合电子网站RT-Thread专版:www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=3066
    * 其中最重要的文档当然是官方提供的编程指南了,当前还是0.3.0版本,可从官方网站下载。

    一、下载RT-Thread的最新稳定版
    当前最新的稳定版本是0.3.1,可通过上面的code.google.com上的download标签下载RT-Thread-0.3.1.zip包。
    稳定版可用于测试研究,最好再下载一份SVN完整版,因为里面包含了一些文档和测试资源(后面模拟运行是指定的虚拟SDCARD文件就是从svn里面而来),从code.google.com上的source标签下载。

    二、下载交叉编译工具链
    可以从 www.codesourcery.com/sgpp/lite/arm 这里下载。
    注意:要选择 EABI 版本,点击进去之后(也就是这里:www.codesourcery.com/sgpp/lite/arm/portal/release1592,该页面的下方还有很多文档供下载)会发现有Windows版和Linux版供选择,这里当然是Linux版。

    然后对于各自版又提供了安装文件和tar包文件供选择。所谓安装文件就是一个.bin文件,下载运行后会有一个类似Windows下的安装向导,然后根据 提示一步一步完成安装;tar包其实更简单,可以随便解压到任何地方,只不过需要自己动手设置一下PATH而已。这里选择下载的是tar包:arm- 2010.09-51-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

    三、安装交叉编译工具链
    先解压到/opt下:

    $ sudo tar xjf arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 -C /opt

    解压完毕会在/opt目录下发现一个"arm-2010.09"目录;然后就是设置系统PATH,用编辑器(vi/gedit)打开你家目录下的.bashrc(~/.bashrc),在其最后添加如下两行:

    PATH=$PATH:/opt/arm-2010.09/bin
    export PATH

    保持退出后再执行:

    source ~/.bashrc

    然后在终端上输入"arm",按Tab键补全,是不是出现了一堆arm-none-eabi-*命令。
    关于这些命令的介绍可以参见Getting Started Guide,当前还有其它说明文档,下载地址参见上面的工具链下载地址。

    四、编译之前
    可先了解一下RT-Thread的目录结构,好像SVN最新版的目录结构跟0.3.1有了些变化,这个暂时不管,还是以0.3.1为例吧。

    RT-Thread-0.3.1 $ ls -l
    AUTHORS
    bsp/ ---> 板子相关代码,支持各种不同的板子
    COPYING
    examples/ ---> 测试代码
    filesystem/ ---> 文件系统代码,当前版本仅支持elmfat格式
    finsh/ ---> shell 代码
    include/ ---> 系统header

    libc/ ---> libc
    libcpu/ ---> 处理器相关代码,支持各种不同的处理器
    net/ ---> 网络代码,一个轻量级TCP/IP的实现
    Readme.txt
    rtgui/ ---> 图形库代码
    src/ ----> 内核代码


    通过src/, libcpu/和bsp/可以构建RT-Thread最小内核。也就是说其它那些组件都是可选的,可以通过各自的bsp/$board /rtconfig.h进行配置。对于RT-Thread而言,只有kernel,所以无论包含多少组件,最后编译出来的还是一个RT-Thread kernel,这与Linux下分为核心态和用户态是不同的。

    如果需要进行代码移植,主要会涉及到以下两个目录的修改(说起来容易,还在继续研究中...):

    * libcpu: 放置与芯片移植相关的代码,上下文切换代码,中断处理代码,SoC芯片内置外设驱动代码等;
    * bsp: 放置与具体开发板,开发平台相关的代码,板载外设驱动等。

    所有的编译工作都是在各自的bsp/$board目录中进行的。编译构建工具好像大多使用的是scons,而不是makefile。听说scons比Makefile要高效一些,可以学习一下了。论坛里也有一篇关于scons的介绍:www.mcuos.com/thread-5441-1-1.html
    还有RT-Thread中scons使用详细说明:www.rt-thread.org/phpbbforum/viewtopic.php?t=766

    关于目录结构的更多信息及移植信息,请参考编程指南。

    五、开始编译
    对于任何一个未知的事物,只有先获得一些感性的认识之后,然后才能对其进行较深入的了解,所以在真正研究RT-Thread之前可以先编译测试一下,看看到底是个什么展现形式。

    0.3.1版本的bsp下有如下板子信息:

    $ ls bsp/
    lm3s lpc176x lpc2148 lpc2478 mini2440 qemu sam7s sam7x stm3210

    其实我更关注的是stm32,但该目录有点乱,而mini2440好像比较成熟,无论是文档还是模拟器都可直接拿来使用,所以就先编译模拟一下 mini2440吧。进入到bsp/mini2440/目录之后,先修改文件rtconfig.py,指定 CodeSourcery 编译器所在的正确位置:

    CROSS_TOOL      = 'gcc'
     
    if CROSS_TOOL == 'gcc':
    PLATFORM = 'gcc'
    EXEC_PATH = '/opt/arm-2010.09/bin'

    然后执行编译命令:

    $ scons

    编译到最后一步链接的时候会提示 "key.c:2:21: fatal error: S3C24x0.h: No such file or directory"
    通过find命令查得该文件是存在的(libcpu/arm/s3c24x0/s3c24x0.h),只不过在key.c中引用的时候是大写的。
    可能该文件当初提交的时候是在Windows下开发的,而Linux是对大小写敏感的,所以改成小写就没事了。

    编译完成之后,会发现生成了两个目标文件以及一个build目录:

    $ ls rtthread* -lh
    rtthread.bin ---> 烧写到板子的目标文件
    rtthread-mini2440.axf ---> 用于调试的ELF格式文件,由于带有DEBUG信息,所以尺寸较大
    $ ls build/ ---> build下存在的目录表示选用的组件,这里来看好像都选了。可以通过rtconfig.h进行取舍配置。
    examples filesystem finsh libcpu minilibc net rtgui src

    六、模拟运行
    如果没有真实的mini2440板子,可以通过qemu模拟运行RT-Thread。

    首先需要下载qemu for mini2440,命令如下(注意,apt-get直接安装的qemu不是针对mini2440的)

    $ git clone git://repo.or.cz/qemu/mini2440.git mini2440-qemu

    然后打上mini2440的patch:

    文件附件:

    文件名: mini2440.patch.zip
    文件大小: 2 KB
    $ cd mini2440-qemu/
    $ patch -p1 -i path/to/mini2440.patch

    最后编译:

    $ ./configure --target-list=arm-softmmu
    $ make

    编译完成之后会在 arm-softmmu/目录下发现生成的二进制文件qemu-system-arm。

    接着就可以进行模拟运行了:
    将上面生成的qemu-system-arm拷贝或链接到bsp/mini2440/目录下
    将通过SVN获取的原码里面的 rt-thread-read-only/tools/SDCARD.zip 文件拷贝或链接到bsp/mini2440/目录下并解压,解压后看到的是一个64M的SDCARD文件,该文件是一个64Msd卡的模拟文件,可以挂载 到RT-Thread下,通过elmfat文件系统对其进行管理。

    然后执行如下命令启动qemu模拟器:

    ./qemu-system-arm -M mini2440 -kernel rtthread-mini2440.axf -show-cursor -sd SDCARD -serial telnet:127.0.0.1:1200,server -serial file:virtualkbd

    * -M ---> 指定machine,因为下载的qemu是为mini2440定制的,所以只能是mini2440
    * -kernel ---> 指定kernel
    * -show-cursor ---> 显示鼠标,如果没有该参数,则运行的gui上没有鼠标指针显示
    * -sd ---> 指定sd卡文件,这里是虚拟的
    * -serial telnet:127.0.0.1:1200,server ---> 指定telnet:127.0.0.1:1200 server 为模拟串口
    * -serial file:virtualkbd ---> 指定虚拟键盘文件(主要是为了在QEMU中模拟按键操作,mini2440开发板本身不支持键盘,修改了该QEMU版本的代码,将第二个串口重定向到键盘 了,这样来使该QEMU版本支持键盘;不过我这里好像不工作,仍然无法输入)

    接着再打开一个终端输入:

    telnet 127.0.0.1 1200

    然后就进入到RT-Thread了,同时会有一个gui窗口显示出来,可以通过点击"Next"按钮看到当前gui可支持的各种元素,还是挺丰富的。


    RT的Finsh终端显示如下,然后就可以通过finsh进行debug了:

    $ telnet 127.0.0.1 1200
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
     
    \ | /
    - RT - Thread Operating System
    / | \ 0.3.1 build Jan 11 2011
    2006 - 2010 Copyright by rt-thread team
    In SD ready
    part[0], begin: 32256, size: 32.464MB
    part[1], begin: 34062336, size: 31.512MB
    finsh>>dm9000 id: 0x90000a46
    operating at unknown: 15 mode
    TCP/IP initialized!
    event size: 32
    event size: 20

    ===================================================================

    更新:
    RT-Thread从0.4.0开始,对目录结构进行了更新,将一些组件目录统一放置到componts目录之下,从而简化了上级目录。
    关于bsp下的stm3210分支也在0.4.0进行了更新了,没再分很多子目录,结构很清晰,而且在linux下可以直接编译通过。
    详细参见:www.ucrobotics.com/index.php/zh/forum/6-...a1%E9%97%AE%E9%A2%98

  • 相关阅读:
    Deepin v20 beta更新后没有无线网卡
    Java操作Poi--word图表中颜色的设置
    IDEA配置之CopyRight
    Oracle——日期函数,时间操作(汇总)
    IDEA插件之alibaba编程规范
    IDEA插件之PMD
    IDEA插件之CheckStyle
    IDEA插件之FindBugs
    小计--------flume 自定义kafka source 案例
    记一次--------phoenix创建表映射到hbase报错
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2949300.html
Copyright © 2011-2022 走看看