风河虚拟化组件使用说明(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: /mainbus@0

ioApicIntrCtlr0: /mainbus@0/ioApicIntrCtlr@1

loApicIntrCtlr0: /mainbus@0/loApicIntrCtlr@2

dynamicIntr0: /mainbus@0/loApicIntrCtlr@2/dynamicIntr@1

acpiBus0: /mainbus@0/acpiBus@3

fdtBus0: /mainbus@0/fdtBus@4

fdtIntCtlr0: /mainbus@0/fdtBus@4/interrupt-controller@58

PNP0A030: /mainbus@0/fdtBus@4/PNP0A03@a4

pci device(8086:0c00)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:0c00)@0

pci device(8086:0412)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:0412)@2

pci device(8086:0c0c)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:0c0c)@3

pci device(8086:8c31)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c31)@14

pci device(8086:8c3a)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c3a)@16

pci device(8086:8c2d)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c2d)@1a

pci device(8086:8c20)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c20)@1b

pcib0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c

gei0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c/pci device(8086:1539)@0

genericPhy0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c/pci device(8086:1539)@0/ethernet-phy@1

pcib1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c,1

gei1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c,1/pci device(8086:1539)@0

genericPhy1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c,1/pci device(8086:1539)@0/ethernet-phy@1

pcib2: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c,4

pcib3: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c,4/pci bridge@0

pci device(8086:8c26)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c26)@1d

pcib4: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e

virtShmem0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1d25:0004)@0

virtShmem1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1d25:0004)@1

virtShmem2: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1d25:0004)@2

virtShmem3: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1d25:0004)@3

virtioBlk0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@4

virtioBlk1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@5

virtioBlk2: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@6

virtioBlk3: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@7

virtioBlk4: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@8

virtioBlk5: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@9

virtioBlk6: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@a

virtioBlk7: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@b

virtioBlk8: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@c

virtioBlk9: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@d

virtioBlk10: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@e

virtioBlk11: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@f

virtioBlk12: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@10

virtioBlk13: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@11

virtioBlk14: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@12

virtioBlk15: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1001)@13

virtioSio0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1003)@14

virtioSio1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1003)@15

virtioSio2: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1003)@16

virtioSio3: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1e/pci device(1af4:1003)@17

pci device(8086:8c5c)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c5c)@1f

pci device(8086:8c02)0: /mainbus@0/fdtBus@4/PNP0A03@a4/pci device(8086:8c02)@1f,2

loApicTimer0: /mainbus@0/fdtBus@4/loApicTimer@fee00000

PNP05010: /mainbus@0/fdtBus@4/serial0@3f8

vnic0: /mainbus@0/fdtBus@4/vnic@0

genericPhy2: /mainbus@0/fdtBus@4/vnic@0/ethernet-phy@1

virtBus0: /mainbus@0/virtBus@5

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: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c/pci device(8086:1539)@0

gei1: /mainbus@0/fdtBus@4/PNP0A03@a4/pci bridge@1c,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通主机:

猜你喜欢

转载自blog.csdn.net/wofreeo/article/details/83714295