Как стать автором
Поиск
Написать публикацию
Обновить

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

Время на прочтение5 мин
Количество просмотров145K
Пока вся страна расслаблялась, отмечая «День народного единства», умелые ручки и живые мозги отдельных граждан дарили нам радость и веселье. Особенно повезло обладателям официально ввезенных ноутбуков на платформе 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, благодаря которым наше маленькое локальное счастье стало возможным.
Теги:
Хабы:
Всего голосов 61: ↑56 и ↓5+51
Комментарии91

Публикации

Ближайшие события