FreeBSD无线网络

备注

本文实践在 MacBook Pro 15” Late 2013 进行,使用的无线网卡芯片是 Broadcom BCM4360 。这个无线芯片可以在Linux上工作,但是FreeBSD目前无法支持。我做了花了一个晚上时间折腾没有解决,由于改为使用 Apple ARM架构芯片M1 Pro (公司配备),所以暂缓探索。

检查硬件

  • 执行 pciconf 命令检查硬件:

    pciconf -lv
    

显示:

none1@pci0:3:0:0:    class=0x028000 rev=0x03 hdr=0x00 vendor=0x14e4 device=0x43a0 subvendor=0x106b subdevice=0x0134
    vendor     = 'Broadcom Inc. and subsidiaries'
    device     = 'BCM4360 802.11ac Wireless Network Adapter'
    class      = network

bwn 驱动

bwn 无线网络驱动支持Broadcom BCM43xx ,并且支持 stationmonitor 模式操作。这个 bwn 驱动要求在其工作前首先加载firmware。所以需要先编译安装 ports/net/bwn-firmware-kmod 这个port。

bwn 驱动支持的 Broadcom BCM43xx 无线设备包括:

bwn支持的Broadcom BCM43xx 无线设备列表

网卡

芯片

总线

无线标准

Apple Airport Extreme

BCM4318

PCI

b/g

ASUS WL-138g

BCM4318

PCI

b/g

Buffalo WLI-CB-G54S

BCM4318

CardBus

b/g

Dell Wireless 1390

BCM4311

Mini PCI

b/g

Dell Wireless 1470

BCM4318

Mini PCI

b/g

Dell Truemobile 1400

BCM4309

Mini PCI

b/g

HP Compaq 6715b

BCM4312

PCI

b/g

HP nx6125

BCM4319

PCI

b/g

Linksys WPC54G Ver 3

BCM4318

CardBus

b/g

Linksys WPC54GS Ver 2

BCM4318

CardBus

b/g

US Robotics 5411

BCM4318

CardBus

b/g

要将这个 bwn 驱动编译进你和,则要在内核配置文件中加入以下行:

device bwn
device bhnd
device bhndb
device bhndb_pci
device bcma
device siba
device gpio
device wlan
device wlan_amrr
device firmware

要在启动时加载 bwn 驱动模块,则在 loader.conf 中添加:

if_bwn_load="YES"

编译安装bwn firmware

这里如果系统没有安装 FreeBSD内核源代码 就会出现以下报错:

make[1]: "/usr/share/mk/bsd.sysdir.mk" line 15: Unable to locate the kernel source tree. Set SYSDIR to override.

make[1]: stopped in /usr/ports/net/bwn-firmware-kmod/work/bwn-firmware-kmod-0.1.2/bg/v4
*** Error code 1

则先安装 FreeBSD内核源代码 然后再次执行 make

  • 加载内核模块:

    sudo kldload if_bwn
    sudo kldload bwn_v4_ucode
    sudo kldload bwn_v4_lp_ucode
    

对于要在系统启动时自动加载上述内核模块,则编辑 /boot/bootloader.conf 添加:

if_bwn_load="YES"
bwn_v4_ucode_load="YES"
bwn_v4_lp_ucode_load="YES"
  • 在加载内核模块完成后,就可以通过以下命令创建无线网卡设备:

    ifconfig wlan0 create wlandev bwn0
    

报错:

ifconfig: SIOCIFCREATE2: Device not configured

原因是前面加载无线驱动和firmware并没有检测到 /dev/bwn0 设备。

警告

很不幸,FreeBSD今天还是没有支持 BCM4360 ,从 Macbook Air 2017 : Need Help With Proprietary Firmware/Driver 可以看到实际上并没有解决驱动MacBook Air 2017内置的BCM4360设备。这个讨论最后建议使用USB接口的外接无线网卡,或者使用类似 PQI Air Pen Express Wireless Router 这样的设备。

不过,也提出了一个思路: 使用手机的USB Tethering功能,将手机的无线网卡模拟成以太网卡,只要将手机USB连接以后,激活 USB tethring ,此时在FreeBSD中就会看到一个USB无线网卡设备,就能够直接使用没有任何障碍: 通过手机USB tethering实现FreeBSD无线网络

参考 First FreeBSD experience: something with Wi-Fi and Apple hardware 详细说明了如何编译安装firmware,步骤和我上文相似,但是最终也没有解决BCM43602设备驱动

以下命令没有执行,原因是上文 bwn 驱动并不支持 BCM4360 ,不过记录备用:

sudo ifconfig wlan0 up # Laptop WiFi LED light should turn on
sudo ifconfig wlan0 scan # You should see your wireless router SSID
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
sudo ifconfig wlan0 list sta
sudo dhclient wlan0

警告

我这里失败,加载驱动以及firmware之后并没有看到网卡设备

我仔细核对 FreeBSD Broadcom Wi-Fi Improvements bwn 说明,原来支持的 BCM43xx 并没有包括我的 MacBook Pro 的无线网卡芯片 BCM4360 。实际上,应该使用 bhnd 驱动…

重新来过

bhnd 驱动安装

要加载驱动模块,在 /boot/loader.conf 中添加:

bhnd_load="YES"

我参考 BCM4331 802.11n seems tantalisingly close on mid-2011 Mac mini, using bhnd and if_bwn_pci.ko on FreeBSD 11.2-BETA1 ,配置 /boot/loader.conf

bhnd_load="YES"
bwn_v4_ucode="YES"
bwn_v4_n_ucode="YES"
#if_bwn_pci_load="YES"
if_bwn_load="YES"
wlan_wep_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

但是,似乎模块都加载了也看不到设备

备注

由于拿到了公司配备的 Apple ARM架构芯片M1 Pro ,暂时没有使用FreeBSD作为全功能桌面的个人需求,所以暂缓实践。后续有时间和机会再来尝试。

参考