基于Windows平台VxWorks交叉编译工具的设计

2011-08-08 10:39:53来源: 互联网

摘要:在开发VxWorks嵌入式平台时,开发厂商会推出一整套交叉编译工具链来配合自身的嵌入式产品,但是这些由商业公司提供的工具链,都不会附有工具链相关的源代码和制作方法,灵活性不足,并且它们一般都与整套开发系统捆绑销售使用,成本较高。为了更好地理解这种技术和降低成本,使用了国际开源组织GNU开发的工具链作为产品开发的工具,提供了更好的使用灵活性。
关键词:VxWorks;嵌入式平台;交叉编译;GCC;工具链

1 交叉编译工具链功能说明
    交叉编译技术,就是一种在一个异构平台上编译出目标平台程序的技术。比如在PC平台(X86 CPU)上编译出能运行在以VxWorks为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到VxWorks CPU平台上才能运行。
    每一个软件在编译的过程中都要经过一系列的处理,才能从源代码变成可执行的目标代码。这一系列处理包括预编译、高级语言编译、汇编、链接及重定位。这一套流程里面用到的每个工具和相关的库组成的集合,就称为工具链(tool chain)。以GNU的开发工具GCC为例,它就包括了预编译器CPP、C编译器GCC、汇编器AS和链接器LD等。在GNU自己对工具链定义中,还加进了一套额外的用于处理二进制包的工具包Binutils,整个工具链应该是GCC+Binutils+Glibc。对于i586-wrs-vxworks工具来说,因为在生成VxWorks交叉编译工具链时,用到的C库文件是从Tornado开发软件中提取出来的,所以生成的实际交叉编译工具链应该是GCC+Binutils+Tornado(C库文件)。GCC(GNU C Compiler)是一个C语言编译器。随着众多自由开发者的加入和GCC自身的发展,如今的GCC已经是一个包含众多语言的编译器了。其中包括C、C++、Ada、Object C和Java等。所以,GCC也就变为GNU Compiler Collection,也就是GNU编译器集合。当然,如今的GCC借助其特性,具有了交叉编译器的功能,所以又将GCC称为交叉编译工具链。

2 i586-wrs-vxworks交叉编译工具链制作背景
    现在市场上有很多公司的PLC选用的是基于WindRiver(风河)公司的Vxworks系列产品。
    一般说来,在开发VxWorks嵌入式的平台时,开发厂商会推出一整套交叉编译工具链来配合自身的嵌入式产品,但是这些由商业公司提供的工具链,都不会附有工具链相关的源代码和制作方法,灵活性不足,并且它们一般都与整套开发系统捆绑销售使用,成本较高。为了更好地理解这种技术和降低成本,我们使用了国际开源组织GNU开发的工具链作为产品开发的工具,提供了更好的使用灵活性。

3 交叉编译工具链设计
    要构建出一个交叉工具链,需要解决3个问题:
    ①这个工具链必须是可以运行在原工作站平台上的。
    ②需要更换一个与目标平台对应的汇编器,使得工具链能产生对应的目标代码。
    ③要更换一套与目标平台对应的二进制库,使得工具链在连接时能找到正确的二进制库。
    根据这样的思路,采取了如下几个步骤:
3.1 确定宿主机平台、目标机平台及开发工具
    根据项目要求,GCC交叉编译工具要能工作在基于Windows构架的平台,编译生成的可执行代码要能够满足基于X86结构的VxWorks嵌入式平台。编译时选用的开发平台为Windows XP,开发工具为Cygwin。
    Cygwin当初首先对GCC、GDB、GAS等开发工具进行了改进,使它们能够生成并解释Win32的目标文件。然后,他们要把这些工具移植到Wi-ndows平台上去。一种方案是基于Win32 API对这些工具的源代码进行大幅修改,这样显然需要做大量工作。因此,采取了一种不同的方法——写一个共享库(cygwin.dll),把Win32 API中没有的Unix风格的调用(如fork、spawn、signals、select、sockets等)封装在里面,也就是说,基于Win32 API写了一个Llnix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用Unix主机上的交叉编译器来生成可以在Windows平台上运行的工具集。
    a.JPG
3.2 选择开发资源包
    GCC、Binutils文件均有各自的版本号,不是任意组合都可以编译成功并最终建立一个交叉编译环境的。基于稳定性方面考虑,这里选用的GCC和Binutils版本较老一点,但是大多数工程人员推荐的版本(Binutils-2.10,GCC-2.95.3)。

3.3 建立环境变量
    该步骤的目的是方便重复输入路径,直接输入绝对路径也是可行的。声明以下环境变量的目的是在之后编译工具库的时候会用到,方便输入,尤其是可以降低输错路径的风险。
    
    c.JPG
3.4 生成Binutils二进制库
    Binutils是GNU工具之一,它包括链接器、汇编器和其他用于目标文件和档案的工具,是二进制代码的处理维护工具。安装Binutils工具包含的程序有addr2line、ar、as、c++filt、gprof、ld、am、objcopy、objdump、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。
    首先安装二进制工具,使用主机的GCC进行编译。生成的交叉二进制工具i586-wrs-vxworks-ar、i586-wrs-vxwor-ks-as、i586-wrs-vxworks-ld等是编译其他交叉程序的基础,所以必须放到第一步进行。编译过程如下:
    d.JPG
    编译完成以后,将会生成Binutils工具,对这些工具作用的解释略——编者注。
3.5 生成i586-wrs-vxworks交叉编译工具链
    配置参数如下:
    e.JPG
    执行完编译,安装命令之后,将会在$PREFIX/bin/文件夹中生成工具。至此,一个完整的基于VxWorks的GCC交叉编译工具链就建立起来了。

5 结论
    本文生成的i586-wrs-vxworks交叉编译工具链通过了大量的工程实践与测试,可以良好地运行在基于Windows操作系统的PC机平台上,编译和链接基于Vx-Works平台的程序,从而满足了VxWorks商业软件嵌入式应用的开源化,能为客户节约不少经济开销,但是改进GCC对代码的优化还有待进一步的研究。

关键字:windows  平台  设计

编辑:eeleader 引用地址:http://www.eeworld.com.cn/gykz/2011/0808/article_7935.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
windows
平台
设计

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved