В процессе диагностики выпадения WiFi я обнаружил, что для регулирующего домена на моем WiFi-интерфейсе установлено значение "world" (00), и изменение его в моем регионе (США) должно помочь решить эту проблему. Однако каждая попытка сделать это была проигнорирована.
Бег iw reg set US
не имеет очевидного эффекта:
$ iw reg get
country 00: DFS-UNSET
(2402 - 2472 @ 40), (6, 20), (N/A)
(2457 - 2482 @ 40), (6, 20), (N/A), PASSIVE-SCAN
(2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
(5170 - 5250 @ 160), (6, 20), (N/A), PASSIVE-SCAN
(5250 - 5330 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
(57240 - 63720 @ 2160), (N/A, 0), (N/A)
$ sudo iw reg set US
$ iw reg get
country 00: DFS-UNSET
(2402 - 2472 @ 40), (6, 20), (N/A)
(2457 - 2482 @ 40), (6, 20), (N/A), PASSIVE-SCAN
(2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
(5170 - 5250 @ 160), (6, 20), (N/A), PASSIVE-SCAN
(5250 - 5330 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
(57240 - 63720 @ 2160), (N/A, 0), (N/A)
После обширного поиска в Google по этому вопросу, кажется, что то, что должно произойти, iw reg set
заставляет ядро выдавать событие udev, которое вызывает crda
выполнение и выкашливает соответствующую нормативную информацию. Однако, насколько я могу судить udevadm
, это событие никогда не генерируется. Отсутствие этого события подтверждается тем, что не работает следующий ключ:
$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7
Сообщение об ошибке от crda
. Ядро будет принимать нормативные изменения WiFi только в том случае, если оно отправило событие / запрос udev для них и ожидает ответа. Поскольку происходит crda
сбой, ядро явно не ожидало этого, предполагая, что событие udev не было отправлено.
Интерфейс WiFi - это Intel 7265D; чей драйвер ядра iwlmvm
. Я crda
и wireless-regdb
установил, и /etc/default/crda
содержит REGDOMAIN=US
. Удаление и перезагрузка iwlmvm
драйвера не имеет никакого эффекта.
Любые предложения, что еще проверить?
dmesg
выходных данных или каких-либо журналах, чтобы предположить, что была предпринята какая-либо попытка изменить регуляторный домен. Единственное сообщение об этом появляется при первой загрузке драйвера, сообщая: «Ответы:
Я попытался вернуться к этой проблеме вчера, и все еще есть проблема даже с ядром 4.6.3. Установка последней версии прошивки вручную также не помогла. Тем не менее, попытка
iw reg set US
второго ноутбука с тем же ядром работала нормально.Проблемной машиной является Thinkpad X1 Carbon (Gen.3), в котором установлена карта Intel 7265D WiFi; рабочая машина - Thinkpad T440p с Intel 7260. Поэтому я делаю вывод, что в драйвере или прошивке 7265D есть ошибка.
Временное решение
Я также обнаружил обходной путь для 7265D. Имейте в виду, что это обходной путь и может вызвать конфликты, если / когда будет выпущено реальное исправление:
sudo modprobe -r iwlmvm
cfg80211
модуль ядра, используя параметр ядра для принудительной настройки домена регулирования (в данном случае, «US»):sudo modprobe cfg80211 ieee80211_regdom=US
sudo modprobe iwlmvm
Теперь вы должны увидеть интерфейс WiFi, настроенный для регулирующего домена США (или любого другого):
Обновление 2016.11.17: исправлено в ядре серии 4.8
Сегодня я впервые проверил эту проблему после того, как пару недель назад обновил ядро 4.8.x, и обнаружил, что интерфейс Wi-Fi теперь, похоже, правильно принимает регулирующий домен. Это произошло в версии ядра 4.8.5 или до нее.
источник
После некоторого исследования кода я выяснил, в чем проблема:
Устройство Intel WiFi выглядит как самоуправляемое устройство, поэтому набор iw reg к нему не применяется.
Все, что вам нужно сделать, это установить
iwlwifi
параметрlar_disable=1
:modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
источник
/etc/modprobe.d/iwlwifi.conf
может существовать, поэтому его лучше добавить. Или используйте>>
вместо>
илиecho "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf
(получает права root при необходимости).источник