您的位置 首页 方案

在Vx-Works渠道完成穿插编译东西链的开发及优化研讨

在Vx-Works平台实现交叉编译工具链的开发及优化研究-交叉编译技术,就是一种在一个异构平台上编译出目标平台程序的技术。比如在PC平台(X86 CPU)上编译出能运行在以VxWorks为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到VxWorks CPU平台上才能运行。

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渠道上运转的东西集。

在Vx-Works渠道完结穿插编译东西链的开发及优化研讨

3.2 挑选开发资源包

GCC、BinuTIls文件均有各自的版别号,不是恣意组合都能够编译成功并终究树立一个穿插编译环境的。依据稳定性方面考虑,这儿选用的GCC和Binutils版别较老一点,可是大多数工程人员引荐的版别(Binutils-2.10,GCC-2.95.3)。

3.3 树立环境变量

该进程的意图是便利重复输入途径,直接输入绝对途径也是可行的。声明以下环境变量的意图是在之后编译东西库的时分会用到,便利输入,尤其是能够下降输错途径的危险。

在Vx-Works渠道完结穿插编译东西链的开发及优化研讨

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等是编译其他穿插程序的根底,所以有必要放到第一步进行。编译进程如下:

在Vx-Works渠道完结穿插编译东西链的开发及优化研讨

编译完结今后,将会生成Binutils东西,对这些东西效果的解说略——编者注。

3.5 生成i586-wrs-vxworks穿插编译东西链

装备参数如下:

在Vx-Works渠道完结穿插编译东西链的开发及优化研讨

履行完编译,装置指令之后,将会在$PREFIX/bin/文件夹中生成东西。至此,一个完好的依据VxWorks的GCC穿插编译东西链就树立起来了。

4 、定论

本文生成的i586-wrs-vxworks穿插编译东西链通过了很多的工程实践与测验,能够杰出地运转在依据Windows操作体系的PC机渠道上,编译和链接依据Vx-Works渠道的程序,然后满意了VxWorks商业软件嵌入式使用的开源化,能为客户节省不少经济开支,可是改善GCC对代码的优化还有待进一步的研讨。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/96146.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部