[size=13.3333px]
http://forum.ixbt.com/topic.cgi?id=62:18971:1243#1243
[size=13.3333px]http://blog.csdn.net/qhw2012/article/details/24384573[size=13.3333px]http://forum.ixbt.com/topic.cgi?id=62:18971:1243#1246
[size=13.3333px]Метод и драйвер разработаны участником конференции 36.6°К[size=13.3333px], за что ему говорим спасибо.
[size=13.3333px]Внимание! Никакой ответственности за порчу оборудования при использовании функции записи не несем. Используйте на свой страх и риск.
[size=13.3333px]Скачиваем [size=13.3333px]драйвер[size=13.3333px] ([size=13.3333px]зеркало[size=13.3333px]) с поддержкой записи/чтения всего EEPROM в файл.
[size=13.3333px]Официально ТОЛЬКО для следующих серий чипсетов:
[size=13.3333px]RT30xx RT33xx RT3070 RT3370 RT5370
[size=13.3333px]Компилируем драйвер.
[size=13.3333px]код
[size=13.3333px]В файл rtusb_dev_id.c можно добавлять свои идентификаторы в любую строку.
[size=13.3333px]Расширен двумя новыми командами интерфейса "ra0 e2p"
[size=13.3333px]Команда "r" - чтение EEPROM в файл e2p.bin
[size=13.3333px]Команда "w" - чтение файла e2p.bin и запись его в EEPROM
[size=13.3333px]Команда записи EEPROM предназначена исключительно для тех, кому нечего терять,
[size=13.3333px]и для попытки восстановления испорченного EEPROM, заранее корректной версией
[size=13.3333px]от аналогичного оборудования.
[size=13.3333px]Пример использования:
[size=13.3333px]код1 | sudo insmod rt5370sta.ko //Установка |
2 | sudo ifconfig ra0 192.168.1.1 //Конфиг. ra0 |
3 | sudo ifconfig ra0 //Проверка |
4 | iwpriv ra0 e2p 0 //Считать платформу чипсета (вернет 5370 для RT5370) |
5 | iwpriv ra0 e2p r //Считывает весь EEPROM и записывает его в файл e2p.bin в текущую папку |
[size=13.3333px]Файл e2p.bin записывается под root:root и не имеет доступа на чтение/запись
[size=13.3333px]пользователем ubuntu:ubuntu. Поэтому надо изменить его атрибуты
[size=13.3333px]код1 | sudo chmod +r+w e2p.bin //Смена атрибутов файла, разр. чтения-записи |
[size=13.3333px]После этого можно копировать его на другой диск
[size=13.3333px]код1 | sudo iwpriv ra0 e2p w //Читает файл e2p.bin из тек. папки и записывает его в EEPROM |
[size=13.3333px]***
[size=13.3333px]Теперь поговорим немного о структуре файла.
[size=13.3333px]Размер EEPROM - 1024 байта для всех чипсетов.
[size=13.3333px]Начиная со смещения 4 длиной 6 байт идет MAC-адрес. Не забываем менять его на адрес своего адаптера, особенно если клонируем несколько устройств, используемых в рамках одной беспроводной сети:
[size=13.3333px]код1 | 00000000: 70 53 06 01 FC 75 16 E4|14 9C 00 00 00 00 00 00 |
[size=13.3333px]в данном примере MAC-адрес - FC 75 16 E4 14 9C.
[size=13.3333px]Со смещения 208 длиной 4 байта идет VID и PID адаптера (старший и младший байты поменяны местами):
[size=13.3333px]код1 | 00000200: 12 01 00 02 00 00 00 40|01 20 19 3C 01 01 01 02 |
[size=13.3333px]здесь VID 2001, а PID 3C19 (адаптер D-Link DWA-125 rev A3). Следовательно, поменяв эти 4 байта на значения самсунговского адаптера (E8 04 18 20) и залив его в свой свисток можно сразу получить на выходе совместимый с ТВ адаптер, то есть:
[size=13.3333px]код1 | 00000200: 12 01 00 02 00 00 00 40|E8 04 18 20 01 01 01 02 |
[size=13.3333px]Обращаю внимание, что править двоичный файл можно и нужно только HEX-редактором.
[size=13.3333px]Изменения от 23.04.2013
[size=13.3333px]Добавлена новая команда "u" - выводит информацию о количестве свободных блоков EFUSE, если EEPROM имеет EFUSE тип. Перед экспериментами с адаптером (и после) не помешает проверить количество свободных блоков, и принять решение о дальнейших действиях с EEPROM. Нулевое количество свободных блоков однозначно говорит о полной блокировке внутренней памяти.
[size=13.3333px]Рекомендуется ничего не делать с адаптером, если количество свободных блоков меньше 5.
[size=13.3333px]Пример выводимой в консоли информации на команду iwpriv ra0 e2p u[size=13.3333px]:
[size=13.3333px]код01 | //для незаблокированного RT5370 |
04 | Total EFUSE blocks = 45 |
07 | //для заблокированного RT5370, запись в него уже невозможна |
10 | Total EFUSE blocks = 45 |
[size=13.3333px]Драйвер (любой поддерживающий EFUSE), при неудачной записи, сам берет новый блок, и при каждой ошибке, не проверяет сколько осталось свободных блоков, поэтому при записи последнего блока, если происходит в нем ошибка - все блокируется окончательно.
[size=13.3333px]Например, если перезаписывать все 1024 байта EEPROM, то вероятность ошибок резко возрастет, и если есть 12 свободных блоков, а при записи произошло 10 ошибок, то после записи всех 1024 байт, останется только 2 свободных блока.
|