Iwlwifi
iwlwifi — это драйвер для современных беспроводных чипов Intel.
Ядро
Чтобы заставить его работать, нужно сделать небольшую настройку ядра. Драйвер поддерживает 802.11a/b/g/n/ac (в зависимости от устройства), поэтому IEEE 802.11 должно быть включено.
IEEE 802.11
Драйвер устройства iwlwifi
Используйте этот драйвер для современных беспроводных чипов Intel. Установите как модуль, как показано <M>
. Также необходим DVM или MVM вариант согласно записи в колонке Module в таблице firmware.
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
[*] Intel 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>
), firmware необходимо собрать также непосредственно в ядре. Смотрите раздел если предпочтительней собирать в ядро.
После внесения изменений в конфигурацию ядра не забудьте перекомпилировать ядро.
После перекомпиляции ядра и перезагрузки с использованием нового ядра, выбранные параметры можно проверить следующим образом:
user $
zgrep 'IWLWIFI\|IWLDVM\|IWLMVM' /proc/config.gz
Firmware
Необходимые firmware для конкретных устройств перечислены в этой таблице. Они доступны в пакетах sys-kernel/linux-firmware, а также, для конкретного устройства, в пакетах sys-firmware/iwlxxxx-*ucode.
Upstream Intel instructions recommend[1] adding all iwlwifi ucode to the kernel image. This is recommended for convenience, however it will bloat the kernel slightly.
root #
emerge --ask sys-kernel/linux-firmware
Если предпочтительней собирать в ядро
В случае если драйвер будет компилироваться в ядре (<*>
), а не как модуль (<M>
), прошивку необходимо также собирать в ядре.
Device Drivers --->
Generic Driver Options --->
Firmware loader --->
-*- Firmware loading facility
(iwlwifi-xxxx.ucode) Build named firmware blobs into the kernel binary
(/lib/firmware) Firmware blobs root directory
[ ] Enable the firmware sysfs fallback mechanism
В этом примере замените iwlwifi-xxxx.ucode
на подходящее имя firmware. Уделите некоторое внимание для FW_LOADER_USER_HELPER_FALLBACK.
Optional: savedconfig
The savedconfig
USE flag could be set for Linux firmware in order to avoid unneeded stuff in /lib/firmware/.
As for example the Intel® Centrino® Advanced-N 6205 needs iwlwifi-6000g2a-ucode while anything else may be commented out or deleted.
iwlwifi-6000g2a-5.ucode
iwlwifi-6000g2a-6.ucode
In order to not lose these settings on next firmware update the version number needs to be removed:
user $
cd /etc/portage/savedconfig/sys-kernel
root #
mv linux-firmware{-20200316,}
Имена сетевых устройств
This section is obsolete. See Udev#Optional: Disable_or_override_predictable_network_interface_naming for updated instructions.
Имена сетевых устройств, такие как eth0 или wlan0 и так далее, как предусмотрено ядром, обычно меняются во время загрузки системы (смотрите dmesg) с помощью /lib/udev/rules.d/80-net-name-slot.rules правила udev.
Чтобы сохранить классическое именование это правило может быть перезаписано пустым файлом с таким же именем в каталоге /etc/udev/rules.d:
root #
touch /etc/udev/rules.d/80-net-name-slot.rules
Тестирование
После обновления ядра и перезагрузки или после загрузки модулей, устройства можно проверить на доступность с помощью следующих методов:
- используя файловую систему /sys
- используя команду ip
- используя команду ifconfig
- используя команду iw
Файловая система /sys
Узнать имя устройства можно с помощью просмотра каталога /sys/class/net используя ls -al или команду tree (из пакета app-text/tree):
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)
В этом примере включить беспроводную карту не удалось, поскольку был установлен radio frequency kill state (RF-kill). Как правило, он устанавливается в целях энергосбережения и избежания случайного соединения с беспроводными сетями.
Команда iw
Если драйвер беспроводной сетевой карты поддерживает стэк nl80211, команда iw, которая есть в паете net-wireless/iw, может отобразить обнаруженную беспроводную сетевую карту:
root #
iw dev
phy#0 Interface wlan0 ifindex 4 type managed
modprobe и modinfo
modprobe не должен возвращать что-либо:
root #
modprobe iwlwifi
Большую часть информации о драйвере можно получить с помощью modinfo iwlwifi:
user $
modinfo iwlwifi
lspci
lspci должен показать iwlwifi
в Kernel driver in use:
и Kernel modules:
.
root #
lspci -nnkv | sed -n '/Network/,/^$/p'
03:00.0 Network controller [0280]: Intel Corporation Centrino Advanced-N 6205 [Taylor Peak] [8086:0082] (rev 34) Subsystem: Intel Corporation Centrino Advanced-N 6205 AGN [8086:1321] Flags: bus master, fast devsel, latency 0, IRQ 33 Memory at f7d00000 (64-bit, non-prefetchable) [size=8K] Capabilities: [c8] Power Management version 3 Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+ Capabilities: [e0] Express Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Capabilities: [140] Device Serial Number confidential Kernel driver in use: iwlwifi Kernel modules: iwlwifi
Идентификатор xx:xx.x
будет весьма полезен при поиске специфичной информации для этого устройства в выводе dmesg.
dmesg
Проверьте вывод dmesg. Замените 03:00.0
на идентификатор из lspci, а wlp
на имя сетевого устройства.
user $
dmesg | grep -i -E '03:00.0|wlp|iwl|80211'
[ 0.251986] pci 0000:03:00.0: [8086:0082] type 00 class 0x028000 [ 0.252146] pci 0000:03:00.0: reg 0x10: [mem 0xf7d00000-0xf7d01fff 64bit] [ 0.252863] pci 0000:03:00.0: PME# supported from D0 D3hot D3cold [ 3.621978] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 3.629362] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' [ 3.634986] iwlwifi 0000:03:00.0: enabling device (0100 -> 0102) [ 3.635111] iwlwifi 0000:03:00.0: can't disable ASPM; OS doesn't have ASPM control [ 3.644480] iwlwifi 0000:03:00.0: loaded firmware version 18.168.6.1 op_mode iwldvm [ 3.659269] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG disabled [ 3.659270] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS disabled [ 3.659271] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING enabled [ 3.659273] iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R) Advanced-N 6205 AGN, REV=0xB0 [ 3.694543] ieee80211 phy0: Selected rate control algorithm 'iwl-agn-rs' [ 3.695812] iwlwifi 0000:03:00.0 wlp3s0: renamed from wlan0 [ 5.060307] iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0 [ 5.352853] iwlwifi 0000:03:00.0: Radio type=0x1-0x2-0x0 [ 5.431804] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready [ 8.908518] wlp3s0: authenticate with <my WLAN AP> [ 8.912238] wlp3s0: send auth to <my WLAN AP> (try 1/3) [ 9.016437] wlp3s0: send auth to <my WLAN AP> (try 2/3) [ 9.120455] wlp3s0: send auth to <my WLAN AP> (try 3/3) [ 9.125773] wlp3s0: authenticated [ 9.126019] wlp3s0: waiting for beacon from <my WLAN AP> [ 9.148418] wlp3s0: associate with <my WLAN AP> (try 1/3) [ 9.191232] wlp3s0: RX AssocResp from <my WLAN AP> (capab=0x1431 status=0 aid=2) [ 9.211860] wlp3s0: associated [ 9.242532] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready [ 9.249856] wlp3s0: Limiting TX power to 20 (20 - 0) dBm as advertised by <my WLAN AP>
Устранение проблем
Ядро не загружается
Проверьте, что загружено правильное ядро. Это можно сделать (зависит от параметра IKCONFIG) так:
user $
zgrep CONFIG_IWL /proc/config.gz
Проблемы с прошивкой
- Для систем использующих udev или systemd надо настроить ядро для загрузки бинарного блоба (binary blob). В случае firmware для беспроводной карты это firmware, который нуждается в загрузки. Больше информации о конфигурации ядра для такой ситуации можно найти в следующей ветке форума Gentoo: FW_LOADER_USER_HELPER_FALLBACK.
Беспроводная сетевая карта не работает
- Intel Corporation Wireless 8260 (rev 3a) can't access the RSA semaphore it is write protected
Device Drivers --->
[*] PCI support --->
[*] Network device support --->
[*] Message Signaled Interrupts (MSI and MSI-X)
No internet connection
If you can connect to an access point, but still can't connect to any server or get any connection to the internet it might be worth a try to disable 802.11n and/or enable software encryption. You can pass the 11n_disable=1
or 11n_disable=8
and/or swcrypto=1
option to the iwlwifi
module. In order to pass the option automatically on module load create the file /etc/modprobe.d/iwlwifi.conf as follows:
options iwlwifi 11n_disable=1 swcrypto=1
In newer kernels, inspected as of 5.3.7, setting 11n_disable=1 (or masked with 0x01) will result in 802.11ac being disabled. This will limit the device to a maximum of 54Mbit throughput.
"Microcode SW error detected. Restarting 0x0" message in kernel logs
root #
dmesg | grep iwlwifi
(... redacted ...) [ 5711.326985] iwlwifi 0000:28:00.0: Microcode SW error detected. Restarting 0x0. [ 5711.326987] iwlwifi 0000:28:00.0: Start IWL Error Log Dump: [ 5711.326990] iwlwifi 0000:28:00.0: Transport status: 0x0000004A, valid: 6 [ 5711.326992] iwlwifi 0000:28:00.0: Loaded firmware version: 71.058653f6.0 ty-a0-gf-a0-71.ucode [ 5711.326993] iwlwifi 0000:28:00.0: 0x00000071 | NMI_INTERRUPT_UMAC_FATAL [ 5711.326995] iwlwifi 0000:28:00.0: 0x00008210 | trm_hw_status0 [ 5711.326998] iwlwifi 0000:28:00.0: 0x00000000 | trm_hw_status1 [ 5711.327001] iwlwifi 0000:28:00.0: 0x004DAEA2 | branchlink2 [ 5711.327003] iwlwifi 0000:28:00.0: 0x004D9974 | interruptlink1 [ 5711.327004] iwlwifi 0000:28:00.0: 0x004D9974 | interruptlink2 [ 5711.327006] iwlwifi 0000:28:00.0: 0x0000C314 | data1 [ 5711.327008] iwlwifi 0000:28:00.0: 0x00000010 | data2 [ 5711.327009] iwlwifi 0000:28:00.0: 0x00000000 | data3 (... redacted ...) [ 5711.329587] iwlwifi 0000:28:00.0: ieee80211 phy0: Hardware restart was requested
This indicates that a severe error has been encountered by the WiFi adapter's micro-controller which led it to be reset. Consequences might be network drop outs and/and severe slow downs even after the connection to the AP has been restored. The root cause might be difficult to point out (platform own radio noise/buggy firmware/etc) however one of the very first things to try, even if the power management has been disabled for the iwlwifi module, is to prevent the WiFi adapter PCIe link to go in power save mode. This is accomplished by changing the power_scheme
value used by the iwlmvm module to 1 (active):
options iwlmvm power_scheme=1
Amongst additional countermeasures suggested on https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi disabling 40 MHz channels usage on the 2.4GHz band might also help:
options cfg80211 cfg80211_disable_40mhz_24ghz=Y
Смотрите также
- Handbook:AMD64/Networking/Wireless
- Wifi — describes the setup of a Wi-Fi (wireless) network device.
- Wpa_supplicant — Wi-Fi-проситель
- Network management using DHCPCD — повествует о том, как использовать dhcpcd в качестве менеджера сети.
- Netifrc — Gentoo's default framework for configuring and managing network interfaces on systems running OpenRC.
- Troubleshooting