在vmware中构建多个vxworks

时间:2015-09-02 02:02:35

标签: vxworks vmware-fusion

当我在vmware中构建一个vxworks时,它可以工作。但是当我用不同的IP分别创建两个vxworks时,第二个vxworks失败了(log来自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。

2 个答案:

答案 0 :(得分:1)

原谅我 删除宏VXWORKS_RUN_ON_VMWARE以及sysLn97xEnd.c中的所有相关代码。
在VMWorkstation 11下,一切都运行良好 MAC可以在vm机器的配置页面下设置 也许这些宏是针对vmworkstation的远程版本。

<德尔> 在vmware中设置mac地址不起作用 你需要一个函数来在系统启动时生成不同的mac地址。
vm机器的每个副本都需要构建一个不同的bootrom和一个vxworks。
(在(.wpj)MAKEFILE中简单地使用-D MACRO在单个标题的不同项目之间切换mac。)
这是一个在一台虚拟机中设置多个mac的脏解决方案:
0
定义mac地址和在ln97xEnd.c中访问它的函数 \#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 */ ...
3.
重建bootrom,并重建vxworks 结果:
[telnet到vmware并检查arpShow] [1]   [1]:https://i.stack.imgur.com/kR9Uy.jpg

答案 1 :(得分:-2)

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