Wifibox的配置与使用
用wifibox让FreeBSD吃上Linux的驱动

最近几天,我在Redmi Book Pro 14s上安装了FreeBSD 14.1-RELEASE,也算是体验了一把UNIX哲学,但因FreeBSD的驱动太过匮乏了,导致我的安装并不顺利,也就有了这篇文章

bhyve

bhyve,发音为“beehive”,是 FreeBSD 的虚拟机管理程序 / 虚拟机管理器,支持带有“POPCNT”(POPulation Count)功能的 Intel 和 AMD 处理器上的多种客户操作系统,以及在实验中支持 gic0:ARM Generic Interrupt Controller v3.0 功能的 ARM64/aarch64 处理器

bhyve 支持多种存储和网络后端、UEFI、FreeBSD 加载器和 GRUB 启动、PCI 直通 (PPT)、集成 VNC 和 9pfs 服务器以及更多功能

Wifibox

bhyve supports passing of host PCI devices to a virtual machine for its exclusive use of them.

Wifibox则是借助其PCI直通技术,部署了一个 Linux 客户机,借助 PCI 直通技术驱动 FreeBSD 主机系统上的无线网卡

Wifibox的日志位于/var/run/wifibox/appliance/log,可以很方便地观察它的运行状态

配置

我的网卡是RTL8852be,用ifconfig查看只有一个设备,其ip为127.0.0.1,若网卡在FreeBSD下有驱动支持,则需要额外禁用自带驱动

安装 Wifibox

  1. 因为安装需要网络,我们将数据线插入电脑,开启USB网络共享,用ifconfig查看是否识别到设备ue0
1
dhclient ue0 # 获取ip

连接完后安装 Wifibox

1
2
3
4
5
pkg install wifibox-rtw89 wifibox-alpine-rtw89
pkg install sysutils/bhyve+
pkg install gtar patchelf squashfs-tools-ng
pkg install grub2-bhyve socat
pkg install wpa_supplicant
  1. pciconf -lv | less查看设备,找到classnetwork的设备,并将其填写至/usr/local/etc/wifibox/bhyve.conf
1
2
3
4
none1@pci0:1:0:0 clash=....
    vendor = 'Realtek Semiconductor Co., Ltd.'
    device = 'RTL8852BE PCIe 802.11ax ...'
    class  = network

比如我这里显示为0:1:0:0,就将1/0/0填写到/usr/local/etc/wifibox/bhyve.confpassthru=

  1. /etc/rc.conf中写入以下配置启用Wifibox
1
2
wifibox_enable="YES"
ifconfig_wifibox0="SYNCDHCP"

一些教程中会将以下两条配置也添加进/etc/rc.conf,但在我的设备中会导致网络不可用

1
2
background_dhclient_wifibox0="YES"
defaultroute_delay="0"

最后,将以下内容添加到/boot/loader.conf

1
hw.vmm.amdvi.enable="1"
  1. 使用 wpa_passphrase 生成网络配置
1
wpa_passphrase <网络名称> <密码> > /etc/wpa_supplicant.conf

将配置复制到 Wifibox

1
cp /etc/wpa_supplicant.conf /usr/local/etc/wifibox/wpa_supplicant/
  1. 这时候就应该重启了,但在我的网卡上,必须在启动时获取Wifibox0的ip,否则网络将无法工作

    详情见 support Realtek 8852BE wifi card?

根据作者的方法,需要将/sbin/dhclient wifibox0添加进/etc/rc.local以解决此问题

总结

FreeBSD对无线网卡的支持尚不及Linux,通过wifibox能间接让FreeBSD吃上Linux的驱动,若想尝试FreeBSD但苦于没有驱动支持,可以尝试此项目


Last modified on 2024-08-08