WiFi: `iw reg set US` не має ефекту


13

Під час спроби діагностувати відмову від WiFi я виявив, що регуляторний домен у моєму інтерфейсі WiFi встановлений на "світ" (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)

Після розширеного гуглінгу на цю тему, здається, що те, що повинно статися, iw reg setвикликає ядро ​​випромінювати подію udev, що призводить crdaдо виконання та кашлю відповідної нормативної інформації. Однак, як я можу сказати udevadm, ця подія ніколи не випускається. Відсутність цієї події підтверджується тим, що клуб не працює:

$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7

Повідомлення про помилку від crda. Ядро прийматиме регуляторні зміни Wi-Fi лише в тому випадку, якщо воно випустило подію / запит udev для них і очікує відповіді. Оскільки це crdaне вдається, ядро ​​його явно не очікувало, що передбачає, що жодна подія udev не випромінюється.

Інтерфейс WiFi - це Intel 7265D; чий драйвер ядра iwlmvm. У мене є crdaі wireless-regdbвстановлений, і /etc/default/crdaмістить REGDOMAIN=US. Видалення та перезавантаження iwlmvmдрайвера не впливає.

Будь-які пропозиції, що ще перевірити?


1
Ви перевірили журнал ядра, щоб побачити, чи були внесені зміни? Я отримую такий же вихід, як і ви на stdout, але мої журнали говорять про те, що регуляторний домен дійсно був оновлений.
saiarcot895

Я не можу знайти нічого у dmesgвихідному або будь-якому з журналів, що дозволяє припустити, що будь-яка спроба змінити домен регулятора. Єдине повідомлення для цього ефекту з'являється під час першого завантаження драйвера, повідомляючи: "Головний регіон DFS: не встановлено"
ewhac

1
Ваше рішення звучить добре. Будь ласка, перейдіть до відповіді, а не до редагування питання. Потім ви також приймаєте власну відповідь.
roaima

Відповіді:


11

Я намагався переглянути цю проблему вчора, і все ще є проблема навіть з ядром 4.6.3. Вручне встановлення останнього зображення прошивки також не допомогло. Однак спробувати iw reg set USна другому ноутбуці з таким же ядром працювало чудово.

Проблемна машина - це Thinkpad X1 Carbon (Gen.3), який має WiFi-карту Intel 7265D; робочою машиною є Thinkpad T440p, який має Intel 7260. Тому я приходжу до висновку, що в драйвері 7265D або прошивці є помилка.

Обхід

Я також виявив вирішення проблеми 7265D. Зауважте, що це обхідне рішення і може спричинити конфлікти, якщо / коли буде випущено фактичне виправлення:

  • Видаліть усі драйвери ядра WiFi та залежні модулі:
    sudo modprobe -r iwlmvm
  • Встановіть cfg80211модуль ядра, використовуючи параметр ядра, щоб примусити домен регулятора (у цьому випадку "US"):
    sudo modprobe cfg80211 ieee80211_regdom=US
  • Перевстановіть драйвери ядра WiFi:
    sudo modprobe iwlmvm

Тепер вам слід побачити інтерфейс WiFi, налаштований для регуляторного домену в США (або будь-якому іншому):

$ iw reg get
country US: DFS-FCC
    (2402 - 2472 @ 40), (N/A, 30), (N/A)
    (5170 - 5250 @ 80), (N/A, 17), (N/A)
    (5250 - 5330 @ 80), (N/A, 23), (0 ms), DFS
    (5490 - 5730 @ 160), (N/A, 23), (0 ms), DFS
    (5735 - 5835 @ 80), (N/A, 30), (N/A)
    (57240 - 63720 @ 2160), (N/A, 40), (N/A)

Оновлення 2016.11.17: Виправлено в ядрі 4.8 Series

Сьогодні я вперше перевірив цю проблему після оновлення пару тижнів тому до ядра 4.8.x і виявив, що інтерфейс WiFi тепер, здається, належним чином приймає регуляторний домен. Це сталося у версії ядра 4.8.5 або раніше.

$ iw reg get
global
country 00: DFS-UNSET
    (2402 - 2472 @ 40), (6, 20), (N/A)
    (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
    (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
    (5170 - 5250 @ 80), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
    (5250 - 5330 @ 80), (6, 20), (0 ms), DFS, AUTO-BW, 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)

phy#0 (self-managed)
country US: DFS-UNSET
    (2402 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
    (5170 - 5250 @ 80), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5250 - 5330 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5490 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5735 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5815 - 5835 @ 20), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-HT40PLUS, NO-80MHZ, NO-160MHZ, PASSIVE-SCAN

Це не спрацювало для мого Intel Wireless 7265D, в Інтернеті є деякі теми, в яких згадується, що налаштування 00-World жорстко кодується до вбудованого програмного забезпечення або апаратного забезпечення.
CMCDragonkai

6

Після декількох досліджень коду я з’ясував, у чому проблема:

Пристрій Intel WiFi виглядає як "самоврядний" пристрій, тому набір iw reg не застосовуватиметься до нього.

Все, що вам потрібно зробити, це встановити iwlwifiпараметр lar_disable=1:

  1. Або вручну: modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
  2. Автоматично: echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf

Дякую; Я спробую це. До речі, що таке "ЛАР"? Це те, що уникнення радіолокації в діапазоні 5 ГГц?
ewhac

Файл /etc/modprobe.d/iwlwifi.confможе існувати, тому краще додати. Будь-яке використання >>замість >або echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(отримує кореневі привілеї за потребою).
Лукас


-2
 #!/bin/bash

echo "hello root"
git clone git://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git

echo ""
cd wireless-regdb/
sleep 3

echo ""
gedit db.txt
sleep 1

echo ""
make

echo ""
sudo rm /lib/crda/regulatory.bin

echo ""
sudo cp regulatory.bin /lib/crda/regulatory.bin

echo ""
sudo cp $USER.key.pub.pem /lib/crda/pubkeys/

echo ""
sudo iw reg get

echo ""
ip link set wlan1 down
sleep 3

echo "Boosting Tx Power To 30 Fixed"
iw dev wlan1 set txpower fixed 30mbm
sleep 3

echo "starting wlan1"
ip link set wlan1 up
sleep 2

echo "Checking wlan1 TxPower"
iw dev
sleep 3

echo "Checking Regulatory Domain"
iw reg get
sleep 2

echo "Good Luck"

Будь ласка, опишіть представлений код. Допоможіть користувачам навчитися ловити рибу, а не лише дайте їм рибу.
NotAnUnixNazi

Я знаю, що це не відповідає на запитання, і Ян, можливо, має рацію. Але це підказка в правильному напрямку усвідомлення базових файлів. Крім того, у мене немає цієї папки /lib/crda/regulatory.bin
JackGrinningCat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.