1. 程式人生 > >風河虛擬化元件使用說明(18)—— 分配真實乙太網介面給虛擬機器(GuestOS VxWorks 7)

風河虛擬化元件使用說明(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]

/[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:0c00)@0

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通主機: