- 更新:2022-04-24 07:24:15
- 首发:2021-03-02 14:26:05
- 教程
- 28648
通过给ESXi宿主机安装USB驱动,可以实现兼容虚拟机无法驱动的硬件。如果虚拟机本身已经兼容了该硬件,可以参考《ESXI+爱快+OpenWRT 使用2.5G USB网卡 RTL8156》设置USB芯片组直通,获得更好的性能体验。
驱动下载地址: https://flings.vmware.com/usb-network-native-driver-for-esxi
注: 根据官网说明,flings是实验性的,不应该用于生产环境。
支持的ESXi版本:6.5.0,6.7.0,7.0.0,7.0.1。建议升级到ESXi 7.0 Update 1
以获得最佳体验(参考《ESXi 7.0.0 升级到 ESXi 7.0 Update 1》)。低版本可能导致重启后USB网卡无法正常工作且无法恢复。
Linux系统参考《Linux 2.5G USB网卡驱动安装RTL8156/8156B》。
支持的网卡型号
- ASIX USB 2.0千兆网络ASIX88178a
- ASIX USB 3.0千兆网络ASIX88179
- Realtek USB 3.0千兆网络RTL8152 / RTL8153
- Aquantia AQC111U
具体支持的型号远不止以上列出的。根据Realtek官网给出的RTL8152 USB NIC驱动,可以看到RTL8156也是被支持的(在绿联2.5G usb网卡实测通过)。可以确定兼容型号:
- RTL8150
- RTL8152 / RTL8152B (10/100M Fast Ethernet > USB 2.0)
- RTL8154 / RTL8154B (10/100/1000M Gigabit Ethernet > USB 2.0)
- RTL8153 / RTL8153B (10/100/1000M Gigabit Ethernet > USB 3.0)
- RTL8156 / RTL8156B (2.5G Gigabit Ethernet > USB 3.0)
- AX8817x
(2021年03月14日,LEDE正式支持RTL8152)
根据上述驱动中的r8152.c
文件部分代码,推测还支持以下型号(未实测)。查询USB网卡实际芯片型号,参见文章《Linux安装无线网卡驱动通用方法》。
/* table of devices that work with this driver */
static const struct usb_device_id rtl8152_table[] = {
/* Realtek */
{REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8050)},
{REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8152)},
{REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8153)},
{REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8155)},
{REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8156)},
/* Microsoft */
{REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07ab)},
{REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07c6)},
/* Samsung */
{REALTEK_USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101)},
/* Lenovo */
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x304f)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3052)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3054)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3057)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3062)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3069)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3082)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3098)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720a)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720b)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720c)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7214)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x721e)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x8153)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0xa359)},
{REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0xa387)},
/* TP-LINK */
{REALTEK_USB_DEVICE(VENDOR_ID_TPLINK, 0x0601)},
/* Nvidia */
{REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff)},
/* LINKSYS */
{REALTEK_USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041)},
{}
};
安装方法
参考https://flings.vmware.com/usb-network-native-driver-for-esxi#instructions进行安装,不再赘述。
需要注意的是:
esxcli software component apply -d
后面必须跟着绝对路径,否则将导致驱动安装失败。esxcli software vib install -d
也一样。- 必须参考
Persisting USB NIC Bindings
进行配置。否则重启后USB网卡无法正常工作。
绑定到OpenWRT
以绑定到LEDE为例,说明当虚拟机不兼容USB网卡的时候,如何通过ESXi驱动该网卡。
添加虚拟交换机
将USB网卡添加到虚拟交换机。
添加端口组
在上一步添加的虚拟交换机的基础上,添加端口组。
新建网络适配器
将虚拟机关机,然后添加网络适配器
,选择对应的端口组。
检查适配器状态
重新打开OpenWRT虚拟机。在lan口可以看到多出来了几个网卡。其中前几个就是虚拟网卡。添加新的网络适配器会打乱OpenWrt的以太网适配器顺序,可以进入SSH通过ifconfig -a
查询Mac地址来识别网卡。
默认虚拟网卡的速率是万兆的。虚拟交换机搭建起了虚拟万兆网卡和USB网卡通讯的桥梁。
其它
需要特别注意的是,如果你有一张或多张网卡,在进行Persisting USB NIC Bindings
设置的时候,需要相应改写代码。如果是参考上述内容进行了虚拟交换机设置,则启动时还需要以代码的方式控制虚拟交换机
和端口组
。参考代码:
if [ "${vusb0_status}" = "Up" ]; then
esxcfg-vswitch -L vusb0 vSwitch1
esxcfg-vswitch -M vusb0 -p "VM USB0" vSwitch1
fi
请注意,无论是官方给出的Persisting USB NIC Bindings
操作,还是上述示例代码,都必须添加到done
代码之前。
暂无内容
感谢回复! Clang 在生成时沿用了 GCC 的版本号标识,我是不是可以理解为Clang 18.1.4生成时使用的就是GCC4.8,所以我后续使用gcc 9.4
gcov
就会有不兼容的问题抱歉,这块我也不太清楚,尝试寻求AI的帮助吧。
我在这个过程中遇到了各种问题- -,现在在UDC core: g_serial: couldn't find an available UDC卡住了,请问大佬有什么解决方案吗,还是说我前置的设置就错了呢,> 这个需求很特殊。是可以的,但是比较困难,需要修改驱动配置。
好思路呀!!
关于hex编辑器,网上没找到特别好用的(小白没办法),最后在vscode上扩展一搜hex,第一个安装一下就可以用vscode进行hex编译了