2009-06-09 80 views

回答

3

我们最近做了相反的转换 - 我们将代码从运行VxWorks的PowerPC机器移植到运行Linux的Intel系统。就操作系统之间的差异而言,我不记得遇到过很多障碍。很明显,任何调用特定于操作系统的API都必须改变,我们并没有广泛使用这些函数。

我们最大的问题不是操作系统之间的差异,而是PowerPC和Intel硬件之间的差异。 PowerPC是Big Endian,Intel是Little Endian。我们的软件是用C语言编写的,并且对字节顺序做了很多假设,这是让它再次顺利运行的绝对噩梦。实际上有数百个结构定义了位域,需要重新排序以正确工作。我们最终在GCC中实现了一个#pragma,在他们的定义中反转了这些位域(#pragma reverse_bitfields)。

0

如果不了解更多关于正在移植的应用程序的信息,很难说:它使用的是什么linux库和api调用?它是独立的,还是依赖于Linux命令行工具和脚本来完成它的工作?

正如平均所言,排序会给您带来比预期更多的问题 - 尤其是如果您没有做好准备。

+0

感谢您的回复。该应用程序使用pthread,套接字库,临界区和互斥处理API。如果在移植到VxWorks时遇到任何问题,您可以告诉我吗? – ebaccount 2009-06-09 20:47:43

1

取决于您使用VxWorks排序的处理器,结构打包和内存对齐都可能是问题。上次我使用VxWorks时,它支持一个pthreads,套接字和互斥层,它们足够轻松地模仿unix环境。

2

很大程度上取决于您所针对的VxWorks版本以及实际的目标处理器本身。有一件事你不得不面对的是没有分页的内存系统或虚拟内存 - 你有什么。环境本身比linux系统更受限制。有时候,移植应用程序所涉及的工作一直回到架构级别,因为资源并不像Linux中那样无限。

一些其他提示:

  • 许可证的VxWorks,这样你有可用的源代码
  • 在开发周期中尽早使用真实的物理目标;不要指望模拟器准确模拟目标
  • 必要时使用TSR(技术支持请求);我不知道他们是如何构建购买创造TSR的权利的,但不要让任何人在这些方面便宜。