无线网络(Wifi)
这篇文章介绍了 WiFi(无线)网卡的设置
安装系统时的WiFi设置
如果在安装 Gentoo 过程中需要设置 WiFi 连接,需要提醒一下的是 Gentoo 最小安装光盘只支持一部分的无线网卡驱动,并且只提供 wpa_cli 命令(不提供 wpa_gui)来设置 WPA/WPA2/Enterprise 等无线连接。
如果 Gentoo 最小安装光盘没有包含您需要设置的网卡驱动或者您需要 wpa_supplicant 的图形界面来设置,可以选择其他的live CD,例如System Rescue CD。需要提醒一下的是当使用非 Gentoo live CD的时候可能需要这些特殊步骤。
硬件检测
如果 Linux(LiveCD/USB)启动并建立 WiFi 连接:
root #
lspci -k
则你的驱动能在相应的以Kernel driver in use:
开头的输出信息中找到。
如果启动的系统没有建立 WiFi 连接,需要从当前系统获取完整的硬件标识符列表。此列表可用于稍后识别正确的驱动程序:
root #
lspci -n
复制以上命令输出的对应的 PCIID 部分。
对于USB网卡来说,过程也是大致相同的。首先拿到系统中所有的USB设备信息:
user $
lsusb
这个命令会生成对应的PCI ID,生产商(manufacturer),make,模型(model),还有USB设备对应的系统的芯片组(chipset)。在所有的信息中,可能芯片组(chipset)是最有用的信息。网上搜索一下 "linuxwireless.org <对应的chipset>" 通常是最找到对应的USB NIC驱动和固件 (firmware) 名字的最快方式。
另外,lshw也能用于获取相应的信息:
root #
lshw | grep -i driver | perl -pe 's/^.*driver=(\S+).*$/$1/g;' | sort -u
这个命令会生成所有驱动信息的列表,无论是PCI网卡还是USB网卡。
内核
确定了驱动程序之后,现在该配置 Linux 内核了。
IEEE 802.11
[*] Networking support ---> [*] Wireless ---> <M> cfg80211 - wireless configuration API [ ] nl80211 testmode command [ ] enable developer warnings [ ] cfg80211 certification onus [*] enable powersave by default [ ] cfg80211 DebugFS entries [ ] support CRDA [ ] cfg80211 wireless extensions compatibility <M> Generic IEEE 802.11 Networking Stack (mac80211) [*] Minstrel [*] Minstrel 802.11n support [ ] Minstrel 802.11ac support Default rate control algorithm (Minstrel) ---> [ ] Enable mac80211 mesh networking (pre-802.11s) support -*- Enable LED triggers [ ] Export mac80211 internals in DebugFS [ ] Trace all mac80211 debug messages [ ] Select mac80211 debugging features ----
Minstrel and its 802.11n support is a rate control algorithm. Some wireless drivers might require it enabled.
In case the wireless configuration API (CONFIG_CFG80211) is built into the kernel (
<*>
) instead as a module (<M>
), the driver won't be able to load regulatory.db from /lib/firmware resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m or add regulatory.db and regulatory.db.p7s (from net-wireless/wireless-regdb) to CONFIG_EXTRA_FIRMWARE.
WEXT
"cfg80211 wireless extensions compatibility" 选项又称 WEXT 支持老旧的 无线工具和iwconfig.
[*] Networking support ---> [*] Wireless ---> [*] cfg80211 wireless extensions compatibility
设备驱动程序
Device Drivers ---> [*] Network device support ---> [*] Wireless LAN ---> Select the driver for your Wifi network device, e.g.: <M> Broadcom 43xx wireless support (mac80211 stack) (b43) [M] Support for 802.11n (N-PHY) devices [M] Support for low-power (LP-PHY) devices [M] Support for HT-PHY (high throughput) devices <M> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) <M> Intel Wireless WiFi DVM Firmware support <M> Intel Wireless WiFi MVM Firmware support <M> Intel Wireless WiFi 4965AGN (iwl4965) <M> Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945) <M> Ralink driver support ---> <M> Ralink rt27xx/rt28xx/rt30xx (USB) support (rt2800usb) -*- Cryptographic API ---> Accelerated Cryptographic Algorithms for CPU (x86) ---> <*> Ciphers: AES, modes: ECB, CBC, CTS, CTR, XTR, XTS, GCM (AES-NI)
In case the driver is built into the kernel (
<*>
) instead of as a module (<M>
), then the firmware needs to be built into the kernel as well.
Do not forget to rebuild the kernel after changing its configuration.
LED支持
要启用不同数据包接收/发送事件的LED触发器,请使用以下选项编译内核:
Device Drivers ---> [*] LED Support ---> <*> LED Class Support [*] Networking support ---> [*] Wireless ---> [*] Enable LED triggers
硬件
除了内核驱动程序,一些芯片组(特别是现在的芯片组)还需要固件。如果需要,请在以下列表中找到它并安装它:
root #
emerge --ask sys-kernel/linux-firmware
WiFi device | Driver | Firmware | Note |
---|---|---|---|
Atheros AR9271 & AR7010 | ath9k_htc | sys-kernel/linux-firmware | |
Broadcom 43xx wireless support | b43 / b43legacy | sys-firmware/b43-firmware | Aircrack-ng ready, most probably the best choice when a bcm43xx device is supported |
Broadcom PCIe and SDIO/USB devices | brcmsmac / brcmfmac | sys-kernel/linux-firmware | Lacks powersaving, LED support and other features |
Broadcom 43xx wireless support | wl | net-wireless/broadcom-sta | Proprietary, no AP or Monitor modes, Comparison of bcm43xx drivers |
Intel PRO/Wireless 2200BG | ipw2200 | sys-firmware/ipw2200-firmware | |
Intel PRO/Wireless 3945ABG/BG | iwlegacy | sys-kernel/linux-firmware | |
Intel Wireless WiFi 4965AGN | iwl4965 | sys-kernel/linux-firmware | |
All other Intel Wireless devices | iwlwifi | sys-kernel/linux-firmware | See the iwlwifi article for detailed instructions. |
Qualcomm Atheros QCA6174 | ath10k_pci | ath10k-firmware | See Qualcomm Atheros QCA6174 |
Ralink/MediaTek USB devices | e.g. rt2800usb | sys-kernel/linux-firmware | |
Realtek RTL8191SE & RTL8192SE | rtl8192se | sys-kernel/linux-firmware | |
Realtek 8723AU/8723BU/8191EU/8192EU/8188EU/8188RU | rtl8xxxu | sys-kernel/linux-firmware | May need the CONFIG_RTL8XXXU_UNTESTED kernel option to find all devices. Only those verified by kernel developers are enabled by default. |
如果驱动所需固件没有在列表中,那么需要您手动去下载并把它放在/lib/firmware下。
网络设备名称
内核提供的网络设备名称列入eth0 或 wlan0 等通常可以通过 /lib/udev/rules.d/80-net-name-slot.rules udev 规则在系统启动时更改参见 dmesg 。
为了保持传统命名,这个规则可以用 /etc/udev/rules.d 目录中用同样命名的空文件覆盖:
root #
touch /etc/udev/rules.d/80-net-name-slot.rules
无线网请求程序
如果用 WPA 或 WPA2 设置无线网络,需要使用 无线网络发起程序类似 wpa_supplicant 或 iwd。若要获取更多在 Gentoo Linux 中配置无线网络的信息,请阅读 Gentoo 手册中的无线网络章节。
测试
使用新内核重新引导后或加载模块后,可以使用以下方法检查设备的可用性:
- Using the /sys 文件系统
- Using the ip 命令
- Using the ifconfig 命令
- Using the iw 命令
/sys 文件系统
通过使用 ls -al 或 tree 命令(由app-text/tree 包提供))列出 /sys/class/net 目录内容来获取设备名称:
user $
tree /sys/class/net
/sys/class/net/ ├── enp2s14 -> ../../devices/pci0000:00/0000:00:1e.0/0000:02:0e.0/net/enp2s14 ├── lo -> ../../devices/virtual/net/lo ├── sit0 -> ../../devices/virtual/net/sit0 └── wlp8s0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:08:00.0/net/wlp8s0
ip命令
要获取设备名称并验证是否检测到无线网卡,执行下面的 ip 命令:
user $
ip addr
3: wlan0: ...
ifconfig 命令
ifconfig 命令是 sys-apps/net-tools 包提供的。使用 ifconfig -a 列出所有检测到的网卡,包括那些尚未启用/尚未活动的网卡:
user $
ifconfig -a
wlan0 ...
网卡可以用下面的方法激活:
root #
ifconfig -v wlan0 up
SIOCSIFFLAGS: Operation not possible due to RF-kill WARNING: at least one error occurred. (-1)
In this example, enabling the wireless card failed as a radio frequency kill state is set (usually to keep power consumption at bay and not connect by accident to a wireless network).
iw命令
如果无线网卡支持 nl80211 stack,net-wireless/iw 软件包提供的 iw 命令可以显示检测到的无线卡:
root #
iw dev
phy#0 Interface wlan0 ifindex 4 type managed
dmesg
检查 dmesg 的输出。
user $
dmesg | grep -i -E 'xx:xx.x|wlan|iwl|80211'
确保
- 用从 lspci 的标识符 (PCIID) 替换了
xx:xx.x
, - 网络接口名称 替换了
wlan
以及 - 用
Kernel driver in use
的名字替换了iwl
。
故障排除
寻找缺失的固件
系统启动时,内核将尝试探测适用于每张卡的固件。可以通过搜索当前启动的 dmesg 或 journalctl(systemd)输出来发现固件。
user $
journalctl -b 0 --dmesg | grep -i firmware
Oct 05 14:51:09 maffbook kernel: Spectre V2 : Enabling Restricted Speculation for firmware calls Oct 05 14:51:09 maffbook kernel: ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored Oct 05 14:51:09 maffbook kernel: sgx: [Firmware Bug]: Unable to map EPC section to online node. Fallback to the NUMA node 0. Oct 05 14:51:09 maffbook kernel: i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/kbl_dmc_ver1_04.bin (v1.4) Oct 05 14:51:09 maffbook kernel: ACPI: video: [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS Oct 05 14:51:09 maffbook kernel: iwlwifi 0000:00:14.3: loaded firmware version 46.6b541b68.0 9000-pu-b0-jf-b0-46.ucode op_mode iwlmvm Oct 05 14:51:09 maffbook kernel: psmouse serio1: elantech: assuming hardware version 4 (with firmware version 0x5f2001) Oct 05 14:51:09 maffbook kernel: Bluetooth: hci0: Firmware revision 0.1 build 6 week 12 2021 Oct 06 17:26:26 maffbook kernel: Bluetooth: hci0: Minimum firmware build 1 week 10 2014 Oct 06 17:26:26 maffbook kernel: Bluetooth: hci0: Found device firmware: intel/ibt-17-16-1.sfi Oct 06 17:26:28 maffbook kernel: Bluetooth: hci0: Waiting for firmware download to complete Oct 06 17:26:28 maffbook kernel: Bluetooth: hci0: Firmware loaded in 1484394 usecs Oct 06 17:26:28 maffbook kernel: Bluetooth: hci0: Firmware revision 0.1 build 6 week 12 2021
Wifi 适配器找不到并且无法连接 5 GHz 网络
某些 WPA 或 WPA2 的网络可能仍使用传统的 TKIP 协议而不是 AES 进行连接。尝试使用 USE=tkip 安装 net-wireless/wpa_supplicant 然后重启系统。
论坛帖子
- 论坛主题:无线局域网无法从接入点获取 ip 大概解释 169.254.x.x (链路本地地址)是错误的 IP 地址
- 论坛主题:iwlwifi 升级到 3.17.0 后加载失败
- 论坛主题:我的网络在哪里 !?
- 论坛主题:全局更新后有 BCM4331 问题的 Broadcom-sta
- 论坛主题:USB nano 0bda:b812 RTL88x2bu [AC1200] 需要驱动
另请参阅
- 无线网络
- AC1200 Wireless Adapters
- Iproute2 — a tool developed to unify network interface configuration, routing, and tunneling for Linux systems.
- Iwlwifi — Intel's current wireless chips的无线驱动
- Qualcomm Atheros QCA6174 — a 802.11ac Wireless Network Adapter which is used in some laptops.