其它工具 配置 rt-thread 开发环境

scmroad · 发布于 2012年8月24日 · 539 次阅读
96

工具链(toolchain)

在软件开发领域,工具链是指一组可以用于创建软件产品的开发工具,这些软件很可能串行地使用,即工具A产生的输出作为工具B的输入,工具B的输出又作为工具C的输入,这些工具似乎组成了一个链(chain)依次工作,来完成最终的任务。想象下工场里流水线,因此这一组工具就被称为工具链。

一个典型的工具链包括:

编译器(compiler) 链接器(linker) 库,例如标准库,浮点运算库等 调试器 其他实用工具

IDE

IDE–Integrated Development Environment,即集成开发环境,它是用于程序开发的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。该程序可以独立运行,也可以和其它程序并用。例如微软公司的早期的Visual C++6.0 开发工具就是典型的IDE。一般来说,IDE都是通过project(工程)来管理代码。在IDE中,通常只需要简单地点击鼠标就可以完成程序的编译,运行,调试等工作,从而大大降低了开发的难度和门槛。 IDE和工具链的对比

IDE和工具链的区别在于,工具链通常是一组小工具,通常需要用户通过命令行手动运行,熟悉以后可以使用脚本将他们组合起来使用,而IDE在一个图形界面程序中集成了大部分功能。事实上,IDE通常在底层调用工具链中的小工具来完成功能。IDE只是一个图像界面前端,底层还是通过工具链中的工具来完成的。 RT-Thread 支持哪些开发工具

RT-Thread 99%的代码都是由标准C语言写成,只有少量影响系统性能,或者无法使用C语言实现的代码(例如进程上下文切换代码)采用汇编语言编写。这意味这RT-Thread源码具有非常好的移植性,可以非常容易的迁移到其他开发环境下。

目前RT-Thread官方提供的源码包中,提供对三种工具链的支持。分别是

MDK ,由ARM公司开发IDE,用于ARM 内核的芯片。MDK工具的编译器为armcc,下文提及armcc即指MDK,MDK是ARM公司在收购德国KEIL公司的KEIL软件上推出的,因此也称为keil。用于windows平台 IAR,用于windows平台 gcc,支持多种平台

注意,因为RT-Thread是一个嵌入式实时操作系统,主要面向的平台是嵌入式平台,因此这里的gcc主要是arm-gcc工具。不过rt-thread也可以在x86,mips等平台上运行,所以您需要选择合适的gcc版本。

RT-Thread的软件包中主要包括三个部分

源码,*.c, *.h, *.S SCons脚本,用于辅助编译,类似于Makefile,SCons稍后将详细介绍 其他文件,RT-Thread集成了一些其他组件,比如uffs。除源码外,uffs中还有说明文档,许可证文件等等。

注意:在本篇中,我们感兴趣的主要是源码和SCons脚本。 RT-Thread 源码组织

RT-Thread使用SCons作为默认的构建工具。 什么是构建工具(software construction tool) 通常,构建工具作为工具链的一员,包含在工具链的工具集中。如大名鼎鼎额Make就是最流行的构建工具,Make通过读取Makefile文件来检测文件的组织结构和依赖关系,并完成Makefile中所指定的命令。

没错,SCons跟Make类似,也是构建工具,它通过读取SConstruct和SConstript文件来获取源码的组织结构和依赖关系。SCons是基于python开发的,因此SConstruct和SConstript文件都是python脚本。不过读者不必担心,其脚本语法非常的简单,我将在下面SCons简介中介绍,因此读者不需要有python基础。

除Make和SCons以外,还有其他源码构建工具,如 CMake。 这里RT-Thread选择SCons作为默认的构建工具,是因为Makefile的配置工作相当复杂,并且包含大量的特性,不利于初学者学习。Make诞生于上世纪70年代,这么多年来一直作为做流行的构建工具,暴露了越来越多的问题,为了克服Make的种种缺点,人们开发了其他构建工具,CMake和SCons在这种情况下应用而生的。

NOTE: 这里说明一下IDE和SCons的关系。 通常IDE有自己的管理源码的方式,大部分IDE使用XML来组织文件,解决他们的依赖关系。也有一些IDE在底层调用Make来构建工程,对于这样的IDE,要么IDE可以自动生成Makefile,要们用户需要自己手动编辑Makefile。

以MDK和IAR为例,我们不需要添加编写任何配置文件,只需要通过鼠标点击,添加源码到工程中,然后编译即可生成最终的可执行文件。 这种方式固然有它的优点,集成,操作简单,入门容易。不过也有其固有的缺点,当文件很多时,难于管理,另外,难以跨平台。我们可以看到,从事嵌入式系统开发,很多时候我们需要在linux上系统上开发,linux上可没有MDK和IAR可用。那个时候您不得不继续采用SCons等来完成RT-Thread的编译。既然如此,那为什么不干脆一开始就使用SCons呢?虽然SCons是一个命令行工具,但是读者请放心,这个工具非常的简单易用。

这里试着列一下使用SCons的优点: * 使用及其简单,其脚本编写也非常的容易,20分钟即可学会,您只要仔细阅读完本篇文稿,就可以掌握。 * 跨平台,因为SCons基于python开发,而python完美跨平台,可以在多个系统上完美运行 * 具有多线程编译的能力,编译速度极快,这是MDK所不具备的,个人强烈推荐,当工程文件太多时,使用MDK编译速度缓慢,笔者是难以忍受的(尤其是经常因为改动全局头文件而导致整个工程都需要编译) * 强大的可定制性,因为SCons的配置文件是python脚本,因此具有强大的定制性

以一句话来结束吐槽:恐惧来自人们的想象,因此尝试着做一下,你可能就会发现,比原本想像的要容易的多。

OK,下面开始介绍如何配置基于SCons的配置环境,因为当使用IDE时,只要点击鼠标添加文件,因此对于如何使用MDK和IAR来开发不予以介绍。

下面的章节将围绕gcc工具链和SCons来展开。 下载RT-Thread源码

获取RT-Thread源码 配置工具链

0)下载RT-Thread源码包

1)安装编译工具链 https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription3053

选择 Sourcery G++ Lite 2011.03.42

CortexM3用户请勿使用2011.09-96版本,该版本无法正常编译CMSIS库

根据您的操作系统平台(windows or Linux or other)

windows用户请选择IA32 Windows Installer Linux用户请选择 IA32 GNU/Linux Installer

安装:

windows用户

一路next安装即可,安装路径根据您的爱好即可,无限制,哪里都可以,注意,这个您要记住这个安装路径,一会我们要用到。

linux用户

我相信您可以搞定...

2)安装scons

scons是基于python编写的,因此需要先安装python

windows

http://www.python.org/ftp/python/2.7.1/python-2.7.1.msi http://www.rt-thread.org/download/scons-2.0.1.win32.exe

linux版本

python和scons的linux版

注意:国内可能打不开python官方网站(可恶的GFW),您可以在天空软件站或者其他软件站下载,python版本需要大于2.4(SCons官方网站 http://www.scons.org/ 要求的),注意,这里给出的python版本是2.7,这不是必需的,您完全可以使用2.6或其他版本。python3.2版本不能运行scons

下载并安装这两个软件包。

windows:

默认情况下,这样python会被安装到 C:\Python27 此时scons会被安装到 C:\Python27\Scripts 路径下,这个路径后面要用到

注意:如果你是新手,建议不要修改python安装路径。

linux:

没啥好说的。

第二步:配置路径

windows:

windows 7: 右击计算机->属性-> 高级系统设置->高级->环境变量->系统变量->找到名为Path的变量,点击编辑,在最后添加路径。 windows xp: 同win7,右击我的电脑->属性->高级->环境变量->系统变量->找到名为Path的变量,点击编辑,在最后添加路径。

linux:

你可以编辑当前用户主目录下的.bashrc,将路径加入其中。总之,我相信你。

1)将CodeSourcery G++的路径加入到系统可执行路径中

注意:如果你安装了其他arm-gcc编译工具链,并且将其路径也加入到系统可执行路径中,那么建议你先将其路径从系统路径中去掉。 例如笔者的安装路径为

D:\Program Files\CodeSourcery\Sourcery G++ Lite\bin

将上述路径加入到系统路径中。

2)将scons路径加入到可执行路径中

将刚才的scons的安装路径,即 C:\Python27\Scripts 加入到系统路径中 体验scons编译工程

假定您使用的是RT-Thread1.0软件包 http://rt-thread.googlecode.com/files/RT-Thread%201.0.0.7z 将其解压缩后 可以看到RT-Thread的目录结构,其中bsp目录为RT-Thread官方提供的示例工程目录。

这里来编译下bsp\stm32f10x工程 在编译以前,需要稍微修改如下几个文件

rtconfig.py 此文件必须修改 rtconfig.h 此文件用于裁剪rt-thread(根据您的需要修改)

说明:下面以windows平台为例,因此,路径都是windows路径风格,对于linux,只要修改路径为linux风格即可。

使用文本编辑工具打开rtconfig.py

+----------------------------------------------------------------------------+ | ARCH='arm' | | CPU='cortex-m3' | | CROSS_TOOL='keil' | | ... | | if CROSS_TOOL == 'gcc': | | PLATFORM = 'gcc' | | EXEC_PATH = 'D:/SourceryGCC/bin' | | elif CROSS_TOOL == 'keil': | | PLATFORM = 'armcc' | | EXEC_PATH = 'E:/Keil' | | elif CROSS_TOOL == 'iar': | | PLATFORM = 'iar' | | IAR_PATH = 'E:/Program Files/IAR Systems/Embedded Workbench 6.0' | | | | BUILD = 'debug' #这个意思是说,生成的是debug版本 | | ... | +----------------------------------------------------------------------------+

上面的代码是比较容易懂的。 其中 CROSS_TOOL 为交叉编译工具配置选项,可选的值为'keil', 'gcc', 'iar'。 如果您的机器上安装了MDK,那么您可以尝试使用'keil'来编译。不过您需要修改 EXEC_PATH='E:/Keil'为您的MDK的安装路径,比如我的系统上,MDK安装在D:/Keil上, 则将上述路径修改为:

.... | elif CROSS_TOOL == 'keil': | | PLATFORM = 'armcc' | | EXEC_PATH = 'D:/Keil' | ....

scons使用MDK工具链编译

修改rtconfig.py, CROSS_TOOL='keil' 修改EXEC_PATH='D:/Keil' rtconfig.h使用默认配置

打开cmd命令行窗口,然后使用cd命令切换到 bsp\stm32f10x 目录下,输入 scons 后回车,在笔者的机器上,效果如下:

F:\Project\svn\rt-thread\bsp\stm32f10x>scons

稍等片刻就可以在 bsp\stm32f10x路径下生成 axf文件和bin文件。

注意:此时你可能会遇到一个错误,提示是命令行参数过长,link出错,没关系,这是因为armcc默认支持的命令行长度有限制,解决方案请从那靠,使用armcc编译时link出现命令行过长的解决方案。或者暂时不必理会,可以先使用gcc来编译,gcc不会出现这个错误的。

小技巧:

scons -c

这个命令会清除编译出来的文件

scons -j4

使用这个命令来编译,看看这次编译的速度是不是大大加快? 这是因为scons支持多线程并行编译。一般来说,一颗cpu核心可以支持2个线程线程。笔者的PC里cpu是双核的,因此这里使用 -j4。

每次启动cmd切换行路径是不是很麻烦,惹人厌烦

这里有两个办

在bsp\stm32f10x中建立一个bat文件(比如起名为 startcmd.bat 然后使用文本编辑器打开,向其中写入 start cmd.exe 保存后鼠标双击,看看是不是此时打开的cmd其路径已经是bsp\stm32f103呢? 对于win7用户,按住shit,右击文件夹,在弹出的右键菜单选择 Command Prompt Here,即可打开cmd命令行提示符;对于xp用户,可以在右键菜单上添加一个“在当前路径中打开cmd” 的选项,这可以通过导入注册表的方式实现。具体请自行google。

生成MDK工程

scons --target=mdk -s

会在当前目录下生成一个 project.uv2

scons --target=mdk4 -s

就可以生成 project.uvproj,不过您需要查看一下当前bsp目录下是否提供了template.uvproj文件,因为这个命令依赖template.uvproj或template.uv2。

生成工程后,双击它打开,就可以使用mdk来编译,调试,非常的方便。对于初学者,强烈建议使用这种方式。当裁剪了rtconfig.h时,也建议使用这个命令重新生成工程。 scons使用gcc编译工具链

修改rtconfig.py, CROSS_TOOL='gcc',然后根据自己的实际情况修改EXEC_PATH,笔者将其修改为

EXEC_PATH = 'D:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'

注意:这里的一定要使用/,不要使用windows的\,否则后面执行scons会报错

然后同上一小节,打开cmd,切换到bsp\stm32f10x下,这次直接使用-j4选项

F:\Project\svn\rt-thread\bsp\stm32f10x>scons -j4

Windows下用批处理方式设置编译环境

在同时使用多个bsp时,挨个修改rtconfig.py并不是那么方便。如果对其内容稍加分析,会发现里面的定制选项是会被环境变量重载的。

if os.getenv('RTT_CC'): CROSS_TOOL = os.getenv('RTT_CC') if os.getenv('RTT_EXEC_PATH'): EXEC_PATH = os.getenv('RTT_EXEC_PATH')

因此只要在批处理下设置好以上两项就可以免于修改各个bsp的rtconfig.py了,一劳永逸,此外,SConscript依赖于RTT_ROOT,工具链需要加入系统路径,一个完整的bat文件内容如下:

set path=c:\Program Files\CodeSourcery\Sourcery G++ Lite\bin;d:\Python25\Scripts;%PATH% set RTT_ROOT=c:\workspace\rt-thread set RTT_EXEC_PATH=c:\Program Files\CodeSourcery\Sourcery G++ Lite\bin set RTT_CC=gcc cmd

然后就可以在bsp目录下执行scons来编译工程了,比启动Eclipse要快得多。 扩展阅读

到这里,大致的讲解了如何完成一次最简单的编译,强烈建议阅读下面两篇文档。

http://www.rt-thread.org/dokuwiki/doku.php?id=rt-thread%E4%B8%AD%E7%9A%84scons%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3 http://www.rt-thread.org/phpbbforum/viewtopic.php?f=2&t=1406

您需要了解并掌握

rt-thread是如何通过scons来组织源码的 scons的脚本的大致含义 当您需要添加您自己的源代码文件时,如何编写scons脚本文件,是源码文件可以被scons正确的编译

当您掌握这些内容后,就会发现这种方式开发效率很高。

转自:http://www.rt-thread.org/dokuwiki/doku.php?id=%E9%85%8D%E7%BD%AErt-thread%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册