Iwlwifi
iwlwifi is the wireless driver for Intel's current wireless chips.
Kernel[edit | edit source]
To make it work some kernel configuration is needed. The driver supports 802.11a/b/g/n/ac (depending on the device), so IEEE 802.11 should be enabled.
IEEE 802.11[edit | edit source]
Activate at least cfg80211 and mac80211.
[*] 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 *** Some wireless drivers require a rate control algorithm *** [ ] 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 ----
iwlwifi brings its own rate control algorithm iwl-agn-rs, see #dmesg.
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 to CONFIG_EXTRA_FIRMWARE.
Device driver iwlwifi[edit | edit source]
Use this driver for Intel's current wireless chips. Set it as a module <M>
as shown here. Also the correct DVM or MVM option according to the Module column of the firmware table is needed.
Device Drivers ---> [*] Network device support ---> --- Network device support [*] Wireless LAN ---> --- Wireless LAN [ ] mac80211-based legacy WDS support [ ] ADMtek devices [ ] Atheros/Qualcomm devices [ ] Atmel devices [ ] Broadcom devices [ ] Cisco devices [*] Intel devices < > Intel PRO/Wireless 2100 Network Connection < > Intel PRO/Wireless 2200BG and 2915ABG Network Connection < > Intel Wireless WiFi 4965AGN (iwl4965) < > Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945) <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 Debugging Options ---> [ ] Intersil devices [ ] Marvell devices [ ] MediaTek devices [ ] Ralink devices [ ] Realtek devices [ ] Redpine Signals Inc devices [ ] STMicroelectronics devices [ ] Texas Instrument devices [ ] ZyDAS devices [ ] Quantenna wireless cards support < > Simulated radio testing tool for mac80211 < > Wireless RNDIS USB support
In case the driver is built into the kernel (
<*>
) instead as a module (<M>
), also the firmware needs to be built into the kernel. See the section When using built-in configuration.
After changes on kernel configuration do not forget to rebuild the kernel.
After rebuilding the kernel and rebooting with this kernel, the selected options can be verified as follows:
Support for the /proc/config.gz pseudo-file can be enabled through the Kernel/IKCONFIG support feature.
user $
zgrep 'IWLWIFI\|IWLDVM\|IWLMVM' /proc/config.gz
Firmware[edit | edit source]
Additional firmware for the individual device is needed as listed in this table. It is available in sys-kernel/linux-firmware. In case it's not in linux-firmware it might be found in device-specific sys-firmware/iwlxxxx-*ucode packages.
root #
emerge --ask sys-kernel/linux-firmware
When using built-in configuration[edit | edit source]
In case the driver is built into the kernel (<*>
) instead as a module (<M>
), also the firmware needs to be built into the kernel.
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
In this case replace iwlwifi-xxxx.ucode
with the exact firmware name. Some attention seems to be needed for FW_LOADER_USER_HELPER_FALLBACK.
Optional: savedconfig[edit | edit source]
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.
/etc/portage/savedconfig/sys-kernel/linux-firmware
Take care that version number is removediwlwifi-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,}
Network device names[edit | edit source]
Network device names such as eth0 or wlan0 as provided by the kernel are normally changed on system boot (see dmesg) by the /lib/udev/rules.d/80-net-name-slot.rules udev rule.
To keep the classic naming this rule can be overwritten with an equally named empty file in the /etc/udev/rules.d directory:
root #
touch /etc/udev/rules.d/80-net-name-slot.rules
Testing[edit | edit source]
After a reboot with the new kernel or after loading the modules, the device can be checked for availability by using following methods:
- Using the /sys file system
- Using the ip command
- Using the ifconfig command
- Using the iw command
/sys file system[edit | edit source]
Get the device name by listing the /sys/class/net directory contents using ls -al or the tree command (provided by the app-text/tree package):
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 command[edit | edit source]
To obtain the device name and verify that the wireless card is detected, execute the following ip command:
user $
ip addr
3: wlan0: ...
ifconfig command[edit | edit source]
The ifconfig command is provided through the sys-apps/net-tools package. Use ifconfig -a to list all detected network cards, even those that are not enabled/active yet:
user $
ifconfig -a
wlan0 ...
A network card can be activated as follows:
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 command[edit | edit source]
If the wireless network card driver supports the nl80211 stack, then the iw command as offered by the net-wireless/iw package can show the detected wireless cards:
root #
iw dev
phy#0 Interface wlan0 ifindex 4 type managed
modprobe and modinfo[edit | edit source]
modprobe should return nothing:
root #
modprobe iwlwifi
Most information about the driver module can be obtained by modinfo iwlwifi:
user $
modinfo iwlwifi
lspci[edit | edit source]
lspci should display iwlwifi
for both Kernel driver in use:
and 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
The xx:xx.x
identifier will be useful for grepping specific information from dmesg.
dmesg[edit | edit source]
Check the output of dmesg. Replace 03:00.0
with the identifier from lspci and wlp
with the network interface name.
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>
Troubleshooting[edit | edit source]
Kernel not loaded[edit | edit source]
Check if the correct kernel is loaded. This can be accomplished as follows (depends on the IKCONFIG feature):
user $
zgrep CONFIG_IWL /proc/config.gz
Firmware issues[edit | edit source]
- For systems using udev or systemd, it is imperative to configure the kernel to load binary blobs. In this case the wireless card's firmware is the firmware that needs loaded. More information on configuring the kernel in this manner can be found in the following thread on the Gentoo forums: FW_LOADER_USER_HELPER_FALLBACK.
Wireless not working[edit | edit source]
- Intel Corporation Wireless 8260 (rev 3a) can't access the RSA semaphore it is write protected
- Intel Wireless-AC 9560 iwlwifi not working kernel 5.4.0
- Linux kernel 5.6.0 iwlwifi bug
- Intel Corporation Wi-Fi 6 AX200 (rev 1a). If getting dmesg message pci_enable_msi failed - -38 and the card shows Input/output error in spite of the correct firmware being loaded, then try enabling the Message Signaled Interrupts (MSI and MSI-X) kernel option (CONFIG_PCI_MSI)
Device Drivers ---> [*] PCI support ---> [*] Network device support ---> [*] Message Signaled Interrupts (MSI and MSI-X)
No internet connection[edit | edit source]
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:
/etc/modprobe.d/iwlwifi.conf
Disabling 802.11n, enabling software cryptooptions 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.
See also[edit | edit source]
- Handbook:AMD64/Networking/Wireless
- Wifi — describes the setup of a WiFi (wireless) network device.
- Wpa_supplicant — a wifi supplicant to handle network authentication.
- Network management using DHCPCD — explains how to use dhcpcd for complete network stack management.
- Netifrc — Gentoo's default framework for configuring and managing network interfaces on systems running OpenRC.
- Troubleshooting — provide users, in particular new ones, with a set of techniques and tools to allow them to troubleshoot and fix problems with their Gentoo setups on their own.