Pull to refresh

Новая жизнь WiFi адаптера Intel 5150 AGX (и ему подобных)

Reading time5 min
Views142K
Пока вся страна расслаблялась, отмечая «День народного единства», умелые ручки и живые мозги отдельных граждан дарили нам радость и веселье. Особенно повезло обладателям официально ввезенных ноутбуков на платформе Intel Centrino 2 с интегрированным WiMax/WiFi адаптером Intel 5150AGX (в девичестве 5150ANX), который был зверски кастрирован производителем на уровне EEPROM. В результате жертва разучилась красиво петь во все свои 300Mbps и лишь неубедительно мычала ноту G (54Mbps). Как может догадаться нетерпеливый читатель, упомянутые выше очумелые ручки и живые мозги успешно справились с этим небольшим недоразумением, вернув гипотетическому евнуху его утерянное достоинство.

Итак, у вас есть ноутбук в карточкой 5150AGX в совокупности с неуемной жаждой риска, а у нас есть инструкции:

Помните, все нижесказанное делается вами на свой страх и риск. Даже если вы крайне внимательны и аккуратны. Результатом может стать не только работающая на 11n карта, но и ее трудновоскрешаемый трупик.

Windows


1. Скачать RW Everything, распаковать, установить.

2. Если вам нужна резервная копия вашего EEPROM, скачайте еще и DumpIWL. Если нет, читайте с пункта (3). Если да: распаковать в папку все содержимое архива, запустить (под x64 может не работать, подробности в форуме, ссылка в самом конце). Нажать на «Read EEPROM», закрыть, занычить файлик.

3. Открыть диспетчер устройств, найти там свою карту, открыть «Свойства»


4. Перейти на вкладку «Ресурсы». Записать 8 цифр, отмеченных на скриншоте. Это оффсет, он пригодится.


5. Запустить RW Everything, в открывшемся окне в выпадающем списке найти Intel Network Controller и выбрать его.

Смотрим внимательно на Subsytem ID в правой нижней части окна. Они могут быть следующего вида:

1201 — Full, 11n enabled, OEM
1206 — Full, 11n disabled, OEM
1301 — Half, 11n enabled, OEM
1306 — Half, 11n disabled, OEM

1211 — Full, 11n enabled, HP/Lenovo/IBM
1216 — Full, 11n disabled, HP/Lenovo/IBM
1311 — Half, 11n enabled, HP/Lenovo/IBM
1316 — Half, 11n disabled, HP/Lenovo/IBM

После выполнения дальнейших шагов ID изменится с вида XXX6 на XXX1, причем XXX останется без изменений. Если у вас на конце и так единичка — дальше читать смысла нет.

Если ваш номерок в первой половине списка, можете вздохнуть чуть свободнее. Если во второй — ваш риски возросли. Ноутбуки некоторых производителей содержат whitelist допустимых устройств, смена ID (или иных параметров) может привести к неприятностям.

6. В меню RW Everything выбрать Access->Command (или нажать на соответствующую кнопку на панели инструментов). В появившемся окне будет одно поле ввода, в него нужно скопировать следующий текст (одной строкой):

local0=0x********;local0=add(local0, 0x2c);local1=0xCC;local2=div(local1,2);local2=shl(local2, 2);w32 local0 local2;delay 10;local3=(r32 local0);local3=shr(local3, 15);local1=add(local3, 0x08);LOOP{14,local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x0F6F0002);w32 local0 local2;delay 50;local1=add(local1, 2)};local1=add(local3, 0x42);LOOP{12,local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x0FE10002);w32 local0 local2;delay 50;local1=add(local1, 2)};local1=add(local3, 0x5c);LOOP{11,local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x0F310002);w32 local0 local2;delay 50;local1=add(local1, 2)};local1=add(local3, 0x74);LOOP{6,local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x0FA10002);w32 local0 local2;delay 50;local1=add(local1, 2)};local1=add(local3, 0x82);LOOP{7,local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x0F6F0002);w32 local0 local2;delay 50;local1=add(local1, 2)};local1=add(local3, 0x92);LOOP{11,local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x0FE10002);w32 local0 local2;delay 50;local1=add(local1, 2)};local1=add(local3, 0x02);local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x6F4D0002);w32 local0 local2;delay 50;local1=add(local3, 0x04);local2=div(local1, 2);local2=shl(local2, 2);local2=or(local2, 0x00570002);w32 local0 local2;delay 50;local1=0x8A;local2=div(local1,2);local2=shl(local2, 2);local2=or(local2, 0x00f00002);w32 local0 local2;delay 50;local1=0x8C;local2=div(local1,2);local2=shl(local2, 2);w32 local0 local2;delay 10;local3=(r32 local0);local3=shr(local3,16);local3=and(local3, 0xFE9F);local3=or(local3, 0x0010);local3=shl(local3,16);local2=or(local3,local2);local2=or(local2,0x02);w32 local0 local2;delay 50;local1=0x14;local2=div(local1,2);local2=shl(local2, 2);w32 local0 local2;delay 10;local3=(r32 local0);local3=shr(local3,16);local3=and(local3, 0xFFFF0);local3=or(local3, 0x0001);local3=shl(local3,16);local2=or(local3,local2);local2=or(local2,0x02);w32 local0 local2;delay 50;


Восемь зведочек (********) нужно заменить на записаный ранее оффсет (в моем случае, на скриншотах, это E3500000).

Получим что-то вроде:


7. Проверяем себя еще раз, очень важно не сделать ошибки на этом этапе. Проверили? Нажимайте Enter, ждите секунд 10-30 (появится текст выполненной команды), потом еще минутку на всякий случай, закрываете RW Everything и аккуратно завершаете работу системы (НЕ НУЖНО: включать выключать WiFI аппаратным переключателем, вырубать компьютер удержанием кнопки питания и т.п., все это дополнительные факторы риска).

8. После перезагрузки и входа в систему Windows найдет новое устройство (ID сменился) и будет ставить на него драйверы. Скорее всего этот процесс закончится неудачно (что нормально). Все, можно подключаться к точке доступа и радоваться жизни. Чтобы было совсем радостно, можно увеличить ширину канала с 20 до 40Mhz (диспетчер устройств, адаптер, вкладка «дополнительно»).


9. Пункт для тех, кому не нравится новое имя устройства с #2 на конце, т.е. эстетам типа меня. План такой (кратенько, в качестве домашнего задания):
9.1 Добавить системную переменную devmgr_show_nonpresent_devices со значением 1
9.2 Пойти в диспетчер устройств, в меню выбрать «Вид > Показать скрытые устройства» и удалить оба адаптера (старый полупрозрачный и новый с #2 на конце).
9.3 После перезагрузки устройство будет найдено, драйверы установлены, #2 на конце не будет

Linux


1. Возрадоваться. Тут все проще и изящнее, как всегда (подразумевается, что svn уже есть, и чем собирать тоже есть)

2. Идти в /usr/local/src (или где вы там привыкли собирать), создать каталог «iwleeprom»

3. Выполнить "svn checkout iwleeprom.googlecode.com/svn/trunk iwleeprom", в результате увидим:
A iwleeprom/iwleeprom.c
A iwleeprom/iwleeprom.8
A iwleeprom/Makefile
Checked out revision 11.


4. Войти в созданый каталог, и выполнить "make", увидим:
gcc -Wall -o iwleeprom iwleeprom.c
gzip -c iwleeprom.8 > iwleeprom.8.gz


5. Стать суперюзером («su» или «sudo -i» на выбор) и запустить "./iwleeprom --help", должно получиться:
EEPROM reader/writer for intel wifi cards
Usage: ./iwleeprom [-d device] [-r filename] [-w filename] [-p]
-d device device in format 0000:00:00.0 (domain:bus:dev.func)
-r filename dump eeprom to binary file
-w filename write eeprom from binary file
-b save dump in big-endian byteorder (default: little-endian)
-p patch device eeprom to enable 802.11n


6. Выполнить "./iwleeprom -r eeprom.bak", получим на выходе дамп EEPROM (резервная копия на всякий случай).

7. Подумать, готовы ли вы рискнуть? Выполнить "./iwleeprom -p", тулза сама все сделает

8. Прибить (если есть) файлик "/etc/modprobe.d/intel-5300-iwlagn-disable11n.conf", который не дает работать 11n на адаптерах Intel в последних версиях ядра (что-то там разработчики отломали и отключили N от греха подальше, на практике все работает, но возможны временные тормоза)

9. Ребут и проверка



Подготовлено по материалам обсуждения на iXBT (Intel 5150 AGX — возможен ли 802.11n).

Огромное спасибо ittrium, advan, thinkfar, ShultZ, благодаря которым наше маленькое локальное счастье стало возможным.
Tags:
Hubs:
+51
Comments91

Articles