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

Как из дампа 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

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

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

  1. STR:

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

  2. Михаил:

    Здравствуйте! Подскажите, будет ли сохраняться «активация тюнера» при «обновлении» прошивкой, изготовленной данным способом? Что сделать с прошивкой или дампом, чтобы активация сохранялась? Актуально для приставок и прошивок без выхода в интернет (они тоже требуют активацию по сети, а как активировать — не ясно).

    • Виктор:

      Без интернета — не возможно активировать.
      Активация сохранится только, если прошивка от того же аппарата. Т.е. просто другая, или та же версия прошивки.
      Если прошивка от другого аппарата, то придётся активировать заново.
      Активация хранится не в прошивке, и в микросхеме памяти. И программатором, при обычном снятии дампа — не читается.

      • Михаил:

        Спасибо.
        Уточню. Делаю дамп приставки «модель 1» (без выхода в интернет), делаю из него прошивку для USB, как описано в статье. Загружаю полученную прошивку в «модель 2» через USB на той же плате и того же производителя (выхода в интернет нет и не будет). Активация слетает?
        Или: беру с «сайта производителя» готовую прошивку для «модель 1», убираю из неё проверку модели, исправляю к. с., «обновляю» через USB «модель 2». Активация опять слетает?
        Обычно активация привязывается к ID процессора и индивидуальна для каждого экземпляра.
        Модели — Lumax DVBT2-555HD и DV 2106HD (Год назад были на MStar). Отличие обнаружил только в названии и прошивках. Вторая не хочет работать с монитором через конвертер HDMI-VGA.

        • карта.ртрс.рф:

          при подключении к мониторам начинать с системы NTSC и с минимального режима 480p: http://dvbpro.ru/podklyuchenie-pristavki-k-monitoru/

          • Михаил:

            После прошивки с интернетом (не подошёл дисплей), прошивки дампа 555 (нет активации), прошивки 2106 «…all…bin» (нет активации), прошивки ещё чего-то (зависла на заставке), восстановления программатором «родного» дампа — приставка почему-то стала работать с этим монитором, как 555. И в PAL. Собственно, необходимость в перепрошивке отпала, но вопрос остался.

      • Михаил:

        Спасибо.
        Уточню. Делаю дамп приставки «модель 1» (без выхода в интернет), делаю из него прошивку для USB, как описано в статье. Загружаю полученную прошивку в «модель 2» через USB на той же плате и того же производителя (выхода в интернет нет и не будет). Активация слетает?
        Или: беру с «сайта производителя» готовую прошивку для «модель 1», убираю из неё проверку модели, исправляю к. с., «обновляю» через USB «модель 2». Активация опять слетает?
        Обычно активация привязывается к ID процессора и индивидуальна для каждого экземпляра.
        Модели — Lumax DVBT2-555HD и DV 2106HD. Отличие обнаружил только в названии и прошивках. Вторая не хочет работать с монитором через конвертер HDMI-VGA.

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


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

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