第 14.2 节 WiFi

技巧

类似 plasma-nm/networkmanager 的图形化网络配置工具:

pkg install net-mgmt/networkmgr

或者:

# cd /usr/ports/net-mgmt/networkmgr/ 
# make install clean

通用网卡驱动

运行 sysctl net.wlan.devices,他会告诉你的无线网卡驱动,应类似如下内容:

root@ykla:~ # sysctl net.wlan.devices
net.wlan.devices: rtwn0

如果输出中冒号 : 后边没有东西,那就是识别不了。请你更换无线网卡。

接下来,创建 wlan0rtwn0 为上边冒号 : 后边的输出,本例中为 rtwn0,请改成你自己的,照抄没用(除非你也使用 COMFAST CF-912AC 1200M 802.11AC)。

# ifconfig wlan0 create wlandev rtwn0

观察 ifconfig 输出(已省略以太网卡和 lo0):

root@ykla:~ # ifconfig

……此处省略一部分……

wlan0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=200001<RXCSUM,RXCSUM_IPV6>
	ether 20:0d:b0:c4:ab:59
	groups: wlan
	ssid "" channel 1 (2412 MHz 11b)
	regdomain FCC country US authmode OPEN privacy OFF txpower 30 bmiss 7
	scanvalid 60 wme bintval 0
	parent interface: rtwn0
	media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
	status: no carrier
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

应该出现一个 wlan0 才对。

扫描 WiFi:

# ifconfig wlan0 up scan
root@ykla:~ # ifconfig wlan0 up scan
SSID/MESH ID                      BSSID              CHAN RATE    S:N     INT CAPS

……此处省略一部分……

test_5G                           50:d6:c5:93:d7:64   36   54M  -78:-95   100 EP   APCHANREP WPA RSN WPS BSSLOAD HTCAP VHTCAP VHTOPMODE WME

……此处省略一部分……

设置要连接的 WiFi(如果没有密码的话):

# ifconfig wlan0 ssid test_5G # test_5G 为我测试用的 WiFi 名字(SSID)

如果扫描不出来,让你设置 FCC 的时候,请选择 No

重启网络服务以接入 WiFi:

# service netif restart
# dhclient wlan0

如果有密码:连接加密网络

创建 /etc/wpa_supplicant.conf

network={
ssid="test_5G"
psk="freebsdcn"
}

以上:ssid 是 WiFi 名字,psk 是 WiFi 密码。

rc.conf 里面加入或修改相关条目如下:

wlans_rtwn0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP"
create_args_wlan0="country CN regdomain NONE"

重启系统

# reboot

查看连接情况,可以看到已经连接成功(IP 为 192.168.31.178):

wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=200001<RXCSUM,RXCSUM_IPV6>
	ether 11:7c:e8:c4:ab:58
	inet 192.168.31.178 netmask 0xffffff00 broadcast 192.168.31.255
	groups: wlan
	ssid test_5G channel 36 (5180 MHz 11a ht/20) bssid 50:d6:c5:93:d7:64
	regdomain NONE country CN authmode WPA2/802.11i privacy ON
	deftxkey UNDEF TKIP 2:128-bit txpower 17 bmiss 7 mcastrate 6
	mgmtrate 6 scanvalid 60 ht20 ampdulimit 64k ampdudensity 4 shortgi
	-stbc -uapsd wme roaming MANUAL
	parent interface: rtwn0
	media: IEEE 802.11 Wireless Ethernet MCS mode 11na
	status: associated
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

英特尔网卡驱动

以下部分适用于 FreeBSD 13.1。13.1 已经可以正常加载使用了该驱动了。

iwlwifi 驱动适用于AC 8265、AC 9260、AC 9560、AX200、AX201、AX210、AX 211 以及旧的 iwm 驱动所包含的网卡,见 英特尔®无线适配器的 Linux* 支持

将以下部分写入/etc/rc.conf

devmatch_blocklist="iwm"  # 如果依然加载 iwm,换成 devmatch_blocklist="if_iwm" 试一下
wlans_iwlwifi0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP"

创建 /etc/wpa_supplicant.conf

network={
ssid="WIFI 名字(SSID)"
psk="WIFI 密码"
}

先加载驱动看一下:

# kldload if_iwlwifi
# ifconfig wlan0 create wlandev iwlwifi0
# /etc/rc.d/netif start  wlan0

故障排除:wiki/WiFi/Iwlwifi

博通(broadcom)网卡驱动

FreeBSD 自身的博通网卡驱动一共有两种:bwn 和 bwi ,其中 bwi 是用于较旧型号的,bwn 是用于较新型号的。两者的支持范围有所重叠,而 bwn 对硬件的支持要更好。

那么,应该使用哪种驱动呢?请参考 FreeBSD Broadcom Wi-Fi Improvements

示例:BCM4301 、 BCM4303 、 BCM4306 rev 2

经过判断,只能使用 bwi 驱动。

首先,在 /boot/loader.conf 中添加:

if_bwi_load="YES"

然后使用 ports 安装固件(未提供二进制包,下同):

# cd /usr/ports/net/bwi-firmware-kmod/
# make install clean

可以先使用 USB 手机或者以太网先共享网络进行安装。也可以先把所需依赖下好放入目录。

/etc/rc.conf 添加:

wlans_bwi0="wlan0"

重启即可。

示例:配置 bwn 驱动

安装固件:

# cd /usr/ports/net/bwn-firmware-kmod/
# make install clean

配置 /boot/loader.conf,添加:

if_bwn_load="YES"

配置 /etc/rc.conf,添加:

wlans_bwn0="wlan0"

注意

一些在 FreeBSD Broadcom Wi-Fi Improvements 列出的型号带有 $ 注释:The optional bwn(4) PHY driver is derived from b43 GPL code, and must be explicitly enabled. 即需要一些基于 GPL 协议的代码。众所周知 FreeBSD 基本系统包括内核都是去 GNU 化的,因此需要重新编译内核来支持该协议。

# cd /usr/src/ # 此处是内核源码安装目录。
# cd sys/amd64/conf/ # 注意架构!
# cp GENERIC MYKERNEL #重命名便于识别
# echo "options BWN_GPL_PHY" >> MYKERNEL #添加内核参数
# cd /usr/src
# make -j4 buildkernel KERNCONF=MYKERNEL # -j 后边的参数为  CPU 核心数,下同
# make -j4 installkernel KERNCONF=MYKERNEL

/boot/loader.conf 中添加:

hw.bwn_pci.preferred="1"
if_bwn_pci_load="YES"
bwn_v4_ucode_load="YES"
bwn_v4_n_ucode_load="YES"
bwn_v4_lp_ucode_load="YES"

然后重启。ifconfig 观察有无 wlan0,然后按照第一部分教程配置即可。

参考文献:

杂项

如果连不上或者搜不到调试信道,尝试将 WiFi 区域码选 NONE,然后选 China

即在 /etc/rc.conf 中写入:

create_args_wlan0="country CN regdomain NONE"

断开 WiFi

# ifconfig wlan0 down

WPA 验证:

# ifconfig_wlan0="WPA inet 192.168.1.100 netmask 255.255.255.0"

设置静态 ip:

# ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0

开启无线热点

先确认下你的网卡是否支持 hostap:

root@ykla:~ # ifconfig wlan0 list caps
drivercaps=591c541<STA,FF,IBSS,HOSTAP,SHSLOT,SHPREAMBLE,MONITOR,WPA1,WPA2,WME>
cryptocaps=b<WEP,TKIP,AES_CCM>
htcaps=207002d<LDPC,SHORTGI20>

可以看到我这张卡是支持的。

先销毁

# ifconfig wlan0 destroy

再创建

# ifconfig wlan0 create wlandev rtwn0 wlanmode hostap
# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1

最后更新于

FreeBSD 中文社区 2024