EDN China > 设计实例 > EDA工具与服务 > 系统级设计 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

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

单片机与嵌入式系统应用 陈家骏 郑明?? 2011年06月29日 ?? 收藏0

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

  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平台上运行的工具集。

host_alias(宿主机名称) = i686?瞤c?瞔ygwin32
host_cpu(宿主机cpu构架) = i686
host_vendor(宿主机产商)= pc
host_os(宿主机操作平台) = cygwin32
target_alias(目标机名称) = i586?瞱rs??vxworks
target_cpu(目标机cpu构架) = i586
target_vendor(目标机产商) = wrs
target_os(目标机操作平台) = vxworks


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

VxWorks? 嵌入式? 交叉编译? GCC?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈