iwlwifi

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Iwlwifi and the translation is 100% complete.

Other languages:
English • ‎español • ‎polski • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
Resources

iwlwifi — это драйвер для современных беспроводных чипов Intel.

Ядро

Чтобы заставить его работать, нужно сделать небольшую настройку ядра. Драйвер поддерживает 802.11a/b/g/n/ac (в зависимости от устройства), поэтому IEEE 802.11 должно быть включено.

IEEE 802.11

Включите по крайней мере опции cfg80211 и mac80211. Некоторым драйверам для беспроводных устройств требуется алгоритм управления скоростью.

Ядро linux-4.1
[*] Networking support  --->
    [*] Wireless  --->
        <*>   cfg80211 - wireless configuration API
        [ ]     nl80211 testmode command
        [ ]     enable developer warnings
        [ ]     cfg80211 regulatory debugging
        [ ]     cfg80211 certification onus
        [*]     enable powersave by default
        [ ]     cfg80211 DebugFS entries
        [ ]     use statically compiled regulatory rules database
        [ ]     cfg80211 wireless extensions compatibility
        <*>   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 с его поддержкой 802.11n это и есть алгоритм управления скоростью.

Важно
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.

Драйвер устройства iwlwifi

Используйте этот драйвер для современных беспроводных чипов Intel. Установите как модуль, как показано <M>. Также необходим DVM или MVM вариант согласно записи в колонке Module в таблице firmware.

Ядро linux-4.9
Device Drivers  --->
 
        [*] Network device support  --->
 
        --- Network device support
        [*]   Wireless LAN  --->
 
            --- Wireless LAN
            [ ]   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
            [ ]       Enable broadcast filtering (NEW)
            [ ]       Enable runtime power management mode for PCIe devices (NEW)
                      Debugging Options  --->
            [ ]   Intersil devices
            [ ]   Marvell devices
            [ ]   MediaTek devices
            [ ]   Ralink devices
            [ ]   Realtek devices
            [ ]   Redpine Signals Inc devices
            [ ]   STMicroelectronics devices
            [ ]   Texas Instrument devices
            [ ]   ZyDAS devices
            < >   Simulated radio testing tool for mac80211
            < >   Wireless RNDIS USB support
Важно
В случае если драйвер встроен в ядро (<*>), а не собран как модуль (<M>), firmware необходимо собрать также непосредственно в ядре. Смотрите раздел если предпочтительней собирать в ядро.
После внесения изменений в конфигурацию ядра не забудьте перекомпилировать ядро.

После перекомпиляции ядра и перезагрузки с использованием нового ядра, выбранные параметры можно проверить следующим образом:

Заметка
Поддержка псевдо-файла /proc/config.gz включена с помощью параметра Kernel/IKCONFIG_Support.
user $zgrep 'IWLWIFI\|IWLDVM\|IWLMVM' /proc/config.gz

Firmware

Необходимые firmware для конкретных устройств перечислены в этой таблице. Они доступны в пакетах sys-kernel/linux-firmware, а также, для конкретного устройства, в пакетах sys-firmware/iwlxxxx-*ucode.

root #emerge --ask sys-kernel/linux-firmware

Если предпочтительней собирать в ядро

В случае если драйвер будет компилироваться в ядре (<*>), а не как модуль (<M>), firmware необходимо также собирать в ядре.

Ядро linux-4.19
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.

Имена сетевых устройств

Имена сетевых устройств, такие как 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

Узнать имя устройства можно с помощью просмотра каталога /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'
[    1.200902] pci 0000:03:00.0: [8086:0082] type 00 class 0x028000
[    1.201065] pci 0000:03:00.0: reg 0x10: [mem 0xf7d00000-0xf7d01fff 64bit]
[    1.201776] pci 0000:03:00.0: PME# supported from D0 D3hot D3cold
[    1.201999] pci 0000:03:00.0: System wakeup disabled by ACPI
[   18.260461] iwlwifi 0000:03:00.0: enabling device (0100 -> 0102)
[   18.260598] iwlwifi 0000:03:00.0: can't disable ASPM; OS doesn't have ASPM control
[   18.419884] iwlwifi 0000:03:00.0: loaded firmware version 18.168.6.1 op_mode iwldvm
[   18.671329] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG enabled
[   18.671330] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
[   18.671330] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
[   18.671332] iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R) Advanced-N 6205 AGN, REV=0xB0
[   18.673421] iwlwifi 0000:03:00.0: L1 Enabled - LTR Disabled
[   18.705882] ieee80211 phy0: Selected rate control algorithm 'iwl-agn-rs'
[   18.706468] iwlwifi 0000:03:00.0 wlp3s0: renamed from wlan0
[   23.286871] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
    ......... snip .........
[   48.176954] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   92.720710] wlp3s0: authenticate with my WLAN AP
[   92.724440] wlp3s0: send auth to my WLAN AP (try 1/3)
[   92.728436] wlp3s0: authenticated
[   92.728646] wlp3s0: waiting for beacon from my WLAN AP
[   92.821389] wlp3s0: associate with my WLAN AP (try 1/3)
[   92.828148] wlp3s0: RX AssocResp from my WLAN AP (capab=0x431 status=0 aid=4)
[   92.853124] wlp3s0: associated
[   92.853173] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready

Устранение проблем

Ядро не загружается

Проверьте, что загружено правильное ядро. Это можно сделать (зависит от параметра IKCONFIG) так:

user $zgrep CONFIG_IWL /proc/config.gz

Проблемы с firmware

  • Для систем использующих udev или systemd надо настроить ядро для загрузки бинарного блоба (binary blob). В случае firmware для беспроводной карты это firmware, который нуждается в загрузки. Больше информации о конфигурации ядра для такой ситуации можно найти в следующей ветке форума Gentoo: FW_LOADER_USER_HELPER_FALLBACK.

Беспроводная сетевая карта не работает

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 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Отключение 802.11n, включение программной криптографии
options iwlwifi 11n_disable=1 swcrypto=1

Смотрите также

Внешние ресурсы