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