Итак, вот то, что я уже давно обещал и теперь выношу для всеобщего пользования.
Аварийное восстановление прошивки модемов E3372S и H
Иногда бывают в жизни ситуации, когда модем после перепрошивки умирает напрочь. Или мы сознательно что-то портим в конфигурации модема, после чего он перестает загружаться и опознаваться через USB-интерфейс. В данной ветке сплошь и рядом встречаются призывы о помощи от владельцев таких убитых модемов. Фирма Huawei штатно предусмотрела механизм для исправления таких ситуаций - он называется USB_boot, загрузка микропрограммы модема через USB.
Вначале капелька теории для пытливых умов (надеюсь, здесь есть такие). Кому неинтересно - пропускайте и переходите сразу к практической части чуть ниже .
После включения модема запускается специальная программа - Primary Bootloader (PBL). Эта программа лежит во внутренней, нестираемой памяти (ROM) Balong-чипа. В штатном режиме единственная функция PBL - это проинициализировать подсистему Flash-памяти и загрузить оттуда самый первый раздел - M3boot, вторичный загрузчик. Далее вторичный загрузчик запускается, загружает остальную чатсь микропрограммы модема... вообщем, описание остального процесса запуска модема выходит за рамки обсуждаемого здесь. Но возможна ситуация, когда PBL не находит на флешке раздела m3boot. Например, флешку только что запаяли в модем на заводе, и она еще совсем чистая. Или же кто-то любопытный, экспериментируя с прошивками, затер начало флешки. Тогда PBL входит в специальный режим - USB Boot. Кроме того, можно и явно указать PBL о необходимости войти в этот режим, замкнув на землю специальную точку на плате модема.
В режиме USBboot формируется USB-композиция с единственным USB-serial портом. В этом режиме модем идентифицируется как 12d1:1443, с нестандартным именем производителя (HUA WEI) и назанием продукта (USB COM):
[1103827.995613] usb 6-2: New USB device found, idVendor=12d1, idProduct=1443
[1103827.995617] usb 6-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[1103827.995620] usb 6-2: Product: USB COM
[1103827.995622] usb 6-2: Manufacturer: HUA WEI
[1103827.995911] option 6-2:1.0: GSM modem (1-port) converter detected
[1103827.996271] usb 6-2: GSM modem (1-port) converter now attached to ttyUSB0
Через этот порт можно загрузить специальный системно-независимый загрузчик-прошивальщик - usbloader, поставляемый со многими фирменными прошивками. Этот загрузчик инициализирует модем в режиме прошивки, как после выполнения команды AT^godload. И модем будет готов к записи в него любой существующей прошивки. Для заливки загрузчика используется специальный протокол, несколько похожий на Xmodem, для его реализации я написал специальную программу.
Но имеется один важный подводный камень. Стандартные загрузчики usbloader, идущие в комплекте с прошивками, при загрузке ЗАТИРАЮТ ВСЮ ФЛЕШКУ! В том числе и все разделы nvram. Если вы заранее не озаботились сделать копию nvram - восстановить модем полноценно будет невозможно. Придется заливать чужой nvram с чужими адаптивными настройками, и модем станет плохо работающим инвалидом. Поэтому я произвел патч загрузчика usbloader, выкинув из него процедуру стирания флешки. И советую НИКОГДА НЕ ИСПОЛЬЗОВАТЬ ФИРМЕННЫЙ USBLOADER! Используйте только мой, патченный, безопасный.
На этом с теорией все, переходим к практике.
Практическая часть
Для начала нам нужно перевести модем в режим USB-загрузки. Для этого разбираем модем, и находим под разъемом симкарты набор технологических контактных площадок. Для модема Е3372
S он будет выглядеть так:
На этой картинке я подписал все известные мне площадки:
+5V - шина питания, идущая от USB-разъема
GND - земляная шина
Rx - приемник аппаратного консольного порта
Tx - передатчик аппаратного консольного порта
Boot - контакт для перевода модем в режим аварийной загрузки.
Для модема E3372H контактные площадки расположены так:
Площадка, обозначенная красным - это контакт аварийной загрузки. Назначение остальных площадок пока неизвестно - как только у меня появится такой модем, сделаю полное описание.
Надо взять пинцет, или еще какую-нибудь подходящую железку, и соединить между собой площадки Boot (красная) и GND (черная). Вместо площадки GND можно использовать металлический корпус USB-разъема или любой из металлических экранов. После замыкания точки Boot на землю вставляем модем в разъем USB компьютера, и через секунду перемычку можно убирать.
Модем будет запущен в режиме аварийной USB-композиции с единственным последовательным портом. Далее с помощью программы balong-usbdload (прилагаемой к данному посту) в модем заливается загрузчик. Еще раз предупреждаю - НЕ ПЫТЙТЕСЬ ИСПОЛЬЗОВАТЬ ФИРМЕННЫЙ USBLOADER, идущий в комплекте с прошивками! используйте патченный usblsafe.bin, приложенный к данному посту! Иначе вы полностью потеряете nvram своего модема.
Запускается программа balong-usbdload из командной строки, формат ее такой:
balong-usbdload -p <имя устройства последовательного порта> <имя файла для загрузки>
Например:
$ ./balong-usbdload -p /dev/ttyUSB0 usblsafe.bin
Найдено 2 блоков для загрузки
Загрузка блока 0, адрес=00000000, размер=3020
Адрес: 00000800, пакет# 3 размер: 9724
Загрузка блока 1, адрес=57700000, размер=5720360
Адрес: 57c74800, пакет# 5587 размер: 2964
Загрузка окончена
По окончании загрузки модем отключается от шины USB, а затем подключается вновь, но уже в прошивочной композиции с тремя USB-serial портами. Порт с наибольшим номером и будет прошивочным портом. Теперь можно прошивать в модем любую прошивку. Прошивальщик я уже недавно опубликовал.
Для пользователей альтернативных операционных систем семейства Windows, коих здесь, к сожалению, большинство, был выполнен перенос программы balong-usbload на платформу windows. Сделал этот порт всем известный rust3028, за что ему полагается большое спасибо от всех местных виндузятников. Программа под виндой запускается в точности так же, из командной строки, а в качестве значения ключа -p используется номер COM-порта, образовавшегося в системе после подключения модема с замкнутой на землю площадкой Boot. Например, если этот порт в системе называется com6, то командная строка будет выглядеть так:
balong_usbdload -p6 usblsafe.bin
После перезапуска модема в режиме прошивки можно использовать штатные программы-прошивальщики, прилагаемые к каждой прошивке.
В Windows 8.1 порт аварийной загрузки определяется некорректно. Для исправления ситуации есть
решение от rust3028К данной статье я пркладываю программу balong-usbdload для платформ Linux-32, Linux-64, и Windows. Также прилагаются патченные безопасные загрузчики usblsafe для модемов E3372S (usblsafe.7z) и E3372H (usblsafe-3372h.7z).
Традиционно, исходные тексты программы лежат в
репозитории на гитхабе вместе с патченным usb-загрузчиком. Если нужна самая последняя версия программы - берите ее оттуда.
Обновление от 15.06.2015: rust3028 доработал win32-версию программы. Архив обновлен и в этом посте, и в репозитории. У кого старая версия - можете скачать заново.
balong-usbdload-lnx32.tar.gz ( 10.33 КБ )
baslong-usbload-lnx64.tar.gz ( 8.95 КБ )
usblsafe-3372h.7z ( 5.51 МБ )
usblsafe-3372s.7z ( 5.32 МБ )
balong_usbdload_win32.rar ( 34.3 КБ )
Сообщение отредактировал Abbat1985 - 09.07.20, 20:59Причина редактирования: В шапке