3

vmware で 1 つの vxworks を構築すると、動作します。しかし、別の IP でさらに 2 つの vxworks を個別に作成すると、2 つ目の 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 OS には独自の MAC アドレスがあるはずです。もう 1 つのポイントは、最初の vxworks からファイルをコピーして 2 つ目の vxworks を作成したことです。

4

2 に答える 2

1

私を許して。
マクロ VXWORKS_RUN_ON_VMWARE および sysLn97xEnd.c 内の関連コードを削除します。
すべてが VMWorkstation 11 で完全に機能します
。MAC は VM マシンの構成ページで設定できます。
おそらく、これらのマクロは vmworkstation のはるか前のバージョン用です。


VMware での MAC アドレスの設定が機能しません。
システムの起動中に別の MAC アドレスを生成する機能が必要です。
VM マシンの各コピーは、別の bootrom と vxworks を構築する必要があります。
(単純に (.wpj)MAKEFILE で -D MACRO を使用して、1 つのヘッダーで異なるプロジェクト間で Mac を切り替えます。)
1 つの vm マシンで複数の Mac を設定するための汚い解決策を 次に示します。
0.
MAC アドレスとそれにアクセスする関数を定義します。 ln97xEnd.c で。 3. bootrom を再構築し、vxworks も再構築します。 結果: [vmware に telnet して 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 に答える