3

当我在 vmware 中建立一个 vxworks 时,它可以工作。但是,当我使用不同的 IP 分别创建更多两个 vxworks 时,第二个 vxworks 失败(日志来自 vxware.log):

2015-09-02T09:10:45.057+08:00| vcpu-0| W110: VLANCE: RDP OUT to unknown Register 100 
2015-09-02T09:10:45.057+08:00| vcpu-0| I120: VNET: MACVNetPort_SetPADR: Ethernet0: can't set PADR (0) 
2015-09-02T09:10:45.057+08:00| vcpu-0| I120: Msg_Post: Warning 
2015-09-02T09:10:45.057+08:00| vcpu-0| I120: [msg.vnet.padrConflict] MAC address 00:0C:29:5A:23:AF of adapter Ethernet0 is within the reserved address range or is in use by another virtual adapter on your system. Adapter Ethernet0 may not have network connectivity. 

我确信每个 vxworks 操作系统都有自己的 MAC 地址。另一点是我通过从第一个复制文件创建了第二个 vxworks。

4

2 回答 2

1

对不起。
删除宏 VXWORKS_RUN_ON_VMWARE 和 sysLn97xEnd.c 中的任何相关代码。
在 VMWorkstation 11 下一切正常。
可以在 vm 机器的配置页面下设置 MAC。
也许这些宏适用于较早版本的 vmworkstation。


在vmware中设置mac地址不起作用。
您需要一个函数来在系统启动时生成不同的 MAC 地址。
vm 机器的每个副本都需要构建一个不同的 bootrom 和一个 vxworks。
(简单地在 (.wpj)MAKEFILE 中使用 -D MACRO 以在具有单个标头的不同项目之间切换 mac。)
这是在一台 vm 机器中设置多个 mac 的肮脏解决方案:
0.
定义 mac 地址和访问它的函数在 ln97xEnd.c. 3. 重建bootrom,也重建vxworks。 结果: [telnet 到 vmware 并检查 arpShow][1] [1]:https://i.stack.imgur.com/kR9Uy.jpg
\#define LN97_MAX_IP (4) int ln97EndLoaded = 0; char ln97DefineAddr[LN97_MAX_IP][6] = { {0x00, 0x0c, 0x29, 0x5a, 0x23, 0xa0}, {0x00, 0x0c, 0x29, 0x5a, 0x23, 0xa1}, {0x00, 0x0c, 0x29, 0x5a, 0x23, 0xa2}, {0x00, 0x0c, 0x29, 0x5a, 0x23, 0xa3} }; END_OBJ * ln97xEndList[LN97_MAX_IP] = {NULL, NULL, NULL, NULL}; char * ln97xFindDefinedAddr(LN_97X_DRV_CTRL * pDrvCtrl) { int i; for (i = 0; i endObj) { return ln97DefineAddr[i]; } } if (i 1.
Modify ln97xEndLoad() in ln97xEnd.c to init different mac (and store the END_OBJ* if needed).
END_OBJ * ln97xEndLoad ... DRV_LOG (DRV_DEBUG_LOAD, "Done loading ln97x...\n", 1, 2, 3, 4, 5, 6); /** add to save END_OBJ* */ if (ln97EndLoaded endObj; ln97EndLoaded++; } /** end add */ return (&pDrvCtrl->endObj); ... 2.
change sysLan97xEnetAddrGet() in sysLn97xEnd.c.
aprom should not be set by ln97xFindDefinedAddr() instead of "00:0C:29:5A:23:AF".
char * ln97xFindDefinedAddr(LN_97X_DRV_CTRL * pDrvCtrl); ... STATUS sysLan97xEnetAddrGet ... { char * addrDef = NULL; ... /* modify by frankzhou to support in VMware */ \#define VXWORKS_RUN_ON_VMWARE \#ifndef VXWORKS_RUN_ON_VMWARE /* check for ASCII 'W's at APROM bytes 14 and 15 */ if ((aprom [0xe] != 'W') || (aprom [0xf] != 'W')) { logMsg ("sysLn97xEnetAddrGet: W's not stored in aprom\n", 0, 1, 2, 3, 4, 5); return ERROR; } \#endif \#ifdef VXWORKS_RUN_ON_VMWARE /** add by bonex for multi mac addr */ addrDef = ln97xFindDefinedAddr(pDrvCtrl); if (addrDef == NULL) { aprom[0]=0x00; aprom\[1]=0x0c; aprom[2]=0x29; aprom[3]=0x5a; aprom[4]=0x23; aprom[5]=0xaf; } else { bcopy (addrDef, aprom, 6); } /** end by bonex */ \#endif /* end by frankzhou */ ...



于 2016-12-08T11:55:18.003 回答
-2

这是由于在 sysLn97xEnd.c 中设置了 MAC 地址。这必须修改并为另一个 vxworks 节点重新构建 bootrom 和 vxworks 映像,否则会导致冲突。

于 2015-09-07T08:53:09.733 回答