× Закрыть
Цифровое эфирное телевидение на территории РФ бесплатное. Остерегайтесь мошенников! -->

Как из дампа MStar сделать USB-прошивку

Напомню, что теперь даже ребенок, не вскрывая, может выполнить Сохранение дампа флеш-памяти приставок на MStar. Это готовый дамп — для программатора.

И также из дампа легко сделать файл для аварийного восстановления (а точнее автоматического обновления прошивки) — flash.bin. Подробно рассказано в конце: Восстановление приставки на MStar после неудачной прошивки.

Но — реагировать или нет на flash.bin — определяется текущей прошивкой, находящейся в приставке.
Если в ней изначально отключена реакция на flash.bin, то этот файл будет проигнорирован.


Некоторые пользователи (например, прошившие чужой прошивкой приставку и при этом она загрузилась) хотели бы иметь возможность не искать программатор, выпаивать флеш-память, прошивать дамп и запаивать обратно, а попробовать — из уже имеющегося дампа — сделать обычную прошивку для USB.

Кроме того, USB-прошивку можно заливать не только через меню, но и подключившись к UART процессора, ведь у многих, чужая прошивка приводит к тому, что приставка уже не загружается до конца, останавливаясь на заставке.

Ранее о формировании USB-прошивки в общих чертах уже не раз было рассказано. Да и многие давным-давно всё это умели и умеют.

На первый взгляд может показываться, что всё очень сложно, потому что так много всего написано, но на самом деле — всё легко, и это можно сделать буквально за 15 минут. И описать в 3 предложениях.

Просто это своего рода — Инструкция, поэтому всё так подробно, с картинками и примерами.

Сначала будет рассмотрено воссоздание USB-прошивки для процессоров MSD, как наиболее известное:

Структура USB-прошивки для MSD:

• Заголовок, 4096 байт.
• Данные.
• Контрольная сумма Заголовка + Данные, CRC32 (4 байта, в обратном порядке).

А во второй части — для новых процессоров MSA, но действия примерно те же, вплоть до парадоксальных (на осознание несуразности которых ушло время).

Для всего этого потребуется любой HEX-редактор.


Итак, в чём особенность приставок на процессоре MStar: файл USB-прошивки имеет Заголовок, в котором находится загрузочный скрипт, содержащий команды для загрузки прошивки в приставку.

Все эти команды хранятся в обычном текстовом виде.

Сразу подчёркнуты самые важные 3 числа (а 4 = 3), которые и предстоит найти.

Например, 323b7cобъём Данных (это без учёта 0x1000 (4096) байт Заголовка и 4 байт CRC32).

или всё тоже самое в более привычном для чтения виде:

cusid 169b 3b 1 SMC_U01 0x0CFF 1244054
spi_wrc 0x80001000 0 323b7c
setenv usb_complete 1
setenv usb_upgrade 0
setenv bootcmd ‘ spi_rdc 0x80b00000 0x7001c 0x2b3b60; LzmaDec 0x80b00000 0x2b3b60 0x80000180 0x81000000; go 0x80000224;
saveenv
reset

Вот примерно подобное и надо создать, но только уже без первой строки cusid (поэтому и перечеркнуто).

cusid — команда проверки «свой-чужой», поэтому лучше воссоздать USB-прошивку уже без неё.

Проблема восстановления в том, что после исполнения загрузочного скрипта, Заголовок USB-прошивки — нигде в дампе не сохраняется.

Поэтому основная задача — воссоздание заголовка для будущей прошивки — из той текстовой информации, которая всё-таки есть в дампе.

Несмотря на то, что заголовок текстовый, создавать его надо только в HEX-редакторе.

В конце дампов процессоров MSD/MSA можно увидеть текстовые данные — это переменные окружения.

Искать лучше всего, например, по команде — spi_rdc

Пример переменных в дампе от MSD:

или всё тоже самое в более привычном для чтения виде:

bootdelay=0
baudrate=115200
preboot=echo;echo Type «help» for more commands.
MS_BOARD=BD_MST204A_D01A_S
stdin=serial
stdout=serial
stderr=serial
logo_cmd=boot_logo 0 0 1 1
bootcmd=usb exit;spi_rdc 0x80B00000 0x5001C 0x2DE303; LzmaDec 0x80B00000 0x2DE303 0x80000180 0x81000000; go 0x80000224;
info_exchange=spi
CUSTOMER_OUI=0x169B
AP_SW_MODEL=0x0001
AP_SW_VERSION=0x0001
HW_MODEL=0x0001
HW_VERSION=0x0001

Выделенные числа как раз и являются одними из важных для заголовка. Но тут нет самого 1 числа — объёма Данных.

Раньше получить 1 было очень просто: 2 + 3 (например, как видно у заголовка в самом начале).

Но в современных прошивках стали добавлять ещё какой-то дополнительный блок данных, связанный с сетевыми приложениями.

И если повезёт, то среди переменных окружения будет готовая — общая длина файла будущей USB-прошивки:

filesize

Например, filesize=336DF8 (это уже с учётом 0x1000 (4096) байт Заголовка + 4 байта Контрольной суммы).

И, соответственно, разыскиваемый нами объём блока Данных [1] = filesize–0x1000–4

Но наличие переменной filesize большая редкость, поэтому придётся прикинуть просто на глаз примерное окончание блока Данных в дампе, на собственное усмотрение.

Дамп лучше листать — с конца (не обращая внимание на пустышки с повторяющимися 00, FF или какой-то рыхлый мусор) до тех пор, пока не начнётся плотный поток различных кодов:

В качестве конца блока Данных сам выбрал 36BB2C — теперь это и есть объём блока Данных. А весь остальной выделенный хвост дампа, начиная с 36BB2C — теперь можно и нужно удалить.

При желании можно оставить 00 и побольше (допустим несколько 00-строк), главное, запомнить Смещение (Offset).

Итак, определили все 3 числа, поэтому создаём файл Заголовка длиной 4096 байт и вбиваем в него эти числа:

Пример этого файла заголовка в архиве.

И добавляем заголовок в начало нашего уже обрезанного с конца дампа. Ешё раз напомню:

Структура USB-прошивки для MSD:

• Заголовок, 4096 байт.
• Данные.
• Контрольная сумма Заголовка + Данные, CRC32 (4 байта, записанные в обратном порядке).

У общего файла Заголовка + Данные подсчитываем его контрольную сумму CRC32.

Подсчет можно сделать с помощью одной из программ или же в Интернете, выбрав вариант CRC-32B:
нажимаем кнопку Выберите файл и указываем на подготовленный файл:

и затем внизу нажимаем кнопку Преобразовать файл:

После загрузки подготовленного файла и подсчёта CRC-32 результат будет выглядеть примерно так:

HEX: B8C5126C

Теперь полученные 4 байта: B8 C5 12 6C добавляем к файлу в обратном порядке: 6C 12 C5 B8:

Всё, прошивка готова.




А теперь для процессоров MSA. Напомню, ключевое отличие — Заголовок стал длиной 16384 байта.

Структура USB-прошивки для MSA:

• Заголовок, 16384 байт.
• Данные, выровненные до ближайшего старшего адреса (как правило, до 0x*****000).
• Контрольная сумма Заголовка, CRC32 (4 байта, записанные в обратном порядке).
• 20 нулевых байт (0x00).

Парадокс, над которым пришлось долго ломать голову, в том, что здесь считается Контрольная сумма только Заголовка.

По привычке, пытался подсчитать CRC32 у различных вариантов Заголовка + Данные, но приставка упорно ругалась — Error: CRC error!
Потому что, как оказалось, у прошивок MSA проверяется только целостность Заголовка.
Видимо, целостность самого блока Данных проверяется позже.

Итак, как и у MSD, в заголовке у MSA — текстовый загрузочный скрипт, но с гораздо бОльшим числом команд и различных переменных.

Сразу отмечу наиболее важные, которые потом и предстоит определить из дампа.

И это всё те же самые — 3 числа:

или всё тоже самое в более привычном для чтения виде:

fatload usb 0 80000000 $(ForceUpgradePath)
spi_wrc 80004000 0 3bc000

setenv usb_complete 1
setenv usb_upgrade 0
setenv OAD_NEED_UPGRADE 0
setenv OAD_TRIGGER_TYPE 0
setenv bootcmd ‘ spi_rdc 0x80b00000 0x39028 0x338f16; LzmaDec 0x80b00000 0x338f16 0x80000180 0x81000000; go 0x80000224;
setenv upgrade_mode null
setenv MstarUpgrade_complete 1
setenv bl_jpd_read_addr 0x01f1c800
setenv bl_jpd_read_size 0x00100000
setenv bl_jpd_write_addr 0x0201c800
setenv bl_jpd_write_size 0x003fc000
setenv bl_jpd_inter_addr 0x02418800
setenv bl_jpd_inter_size 0x00630000
setenv bl_dfb_framebuffer_addr 0x01b28000
setenv ve_buffer_addr 0x02a48800

saveenv
reset

Сразу оговорюсь о последних 8 переменных: во многих официальных прошивках их значения равны 0x00000000, при этом потом уже в дампе — они имеют конкретные значения, т.е. сама прошивка всё равно знает их значения (можно посмотреть и через команду printenv). Поэтому не вижу смысла восстанавливать их значения из дампа. Но кто желает, может вбить точные значения из дампа.

Итак, как обычно, идём в конец дампа или просто через Поиск строки, например, spi_rdc

Находим область с переменными окружения и видим там нужные нам 2 и 3 число:

Также как у MSD, если повезёт, то среди переменных окружения будет готовая — общая длина файла будущей USB-прошивки:

filesize

Например, filesize=3C6018 (это уже с учётом 0x4000 (16384) байт Заголовка, 0x4 (4) байт Контрольной суммы и 0x14 (20) нулевых байт).

И тогда, разыскиваемый нами объём блока Данных [1] = filesize–0x4000–0x4–0x14

Но, как уже отмечалось, наличие переменной filesize большая редкость, поэтому также как и с MSD, просматривая с конца дампа, ищем плотный поток различных кодов:

Но, в отличие от MSD, у MSA официальный конец Данных — ближайший старший адрес строки, как правило, оканчивающийся на 0x*****000:

В данном случае, это — 0x3C2000, а весь остальной выделенный хвост, начиная с 0x3C2000 — отбрасываем.

Итак, все 3 числа определили, вбиваем их в файл заголовка длиной 16384 байта:

Пример этого файла заголовка в архиве.

Подсчитываем контрольную сумму CRC32 файла Заголовка. В данном случае — 4D 95 D9 32.

Ещё раз напомню:

Структура USB-прошивки для MSA:

• Заголовок, 16384 байт.
• Данные, выровненные до ближайшего старшего адреса (как правило, до 0x*****000).
• Контрольная сумма Заголовка, CRC32 (4 байта, записанные в обратном порядке).
• 20 нулевых байт (0x00).

Итак, всё собираем вместе: добавляем Заголовок в начало нашего уже обрезанного с конца дампа,
затем сзади добавляем 4 байта CRC32 в обратном порядке (т.е. 32 D9 95 4D ) и ещё 20 нулевых байт.

Т.е. концовка получившийся USB-прошивки выглядит вот так:

Если что-то непонятно в структуре начала и конца USB-прошивок и дампов MSD и MSA, то можно посмотреть на различные заводские прошивки и слитые дампы.


Напомню, что прошивки можно загружать не только в полностью работающую приставку через меню, но и подключившись с помощью любой терминальной программы с обычными параметрами порта 115200 8N1 — через любой преобразователь TTL-RS232 (например, в программаторе CH341A) — к контактам UART процессора MStar.

В момент включения приставки быстро нажимать, например, Enter и попадём в консоль загрузчика.

Загрузка USB-прошивки процессора MSD:

« MStar »# setenv usb_upgrade_path usb_MSD.bin
« MStar »# setenv usb_upgrade 1
« MStar »# saveenv
« MStar »# reset

Название файла прошивки может быть любым.

Загрузка USB-прошивки процессора MSA:

k5ap# usb start 0
k5ap# fatload usb 0 80000000 usb_MSA.bin
k5ap# spi_wrc 80004000 0 3c2000 (где 3c2000 — длина блока Данных [1] прошивки, видна в заголовке)

offset 0x0, size 0x3C2000
initialization done!
Erasing…
Writing…
Verifying…

k5ap# setenv usb_complete 1
k5ap# setenv usb_upgrade 0
k5ap# setenv upgrade_mode null
k5ap# setenv MstarUpgrade_complete 1
k5ap# saveenv
k5ap# reset

т.е. по сути сделать всё то же самое, что указано в заголовке.

На всякий случай, напомню, что у MSA команда help не работает:

k5ap# help
Unknown command ‘help’ — try ‘help’
k5ap# ?
Unknown command ‘?’ — try ‘help’

Стандартное обновление через меню или же через UART помогает и в тех случаях, когда микросхема флеш-памяти — слишком новая и программатор о ней ещё ничего не знает, дамп не прошивается, приходится пытаться указывать другие какие-то более известные микросхемы и пробовать.
А когда обновляете через приставку, то она об этом типе флеш, естественно, знает.

После любых прошиваний не забудьте — сбросить в заводские настройки.


Все вышеуказанные операции проводить с флешкой, отформатированной FAT32.
Если что-то не получается, пробовать с другой флешкой, отформатированной FAT32.

И как всегда стоит ещё раз напомнить:

ВСЁ, ЧТО ВЫ ДЕЛАЕТЕ СО СВОЕЙ ПРИСТАВКОЙ, ВЫ ДЕЛАЕТЕ НА СВОЙ СТРАХ И РИСК!

Если что-то пойдёт не так и приставка вообще не загрузится, то всегда надо быть готовым обратиться к программатору: Восстановление приставки на MStar после неудачной прошивки.


Офф-топ: О работе приложения IPTV

У новых процессоров MSA среди переменных окружения (printenv) появилась интересная:

IPTV_data_size=23644

Если её там нет, то при запуске приложения IPTV будет ошибка:

get IPTV_data_size Failed!!

и она будет создана автоматически.

А если она уже была, то при запуске IPTV будет показано:

szbuf = 23644

Судя по названию, связана с размером какого-то буфера IPTV, но смущает очень маленький размер.

В любом случае, теперь появилась возможность для экспериментов с размером буфера, заходя в консоль и устанавливая свой размер, например:

k5ap# setenv IPTV_data_size 64000
k5ap# saveenv
k5ap# reset

и при запуске IPTV видно:

==== Memory usage====================
u32PoolSize = 0x95ae40
u32FreeSize = 0x8c4a90
u32LargestFreeBlockSize = 0x8c4a84
max usage = 0x8c4a90
min block free size = 0x0

Start decode DB …Decodesize = 0x8
szbuf = 64000

Причём, например, если у приставки изначально размер IPTV_data_size был 292 байта, то после загрузки плейлиста на 107 каналов стало:

parsing file…
szbuf = 230424

Но когда подставил плейлист уже на 282 канала, то размер буфера так и остался прежним:

szbuf = 230424

Пока сложно сказать однозначно за какой именно буфер IPTV она отвечает. Но тот факт, что IPTV_data_size добавили в переменные окружения, говорит о том, что она действительно важна.

И эта же переменная используется для приложения YouTube:

==== Memory usage====================
u32PoolSize = 0x8ca000
u32FreeSize = 0x836ec0
u32LargestFreeBlockSize = 0x836eb4
max usage = 0x836ec0
min block free size = 0x0

Start decode DB …Decodesize = 0x38534
szbuf = 230708



ObjLoader_init exit
ObjLoader_Demo
object file had loaded !!
FFMPEG VERSION : 3.4.2
eYoutubeCb = 0x7000E
http code:200
szbuf = 230708

Как из дампа MStar сделать USB-прошивку
5 (100%) Всего оценок: 7

Задать вопросы о цифровом телевидении можно на форуме DVBpro

1 отзыв к записи " Как из дампа MStar сделать USB-прошивку "

  1. STR:

    Поначалу CRC для MSA получал с помощью UART — приставка их сама выдавала (после определенных действий). После прочтения http://dvbpro.ru/sohranenie-dampa-flesh-pamjati-pristavok-na-mstar/ , прицепился к фразе «можно изменить соответствующие параметры и конечно же пересчитать контрольную сумму измененного заголовка» и добывал CRC как описано в статье. Лишние нули не оставляю, т.е. если смотреть на пример, то CRC у меня начинался бы с адреса 003C1970. Сброс к заводским после перепрошивки приставки на процессоре MSA делаю всегда, т. к. было пару раз, что экспериментируя с прошивками забывал это сделать до выключения аппарата из сети. После включения — кирпич на заставке и соответственно требуется паяльная станция и программатор.

Оставьте ваш комментарий


Контакты | Сотрудничество | Партнеры | ТВ программа | О сайте | Оптовикам | Конфиденциальность

Все права защищены © 2010-2019, Цифровое телевидение. Копирование материалов разрешено только при установке прямой ссылки на DVBpro.ru
 Желтые страницы по спутниковому и кабельному ТВ Мир новостей спутникового и эфирного ТВ!