風河虛擬化元件使用說明(18)—— 分配真實乙太網介面給虛擬機器(GuestOS VxWorks 7)
首先需要檢視VxBus下的乙太網介面裝置路徑。需要在RootOS C Shell下使用vxbDevShowPaths命令,該命令使用前需要確保已經新增rootos_vip工程中的INCLUDE_VXBUS_SHOW元件。VxBus及BSP相關的資料可參考C:\WindRiver\docs\ vxworks-7-1.0.9.1\Processor_and_Device Support 路徑下的文件vxworks_7_bsp_and_driver_guide.pdf。
將INCLUDE_VXBUS_SHOW元件新增至rootos_vip工程:
重新編譯rootos_vip工程,將生成的VxWorks映象拷貝至目標機,重啟目標機,在RootOS C Shell中使用vxbDevShowPaths命令檢視VxBus下的裝置路徑,其中以“gei”開頭的即為乙太網介面:
具體資訊如下:
-> vxbDevShowPaths
mainbus0: /[email protected]
ioApicIntrCtlr0: /[email protected]/[email protected]
loApicIntrCtlr0: /[email protected]/[email protected]
dynamicIntr0: /[email protected]/[email protected]/[email protected]
acpiBus0: /[email protected]
fdtBus0: /[email protected]/[email protected]
fdtIntCtlr0: /[email protected]/[email protected]/[email protected]
PNP0A030: /[email protected]/[email protected]/[email protected]
pci device(8086:0c00)0: /[email protected]/[email protected]/[email protected]
pci device(8086:0412)0: /[email protected]/[email protected]/[email protected]/pci device(8086:0412)@2
pci device(8086:0c0c)0: /[email protected]/[email protected]/[email protected]/pci device(8086:0c0c)@3
pci device(8086:8c31)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c31)@14
pci device(8086:8c3a)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c3a)@16
pci device(8086:8c2d)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c2d)@1a
pci device(8086:8c20)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c20)@1b
pcib0: /[email protected]/[email protected]/[email protected]/pci [email protected]
gei0: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(8086:1539)@0
genericPhy0: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(8086:1539)@0/[email protected]
pcib1: /[email protected]/[email protected]/[email protected]/pci [email protected],1
gei1: /[email protected]/[email protected]/[email protected]/pci [email protected],1/pci device(8086:1539)@0
genericPhy1: /[email protected]/[email protected]/[email protected]/pci [email protected],1/pci device(8086:1539)@0/[email protected]
pcib2: /[email protected]/[email protected]/[email protected]/pci [email protected],4
pcib3: /[email protected]/[email protected]/[email protected]/pci [email protected],4/pci [email protected]
pci device(8086:8c26)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c26)@1d
pcib4: /[email protected]/[email protected]/[email protected]/pci [email protected]
virtShmem0: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1d25:0004)@0
virtShmem1: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1d25:0004)@1
virtShmem2: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1d25:0004)@2
virtShmem3: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1d25:0004)@3
virtioBlk0: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@4
virtioBlk1: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@5
virtioBlk2: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@6
virtioBlk3: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@7
virtioBlk4: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@8
virtioBlk5: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@9
virtioBlk6: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@a
virtioBlk7: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@b
virtioBlk8: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@c
virtioBlk9: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@d
virtioBlk10: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@e
virtioBlk11: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@f
virtioBlk12: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@10
virtioBlk13: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@11
virtioBlk14: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@12
virtioBlk15: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1001)@13
virtioSio0: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1003)@14
virtioSio1: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1003)@15
virtioSio2: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1003)@16
virtioSio3: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(1af4:1003)@17
pci device(8086:8c5c)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c5c)@1f
pci device(8086:8c02)0: /[email protected]/[email protected]/[email protected]/pci device(8086:8c02)@1f,2
loApicTimer0: /[email protected]/[email protected]/[email protected]
PNP05010: /[email protected]/[email protected]/[email protected]
vnic0: /[email protected]/[email protected]/[email protected]
genericPhy2: /[email protected]/[email protected]/[email protected]/[email protected]
virtBus0: /[email protected]/[email protected]
value = 31 = 0x1f
->
注意上述返回值標紅的部分是gei0和gei1。gei0對應EVOC工控機LAN1,gei1對應LAN2:
現在想要將LAN1和LAN2這兩個物理網口分配給GuestOS VxWorks 7,當前LAN1和LAN2口分配給的是RootOS,可在RootOS C Shell下通過的hvDevList()命令,或者通過hvconfig Shell下的device list命令來確認:
之後需要將gei0,gei1置於黑名單,以便可以在啟動RootOS後分配給GuestOS VxWorks 7。參考資料如下:
修改C:\WindRiver\vxworks-7\pkgs\os\hv\hypervisor-3.1.2.0\configlette下的usrVxbFilter.c 檔案:
在usrVxbFilter.c檔案中,新增用於描述裝置的結構體。參考程式碼中的註釋資訊,新增描述裝置結構體,注意最後一個結構體成員.pciDevId的值需要參考之前在RootOS C Shell下使用vxbDevShowPaths命令查到的裝置路徑,其中最後8086:1539中的1539即為裝置ID:
gei0: /[email protected]/[email protected]/[email protected]/pci [email protected]/pci device(8086:1539)@0
gei1: /[email protected]/[email protected]/[email protected]/pci [email protected],1/pci device(8086:1539)@0
之後重新編譯rootos_vsb工程,可以發現rootos_vsb工程下的(rootOS vsb dir)\krnl\configlette\usrVxbFilter.c 檔案跟剛改過的C:\WindRiver\vxworks-7\pkgs\os\hv\ hypervisor-3.1.2.0\configlette下的usrVxbFilter.c 檔案一致,其實是rootos_vsb工程在編譯時直接拷貝了剛剛改過的usrVxbFilter.c檔案:
之後重新編譯rootos_vip,注意此時可能會報如下錯誤:
原因在於各個編譯器遵從不同標準,有的不支援雙斜線//註釋,只支援/**/註釋:
為了避免麻煩,在此將程式碼中的雙斜線註釋//更改為傳統的註釋/**/,之後重新編譯rootos_vsb,及rootos_vip。
將重新生成的VxWorks映象拷貝至目標機,重啟目標機,在RootOS C Shell下使用hvDevList()命令,或者在hvconfig Shell下使用device list命令來確認兩個物理網口不再直接分配給RootOS:
在RootOS C Shell中使用vxbDevShowPaths,此時也不會出現gei0和gei1的路徑了,說明gei0和gei1成功加入黑名單:
為了將兩個物理網口分配給GuestOS VxWorks 7,需要在GuestOS VxWorks 7模板中新增裝置:
重新新增vxworks7_t至romfs檔案系統,重新編譯rootos_vip工程,將重新編譯的VxWorks映象拷貝至目標機,重啟目標機,啟動GuestOS VxWorks 7和GuestOS Windows 10,在RootOS C Shell下使用hvDevList()命令,或者在hvconfig Shell下使用device list命令來確認兩個物理網口分配給了GuestOS VxWorks 7:
為了配置GuestOS VxWorks 7的IP,需要在vx1_vip工程中新增元件INCLUDE_IPATTCAH:
為了通過Telnet連線主機和目標機,需要在rootos_vip工程和vx1_vip工程中新增TELNET相關元件:
之後重新編譯vx1_vip工程,重新新增GuestOS VxWorks 7映象至romfs檔案系統,重新編譯rootos_vip工程,重新拷貝編譯好的VxWorks映象至目標機,重啟目標機。
使用tip ”dev=/tyCo/16”命令進入GuestOS VxWorks 7後,先使用ifconfig檢視ip地址,之後使用ipAttach(0,”gei”);命令、ipAttach(1,”gei”);命令、ifconfig “gei0 192.168.1.102 up”;命令和ifconfig “gei1 192.168.1.103 up”;命令配置IP地址:
再次使用ifconfig命令檢視ip地址,gei0及gei1均已配置好:
配置好GuestOS VxWorks 7的ip地址後,為了通過物理網絡卡互相ping通主機與目標機的GuestOS VxWorks 7,設定主機ip為192.168.1.101:
vx_vip工程中的DEFAULT_BOOT_LINE中的vnic改為gei,重新編譯,重新新增vx_vip的映象至romfs,再將rootos_vip工程中的DEFAULT_BOOT_LINE中的vnic改為gei:
重新編譯,拷貝至目標機,重啟目標機,重複之前的步驟(使用ipAttach命令和ifconfig命令分配物理網口給GuestOS),此時gei0對應網口LAN1,gei1對應網口LAN2。
之後通過點選Terminal右邊的按鈕,選擇Telnet Terminal,在Host欄新增192.168.1.102,點選OK:
目標機和主機中的GuestOS VxWorks 7即可通過網線連線:
在主機的命令列中輸入ping命令,可以ping通目標機GuestOS VxWorks 7:
主機需要關閉防火牆,才可以在GuestOS VxWorks 7中ping通主機:
在GuestOS VxWorks 7下使用ping通主機: