iwlwifi is the wireless driver for Intel's current wireless chips. For older chips, there are other drivers:
The following devices are supported (since kernel version):
For technical support send email to and/or .
TODO: tell people how to use tracing (probably use a sub-page and link to it)
The firmware necessary to support the devices is distributed separately under the firmware license.
Note that many distributions ship the firmware, you could install the “linux-firmware” package or similar. If that doesn't work, or you need newer firmware, read on.
The driver loads the firmware using the kernel's firmware_class infrastructure. More information can be found under in the Documentation/firmware_class/README file in the kernel source. In order to function correctly the driver requires this to be enabled in your kernel. When you configure the kernel, you can find this option in the following location:
Device Drivers -> Generic Driver Options -> Userspace firmware loading support
You can determine if your kernel currently has firmware loader support by looking for the
CONFIG_FW_LOADER
definition on your kernel's
.config
file.
In addition to having the firmware_class support in your kernel, you must also have a working userspace infrastructure configured. The steps for installing and configuring this are very distribution specific and the tools differ, but distributions have this enabled.
Once you have the firmware loader in place (or if you aren't sure and you just want to try things to see if it works), you need to install the firmware file into the appropriate location.
Where that appropriate location is depends (again) on your system distribution. You can typically find this location by looking in the udev scripts of your distro, the default on most distributions is /lib/firmware.
Installation of the firmware is simply:
# cp iwlwifi-*.ucode /lib/firmware
You can now load the driver.
You can get the firmware from linux-firmware.git, or download it here:
There are three repositories that we maintain:
If you need to use the current driver on an older kernel, you can use the compat-drivers project for that. See https://backports.wiki.kernel.org/ for more information.
Issues can be filed in kernel's bugzilla. Make sure to add ilw@linux.intel.com to the bug.
Having and WiFi running at the same time is a challenge. These scenarios have been tested thoroughly on 7260 and up, less so on earlier devices. This is why some people may face issues with devices that are handled by iwldvm (pre-7260). For users of these devices who have problems when WiFi and Bluetooth are running concurrently, we suggest to disable BT Coex by loading iwlwifi with bt_coex_active=0 as a module parameter.
The simplest way to provide minimal output is to dump your kernel log: dmesg. Sometimes we will ask for logs from the supplicant too - they typically land in syslog. iwlwifi can print more data to the kernel log if asked to: this is controlled by the debug module parameter. This is a bitmap. To see more debug prints, CONFIG_IWLWIFI_DEBUG must be enabled.
Another (more powerful) way to debug iwlwifi is to use tracing:
sudo trace-cmd record -e iwlwifi
We will typically ask for more switches:
sudo trace-cmd record -e iwlwifi -e mac80211 -e cfg80211 -e iwlwifi_msg
This records all the data that goes from and to the firmware. The output is a file: trace.dat which you can compress prior to sending. To enable tracing, CONFIG_IWLWIFI_TRACING must be set.
When the firmware crashes, you'll see a message like this:
iwlwifi 0000:01:00.0: Microcode SW error detected. Restarting 0x82000000. [snip] iwlwifi 0000:01:00.0: Loaded firmware version: XX.XX.XX.XX iwlwifi 0000:01:00.0: 0x0000090A | ADVANCED_SYSASSERT
In this case, please copy the whole dmesg output since there may be data before and after this message that can be helpful. starting from kernel 3.15, iwlwifi will record data when the firwmare crashes so that it can be retrieved later. The data can be fetched by a simple:
cat /sys/kernel/debug/iwlwifi/*/iwlmvm/fw_error_dump > iwl.bin
This assumes that CONFIG_IWLWIFI_DEBUGFS is set.
A udev event is sent each time the firmware crashes, so that you can automate the process by writing a rule:
DRIVER=="iwlwifi", ACTION=="change", RUN+="/bin/dump_iwl_data.sh"
Then /bin/dump_iwl_data.sh can simply cat the debugfs hook to a file.
Starting from kernel 3.17, iwlwifi supports firmware monitor. To enable it, load iwlwifi with fw_monitor=1 as a module parameter. The firmware monitor requires a very big chunk of contiguous memory to write its data - it tries to allocate 64MB and scales down if the allocation fails. This is why it is not enabled by default. Note that you will need a customized firmware to use the firmware monitor.
By sending the debug logs you are providing information to Intel such as your email address, peer’s MAC address, and other information. This information will be used only for the purpose of troubleshooting the issue you are reporting. Intel is committed to protecting your privacy. To learn more about Intel’s privacy practices, please visit Intel's privacy site or write Intel Corporation, ATTN Privacy, Mailstop RNB4-145, 2200 Mission College Blvd., Santa Clara, CA 95054 USA.
Please don't attach the file created by Firmware Debugging to public bug trackers (such as bugzilla), but send it privately through email. We recommend you encrypt the data using Emmanuel Grumbach's PGP key (6E363201).