I need to port a c/c++ codebase that already supports Linux/Mac, to VxWorks. I am pretty new to VxWorks. Could you let me know what are the possible issues that could arise?
4 回答
我们最近做了相反的转换——我们将代码从运行 VxWorks 的 PowerPC 机器移植到运行 Linux 的 Intel 系统。就操作系统之间的差异而言,我不记得遇到过很多障碍。显然,对操作系统特定 API 的任何调用都必须更改,并且我们没有广泛使用这些函数。
我们最大的问题不是操作系统之间的差异,而是 PowerPC 和 Intel 硬件之间的差异。PowerPC 是大端,英特尔是小端。我们的软件是用 C 语言编写的,并且对字节顺序做了很多假设,这对于让它再次顺利运行来说绝对是一场噩梦。实际上有数百个定义位域的结构,需要重新排序才能正常工作。我们最终在 GCC 中实现了一个#pragma,它在定义时反转了这些位域(#pragma reverse_bitfields)。
很大程度上取决于您所针对的 VxWorks 版本以及实际的目标处理器本身。你必须处理的一件事是没有分页内存系统或虚拟内存——你有什么。环境本身比 linux 系统更受限制。有时,移植应用程序所涉及的工作会一直追溯到架构级别,因为资源不像 linux 中那样无限。
其他一些提示:
- 许可 vxworks 以便您拥有可用的源代码
- 在开发周期中尽快使用真实的物理目标;不要指望模拟器准确地模拟目标
- 必要时使用 TSR(技术支持请求);我不知道他们如何购买创建 TSR 的权利,但不要让任何人在这些上占便宜
根据您使用 VxWorks 字节序运行的处理器,结构打包和内存对齐都可能是问题。上次我使用 VxWorks 时,它支持 pthreads、sockets 和 mutex 层,很容易模仿 unix 环境。
It's difficult to tell, without knowing more about the application that you're porting: What linux libraries and api calls does it use? Is it self-contained, or does it rely on slews of linux command-line tools and scripts to do its job?
As Average says, endianness can cause you way more problems than you expect - particularly if you're not prepared for it.