快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

ag只为非同凡享:在VxWorks平台实现交叉编译工具链的开发及优化研究



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-vxworag只为非同凡享ks对象来说,由于在天生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开拓的对象ag只为非同凡享链作为产品开拓的对象,供给了更好的应用机动性。

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

3.2 选择开拓资本包

GCC、BinuTIls文件均有各自的版本号,不是随意率性组合都可以编译成功并终极建立一个交叉编译情况的。ag只为非同凡享基于稳定性方面斟酌,这里选用的GCC和Binutils版本较老一点,然则大年夜多半工程职员保举的版本(Binutils-2.10,GCC-2.95.3)。

3.3 建立情况变量

该步骤的目的是方便重复输入路径,直接输入绝对路径也是可行的。声明以下情况变量的目的是在之后编译对象库的时刻会用到,方便输入,尤其是可以低落输错路径的风险。

3.4 天生Binutils二进制库

Binutils是GNU对象之一,它包括链接器、汇编器和其他用于目标文件和档案的对象,是二进制代码的处置惩罚掩护对象。安装Binutils对象包孕的法度榜样有addr2line、ar、as、c++ag只为非同凡享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等是编译其他交叉法度榜样的根基,以是必须放到第一步进行。编译历程如下:

编译完成今后,将会天生Binutils对象,对这些对象感化的解释略——编者注。

3.5 天生i586-wrs-vxworks交叉编译对象链

设置设置设备摆设摆设参数如下:

履行完编译,安装敕令之后,将会在$PREFIX/bin/文件夹中天生对象。至此,一个完备的基于VxWorks的GCC交叉编译对象链就建立起来了。

4 、结论

本文天生的i586-wrs-vxworks交叉编译对象链经由过程了大年夜量的工程实践与测试,可以优越地运行在基于Windows操作系统的PC机平台上,编译和链接基于Vx-Works平台的法度榜样,从而满意了VxWag只为非同凡享orks商业软件嵌入式利用的开源化,能为客户节约不少经济开销,然则改进GCC对代码的优化还有待进一步的钻研。

责任编辑:gt

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: