Проблема работы wifi RaLink 2790 (RT2860)

Все ниже описанное относится к версиям Ubuntu 11.04 и ниже. Проблема в следующем, нетбук (ASUS 1000H) подключался к wifi (адаптер RaLink 2790 (RT2860)), получал ip-адрес по DHCP, но сеть не работала, либо работа не продолжительное время. Потом разрывалось соединение и заново подключалось с тем же печальным эффектом. Первое что нужно выяснить какой драйвер используется для работы адаптера. Это можно сделать выполнив команду в консоле:

lspci -vv 
Результат ее был таков:

 01:00.0 Network controller: RaLink RT2860 
 Subsystem: RaLink Device 2790 
 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- 
 Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- 
 Latency: 0, Cache Line Size: 32 bytes 
 Interrupt: pin A routed to IRQ 19 
 Region 0: Memory at fbef0000 (32-bit, non-prefetchable) [size=64K] 
 Capabilities: <access denied> 
 Kernel driver in use: rt2800pci 
 Kernel modules: rt2860sta, rt2800pci

После поиска на просторах интернета удалось выяснить причину. Как оказалась проблема здесь в том что используется драйвер rt2800pci вместо rt2860sta. Нужно запретить модуль rt2800pci  и использовать rt2860sta. Для этого нужно добавить в конец файла /etc/modprobe.d/blacklist.conf следующее:

blacklist rt2800pci
Теперь нужно чтобы система перезагружала беспроводной драйвер до и после перехода в спящий режим. Это можно сделать, поместив следующие строки в файл /etc/pm/config.d/unload_wireless

SUSPEND_MODULES="rt2860sta"
Если файла unload_wireless не существует то нужно его создать.
Далее нужно перезагрузиться. Теперь сеть будет работать стабильно, но на 54Mb/sec, т.е. по стандарту 802.11b/g. Если точка доступа работает именно на этом стандарте то можно на этом остановиться. Если же точка работает по стандарту 802.11n то продолжаем дальше. А дальше для исправления этой ситуации нужно скомпилировать драйвер. Для этого выполняем следующие шаги:

Шаг 1
Скачать драйвер переходим по ссылке  http://www.ralinktech.com/. Далее выбираем Software затем Linux. Из списка выбираем:

Download the driver "RT2860PCI/mPCI/CB/PCIe(RT2760/RT2790/RT2860/RT2890)“ dated 07/16/2010, version 2.4.0.0
Скаченный файл нужно переименовать, убрав в конце расширение .bz2

#До переименования
 2010_07_16_RT2860_Linux_STA_v2.4.0.0.tar.bz2

#После переименования
 2010_07_16_RT2860_Linux_STA_v2.4.0.0.tar
Шаг 2

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

cd 2010*
Шаг 3

Выполняем команду:

gedit ./os/linux/config.mk
Находим строчку HAS_WPA_SUPPLICANT ставим y вместо n:

HAS_WPA_SUPPLICANT=y
Находим строчку HAS_NATIVE_WPA_SUPPLICANT_SUPPORT ставим y вместо n:

HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
Далее закрыть и сохранить файл.

Шаг 4

Выполняем команду:

gedit ./common/cmm_wpa.c
Если выйдет окно с ошибкой о кодировке, то нужно сменить ее на „Western“ и попробовать снова.

Находим строчку MIX_CIPHER_NOTUSE. Изменить ее следующим образом:

WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES;
Шаг 5

Далее в системе перед выполнением следующими командами, должен быть установлен gcc:

sudo make
sudo make install
sudo ifconfig wlan0 down
sudo rmmod rt2860sta
Шаг 6
Переименовать системный драйвер rt2860sta.ko в rt2860sta.ko.dist выполнив:

sudo mv /lib/modules/2.6.*/kernel/drivers/staging/rt2860/rt2860sta.ko rt2860sta.ko.dist
Вместо * должна быть версия ядра.

Шаг 7

Выполнить:

sudo depmod -a
sudo modprobe rt2860sta
Шаг 8

Выполняем следующее:

cd os
cd linux
sudo cp rt2860sta.ko /lib/modules/2.6.*/kernel/drivers/staging/rt2860/
Вместо * должна быть версия ядра.

Шаг 9

Перезагрузиться.

Примечание: при обновлении версии ядра так же необходимо выполнять перекомпиляцию драйвера.
Прочли: 7862 | Изменено: 13 ноября 2011 | Добавлено: 27 августа 2011 | На главную