Установите регион страны, чтобы включить Wi-Fi каналы 12 и 13.

Вопрос или проблема

Во-первых, мы не используем стандартный Linux, мы используем встроенный Linux от NXP.

Проблема, с которой мы столкнулись, заключается в том, что мы не можем установить регион страны, чтобы активировать каналы 12 и 13.

Мы установили CRDA и используем чипсет Wi-Fi от Cypress (Broadcom).

Проблема:

Когда Linux загружается, у нас не включен wlan0, поэтому ifconfig показывает следующее:

13:52:15 root@i:~> ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1%1995577040/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:18944 (18.5 KiB)  TX bytes:18944 (18.5 KiB)

13:58:41 root@i:~> iw dev
phy#0
        Interface wlan0
                ifindex 4
                wdev 0x1
                addr 00:90:4c:11:22:33
                type managed

Если wlan0 не включен, мы можем изменить регион страны:

iw reg set JP
13:54:15 root@i:~> cfg80211: Regulatory domain changed to country: JP
cfg80211:  DFS Master region: JP
cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (                         dfs_cac_time)
cfg80211:   (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A)
cfg80211:   (4910000 KHz - 4990000 KHz @ 40000 KHz), (N/A, 2300 mBm), (N/A)
cfg80211:   (5030000 KHz - 5090000 KHz @ 40000 KHz), (N/A, 2300 mBm), (N/A)
cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000                          mBm), (N/A)
cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000                          mBm), (0 s)
cfg80211:   (5490000 KHz - 5710000 KHz @ 160000 KHz), (N/A, 2300 mBm), (0 s)

Итак, если мы проверим список iw, мы можем увидеть, что каналы 12 и 13 доступны:

13:58:27 root@i:~> iw list |grep MHz
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)
                        * 2467 MHz [12] (20.0 dBm)
                        * 2472 MHz [13] (20.0 dBm)
                        * 2484 MHz [14] (20.0 dBm)

Проблема в том, что когда мы поднимаем wlan0, используя ifup wlan0 или ip link set wlan0 up, iw сбрасывает каналы 11 и 12:

14:01:53 root@i:~> iw list |grep MHz
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)

Broadcom использует инструмент команд “wl”. Мы можем использовать этот инструмент только после того, как wlan0 включен. Если мы проверим доступные каналы, мы увидим, что каналы 11 и 12 недоступны:

14:02:03 root@i:~> wl chan_info
Channel 1       B Band
Channel 2       B Band
Channel 3       B Band
Channel 4       B Band
Channel 5       B Band
Channel 6       B Band
Channel 7       B Band
Channel 8       B Band
Channel 9       B Band
Channel 10      B Band
Channel 11      B Band

Если мы установим регион страны с помощью wl:

14:03:32 root@i:~> wl country GB

14:04:25 root@i:~> wl chan_info
Channel 1       B Band
Channel 2       B Band
Channel 3       B Band
Channel 4       B Band
Channel 5       B Band
Channel 6       B Band
Channel 7       B Band
Channel 8       B Band
Channel 9       B Band
Channel 10      B Band
Channel 11      B Band
Channel 12      B Band
Channel 13      B Band

Мы видим, что каналы 12 и 13 доступны, но iw не показывает эти каналы:

14:01:53 root@i:~> iw list |grep MHz
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)

Если мы снова пытаемся установить регион страны, это не работает.

14:07:55 root@i:~> iw reg set GB
14:08:01 root@i:~> cfg80211: Regulatory domain changed to country: GB
cfg80211:  DFS Master region: ETSI
cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
cfg80211:   (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (N/A)
cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (0 s)
cfg80211:   (5490000 KHz - 5710000 KHz @ 160000 KHz), (N/A, 2700 mBm), (0 s)
cfg80211:   (57000000 KHz - 66000000 KHz @ 2160000 KHz), (N/A, 4000 mBm), (N/A)

14:01:53 root@i:~> iw list |grep MHz
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)

Вопросы:

1- Почему ifup изменяет/сбрасывает “каналы”?
Во время ifup загружается “драйвер”:

13:59:45 root@i:~> ifup wlan0
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device

Dongle Host Driver, version 1.141.92 (r)
Compiled in drivers/net/wireless/bcmdhd
wl_android_wifi_on in
mmc0: queuing unknown CIS tuple 0x80 (2 bytes)
mmc0: queuing unknown CIS tuple 0x80 (3 bytes)
mmc0: queuing unknown CIS tuple 0x80 (3 bytes)
mmc0: queuing unknown CIS tuple 0x80 (7 bytes)
mmc0: queuing unknown CIS tuple 0x80 (3 bytes)
mmc0: queuing unknown CIS tuple 0x80 (6 bytes)
F1 signature OK, socitype:0x1 chip:0xa9a6 rev:0x1 pkg:0x3
DHD: dongle ram size is set to 524288(orig 524288) at 0x0
dhdsdio_write_vars: Download, Upload and compare of NVRAM succeeded.
dhd_bus_init: enable 0x06, ready 0x06 (waited 0us)
wifi_platform_get_mac_addr
Firmware up: op_mode=0x0005, MAC=60:f1:89:cb:cb:17
Firmware version = wl0: Dec 11 2014 04:20:45 version 7.10.323.34 (r520360) FWID 01-ea2beeba
dhd_wlfc_init(): successfully enabled bdcv2 tlv signaling, 79
dhd_wlfc_init: query wlfc_mode succeed, fw_caps=0x1c
dhd_wlfc_init(): wlfc_mode=0x1c, ret=0
CFG80211-ERROR) wl_update_wiphybands : error reading vhtmode (-23)
wl_create_event_handler(): thread:wl_event_handler:246 started
CFG80211-ERROR) wl_event_handler : tsk Enter, tsk = 0x8a46143c

2- Возможно, проблема в том, что я должен выполнить инструмент wl перед включением интерфейса wlan0, но команда wl не может найти интерфейс, если он не включен.

Благодарю вас за ваше время.

Проблема была в драйвере. Производитель, MURATA, подтвердил ошибку. 1FX

.

Ответ или решение

Настройка Wi-Fi для использования каналов 12 и 13 встраиваемой системы на базе Linux от NXP с чипсетом Wi-Fi от Cypress (Broadcom) сталкивается с проблемой, связанной с конфигурацией региональных настроек и драйверов системы. Вам уже удалось определить основную проблему: при поднятии интерфейса wlan0 каналы 12 и 13 становятся недоступными. Рассмотрим теоретические аспекты, пример их применения, а также способы решения данной проблемы в вашей системе.

Теория

В Linux-системах для управления радиочастотной политикой обычно используется утилита CRDA (Central Regulatory Domain Agent) и компонент cfg80211, который взаимодействует с ней для применения правил использования частотных диапазонов Wi-Fi в зависимости от региона. При этом каждая страна имеет свои регулятивные ограничения на использование определенных частот Wi-Fi. Ваша задача заключается в том, чтобы переключить региональные настройки Wi-Fi на те, которые разрешают использовать все поддерживаемые каналы, включая 12 и 13, такие как Япония (JP) или Великобритания (GB).

Пример

В вашем случае использование команды iw reg set JP временно решает проблему, показывая, что частоты каналов 12 и 13 доступны. Однако при активации интерфейса wlan0 через ifup wlan0 или ip link set wlan0 up, ограничения снова применяются, и доступные каналы ограничиваются до 11-го. Использование утилиты wl для установки страны после поднятия интерфейса показывает наличие каналов 12 и 13, но они не отражаются в выводе команды iw list.

Применение и решение

1. Проблемы с инициализацией драйвера:

При активации интерфейса загрузка драйвера или его конфигурационные параметры могут переопределять настройки, заданные с помощью CRDA. Это может быть связано с конфигурацией NVRAM или жесткой привязкой регулятивных доменов на уровне микропрограммного обеспечения.

2. Настройка параметров до подъема интерфейса:

Вы предположили, что применение утилиты wl до активации интерфейса может решить проблему, однако это невозможно из-за ограничений на доступ к неактивным интерфейсам. Решить это можно, предварительно изменив конфигурацию на уровне драйвера.

3. Влияние прошивки и драйвера:

Как оказывается, в вашем случае, согласно информации, полученной от производителя (Murata), в драйвере имелись ошибки, которые не позволяли корректно применить регулятивные настройки после инициирования интерфейса.

Рекомендации по решению

  • Обновление драйвера: Поскольку проблема заключается в баге драйвера, как рекомендовал производитель, решением будет обновление прошивки и драйвера до исправленной версии. Свяжитесь с производителем или дистрибьютором NXP для получения необходимого обновления.

  • Альтернативные подходы: Если обновление невозможно, изучите возможность использования патчей ядра или сохранение постоянной конфигурации NVRAM, чтобы настройки страны оставались актуальными даже после инициализации интерфейса.

  • Процессы CRDA и cfg80211: Внимательно изучите конфигурацию циклов запуска CRDA и cfg80211, чтобы убедиться в том, что любые изменения регулятивных доменов происходят корректно и в нужной последовательности.

  • Техническая поддержка: Не стесняйтесь обращаться за дополнительной помощью к сообществу разработчиков или использовать форумы поддержки сообщества NXP и Broadcom для получения подробных ответов и успешного решения проблемы.

В заключение, решение подобных проблем часто требует тщательного анализа всех уровней взаимодействия программного и аппаратного обеспечения в Linux-системах, особенно в случае встраиваемых решений с ограниченной поддержкой. Понимание всех аспектов и влияние каждой конфигурационной утилиты на конечный результат поможет достигнуть успешного результата.

Оцените материал
Добавить комментарий

Капча загружается...