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,此事件永远不会发出。以下kluge无法正常运行,可以确认此事件的缺失:

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

错误消息来自crda。内核只有在发出udev事件/请求并期望响应的情况下,才会接受WiFi法规更改。由于crda失败,内核显然没有想到它,表明没有发出udev事件。

WiFi接口是Intel 7265D;内核驱动程序是iwlmvm。我crdawireless-regdb安装,并且/etc/default/crda包含REGDOMAIN=US。卸下并重新加载iwlmvm驱动程序无效。

还有什么需要检查的建议吗?


1
您是否检查了内核日志以查看是否进行了任何更改?我得到的输出与您在stdout上输出的输出相同,但是我的日志显示,管理域确实已更新。
saiarcot895 '16

我在dmesg输出或任何日志中都找不到任何东西来暗示试图更改监管领域。唯一的消息是在第一次加载驱动程序时出现,报告:“ DFS主区域:未设置”
ewhac

1
您的解决方案听起来不错。请将其移至答案而不是对问题进行编辑。然后,您也可以接受自己的答案。
roaima

Answers:


11

我昨天尝试重访此问题,即使使用4.6.3内核也仍然存在问题。手动安装最新的固件映像也无济于事。但是,尝试iw reg set US在运行相同内核的第二台笔记本电脑上运行良好。

问题机器是Thinkpad X1 Carbon(第3代),它具有Intel 7265D WiFi卡。工作机器是具有Intel 7260的Thinkpad T440p。因此,我得出结论,认为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系列中修复

在几个星期前将其更新为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 '17

6

经过一些代码研究,我发现了问题所在:

Intel WiFi设备显示为“自我管理”设备,因此不会将iw reg set应用于该设备。

您需要做的就是设置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

谢谢; 我会尝试的。顺便说一句,什么是“ LAR”?是5GHz频段的雷达回避物吗?
ewhac

该文件/etc/modprobe.d/iwlwifi.conf可能存在,因此最好追加。使用>>代替>echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(根据需要获得root特权)。
卢卡斯


-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

我知道它不能回答问题,而Jan可能是正确的。但这是正确了解所用基础文件的提示。除此之外,我没有那个文件夹/lib/crda/regulatory.bin
JackGrinningCat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.