Как сделать Backup прошивки с помощью SP Flash Tool

В этом посте я расскажу о том как снять backup прошивки с практически любого аппарата на базе MediaTek с помощью SP Flash Tool и MTK Droid Tools. Также, отдельно, я рассмотрю случай, когда MTK Droid Tools по каким-либо причинам не видит аппарат, но есть доступ по ADB. Итак, приступим. Для начала скачаем все необходимое:

После того как мы скачали все необходимое, можно, например, создать в корне какого-нибудь папку Android и разложить распакованное содержимое архивов по папкам, т.е. драйвера в папку Drivers, Platform Tools в отдельную папку, SP Flash Tool в отдельную, MTK Droid Tools тоже в отдельную.

Далее включаем на своем устройстве Режим разработчика и активируем отладку по USB. Т.е. сначала заходим в Настройки -> О телефоне (Об устройстве) и кликаем несколько раз (5-7) по надписи «Номер сборки», до появления сообщения о том что Режим разработчика активирован. Далее переходим в меню Настройки -> Для разработчиков и ставим галочку на «Отладка по USB»:

включаем на своем устройстве Режим разработчика

После этого подключаем устройство к ПК и устанавливаем драйвера ADB (т.е. либо запустив AdbDriverInstaller.exe из архива, либо открыв диспетчер устройств и указав вручную путь к драйверам в папке Android ADB driver x64 для неизвестного устройства). В результате должно получиться так (Диспетчер устройств):

устанавливаем драйвера ADB

Устройство Android ADB Interface в диспетчере устройств подтверждает что у нас все готово к следующему шагу.

Запускаем MTK Droid Tools:

Запускаем MTK Droid Tools

Ждем пока устройство определится в нем и нажимаем кнопку «Карта блоков»:

нажимаем кнопку "Карта блоков"

После чего нажимаем кнопку «Создать scatter файл» и сохраняем получившийся файл (у меня он назывался MT6582_Android_scatter.txt) на диск. На этом этап подготовки закончен и можно приступать непосредственно к чтению данных.

Открываем получившийся файл в Notepad++ или Word (обратите внимание, обычный блокнот не подойдет) и находим в нем строчку partition_name: CACHE:

partition_name: CACHE

И запоминаем то, что у вас написано в графе linear_start_addr, в данном случае это — 0x3E900000.

Отключаем телефон от ПК и выключаем его, т.е. держим кнопку выключения питания и выбираем в меню «Отключение питания», также можно отсоединить и вставить батарею. Далее запускаем SP Flash Tool и переходим в нем на закладку Readback. Далее нажимаем кнопку Add. В результате в таблице появится одна строка:

В результате в таблице появится одна строка

Кликаем по ней, у нас появляется запрос выбора места сохранения файла ROM_0, выбираем папку, в которую мы его хотим сохранить и на следующем экране в поле Length вводим запомненное нами ранее число (linear_start_addr):

linear_start_addr

В итоге должно получиться что-то вроде этого:

sp_flash_tool_03

После чего подключаем выключенный телефон (!) к ПК. В этот момент желательно открыть диспетчер устройств. Пока никакие кнопки в SP Flash Tool на этом экране не нажимаем!

В момент подключения у вас определится неизвестное устройство MT65xx PreLoader и ОС предложит вам установить драйвера на него. На картинке ниже это наглядно показано. Лучше сразу перед подключением телефона открыть диспетчер устройств, чтобы «отловить» момент появления MT65xx PreLoader. Если устройство появится, а ОС не предложит автоматически установить драйвера, то это надо сделать вручную, кликнув правой кнопкой мыши на устройстве MT65xx PreLoader.

MT65xx PreLoader

Выбираем «Выполнить поиск драйверов на этом компьютере» и указываем папку в которой находится распакованное содержимое архива mtk_xp_vista_7_8_x32_x64.zip (т.е. к этому моменту вы должны распаковать архив куда-нибудь). После того как драйвера успешно установятся, картинка в диспетчере устройств должна поменяться на такую:

MT65xx PreLoader

Если драйвера установились — можно переходить к следующему шагу. Обратите внимание, что при подключении телефона Preloader USB VCOM Port может появляться всего на несколько секунд — это нормально, наша задача на этом этапе установить драйвера телефона, чтобы он определялся именно как Preloader USB VCOM Port, а не неизвестное устройство MT65xx PreLoader. Если вы вдруг не успели установить драйвера, а телефон включился — вытаскиваем батарею, отсоединяем телефон, вставляем батарею, подключаем телефон и повторяем процедуру.

Как только мы убедились что драйвера у нас установлены — отсоединяем телефон от ПК. Выключаем его, в открытом у нас SP Flash Tool нажимаем кнопку Readback и подключаем выключенный телефон к ПК. После этого у нас пойдет процесс считывания прошивки из телефона:

sp_flash_tool_04

Многие пишут о затруднениях возникающих именно на этом шаге. Попробую объяснить чуть подробнее. После того как вы нажимаете кнопку Readback — SP Flash Tool переходит в режим ожидания подключения телефона, т.е. подразумевается что до этого вы успели отловить момент когда выключенный телефон у вас определяется как MT65xx PreLoader и установить на него драйвера, чтобы в COM-портах у вас появился Preloader USB VCOM Port. Если вдруг по каким-то причинам SP Flash Tool написал об ошибке, или телефон не успел подключиться — может помочь следующая методика (все описанное справедливо только если вы корректно установили драйвера и при подключении телефона у вас появляется именно Preloader USB VCOM Port): отключаем телефон от ПК, вынимаем батарею, нажимаем кнопку Readback, подключаем телефон с вытащенной батареей. В SP Flash Tool пойдет красная полоска (Download), за это время быстро вставляем батарею назад, если мы успели, то пойдет синяя полоска Readback с процентами, как на картинке:

sp_flash_tool_05

Ждем пока процесс завершится. Создание backup’а может занимать 10-15 минут. Просто смотрим на бегущие проценты и ничего не трогаем 😉 По окончании процедуры чтения у вас появится надпись Readback Ok:

readback_ok

Пока у нас делается Backup самое время пояснить что же такое scatter файл и что представляет собой файл ROM_0, который мы получим на выходе. Память телефона — это обычная EMMC Flash, которая разбита на определенные разделы. Scatter файл это и есть файл описания разделов (так, например в Scatter’е есть разделы PRELOADER, RECOVERY, LOGO, ANDROID и т.п.). Назначение разделов различно, так, например в Recovery — содержится образ recovery, в logo — логотип, использующийся при загрузке системы, в Android — образ system и т.п. Файл ROM_0, который мы получаем на выходе по сути представляет собой сплошной дамп EMMC Flash в одном файле. Но чтобы воспользоваться полученным backup’ом прошивки, например, для восстановления другого аналогичного аппарата — нам еще будет необходимо разбить его на разделы. Здесь я опишу несколько способов как это сделать. Первый и самый распространенный — через MTK Droid Tools. Допустим у нас уже есть файл ROM_0 сделанный с помощью SP Flash Tool.

Включаем питание устройства (телефона) и даем ему загрузиться, после чего вновь запускаем MTK Droid Tools (режим отладки по USB на телефоне при этом, естественно, должен быть включен, а драйвера ADB установлены на ПК), переходим на закладку root, backup, recovery и нажимаем кнопку «Создать бэкап из ROM_ флэштула»:

Создать бэкап из ROM_ флэштула

Выбираем получившийся у нас на предыдущем шаге ROM_0 и в окне лога видим примерно следующее:

— Папка сохранения на компьютере: E:\Android\MtkDroidTools\backups\KINGSING_S1_141117_ForFlashtoolFromReadBack_150512-005322\
— scatter сохранен в файле:
E:\Work\Мегафон Login Plus\MtkDroidTools\backups\KINGSING_S1_141117_ForFlashtoolFromReadBack_150512-005322\MT6582_Android_scatter.txtкопирование завершено
— preloader.bin …скопировано … cut OK
— MBR …скопировано
— EBR1 …скопировано
— pro_info …скопировано
— nvram.bin …скопировано
— protect_f …скопировано
— protect_s …скопировано
— seccfg …скопировано
— uboot.bin …скопировано
— boot.img …скопировано

Ну и т.д. Теперь в папке сохранения, у меня это E:\Android\MtkDroidTools\backups\ у нас появляется папка с полным backup’ом нашей прошивки, разбитым на разделы (т.е. каждый раздел в отдельном файле):

backup

На этом процесс создания Backup’а прошивки завершен. Если вы только хотели узнать как сделать backup прошивки с помощью SP Flash Tool и у вас все получилось, дальше можно не читать.

Для продвинутых

А что делать если MTK Droid Tools «не видит» телефон? Или же не получается создать scatter файл или разбить получившийся файл ROM_0 на разделы? Как получить карту разделов и есть ли возможность «разрезать» файл ROM_0 вручную? Такая возможность есть. Чтобы получить карту разделов на MTK 65xx нужно в консоли ADB дать команду cat /proc/dumchar_info — т.е. запустить в консоли adb shell и уже там набрать эту команду:

cat /proc/dumchar_info

Если вдруг телефон по каким-то причинам не видится и через ADB (в этом случае я советую ознакомиться с мануалом по ADB, может быть проблема в VEN_ID устройства и его нужно просто прописать в %USERPROFILE%\.android\adb_usb.ini, то ту же самую команду можно дать и в самом телефоне, установив Terminal Emulator for Android из Google Play:

Screenshot_2015-05-12-01-07-12

Как видите — результат точно такой же и linear_start_address раздела cache можно взять и отсюда. Да, к слову, в новых устройствах, например на базе MTK 6752, таких как Билайн Про, ZTE Q Lux и т.п. карту разделов можно получить с помощью cat /proc/partinfo. MTK Droid Tools с этими устройствами вообще не работает.

Методика получения адреса старта раздела cache, который нужен для получения ROM_0 с помощью SP Flash Tool у нас теперь есть. Также мы знаем адреса (смещения) и размеры каждого из разделов. Т.е. чтобы «порезать» ROM_0 на разделы — использовать MTK Droid Tools нам вовсе не обязательно. Это можно сделать «руками» в любом Hex-редакторе, поддерживающим функцию выделения и сохранения блока в файл (я пользуюсь консольным HIEW). Ну и в качестве примера давайте «вырежем» раздел с Recovery из получившегося ROM_0 файла.

Мы знаем (из scatter’а или из dumchar_info) его linear_start_addr: 0x4180000 и partition_size: 0x1000000. Открываем ROM_0 в HIEW и переходим на 0x4180000. Т.е. в консоли делаем hiew32 ROM_0, затем нажимаем F5 и вбиваем адрес начала раздела — 4180000:

hiew_01

Как вижно по 4180000 у нас находится сигнатура ANDROID!, что говорит нам о том, что мы на верном пути 😉 Адрес конца раздела вычисляется как linear_start_addr+partition_size-1 = 0x517FFFF в нашем случае. Нажимаем в HIEW * (звездочку на доп. клавиатуре) для начала выделения блока (если подвигать стрелками вверх / вниз / вправо / влево, то мы видим как блок начинает выделяться цветом) и либо спускаемся до 0x517FFFF, либо делаем это через F5:

hiew_02

И заканчиваем выделение блока, опять же через «серую» * (на доп. клавиатуре). После этого нажимаем F2 — Put block (сохранение блока в файл):

hiew_03

И раздел recovery у нас записан. Точно также можно вырезать из ROM_0 любой другой раздел. Как вы понимаете MTK Droid Tool при этом нам вообще не нужен.

Для упрощения процедуры можно также написать скрипт / программу, которая будет делать это автоматически для всех разделов, но у меня честно говоря не хватает времени на это, да и не так часто возникает эта задача, так что HIEW’а мне вполне хватает для этих целей.

p.s. На этом пока все … пост получился как «черновой вариант», т.к. писался на скорую руку, возможно позже я его дополню, если будут какие-то непонятные моменты. И конечно же, как всегда, буду раз вашим комментариям и вопросам …

p.p.s. Как меня успели немного поправить, в /proc/dumchar_info содержатся не linear_start_addr из scatter’а, а physical_start_addr. Т.е. в приведенном примере для раздела с recovery мы имеем:

linear_start_addr: 0x4180000
physical_start_addr: 0x2D80000
partition_size: 0x1000000

И в /proc/dumchar_info мы в графе StartAddr мы видим именно physical_start_addr. Но если мы взглянем на размер первого раздела (preloader), то становится понятно как перевести physical_start_addr в linear_start_addr, если к 0x2D80000 добавить 0x1400000 (это как раз размер preloader’а), то как раз получается 0x4180000.

decker.su

  • Ruslan Soprano

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

  • Вячеслав Еремеев

    Для процессоров MT67ХХ эти инструкции не подходят. На этапе создать скатер файл уже получается затык.

    • Спасибо за информацию, обязательно обновим

  • gendalf

    Что мной использовалось:
    SP_Flash_Tool_v5.1628_Win
    SP_Flash_Tool_Win_v5.1624.00
    SP_Flash_Tool_v5.1352.01
    смартфон Lenovo s90-a
    scatter-файл скачал из интернета (мтк 6592)
    Цель выгрузить фото с телефона, телефон с разбитым модулем.
    Суть проблемы: при запуске RAM Test ничего не происходит.
    Делал все по инструкции, долго мучился с драйверами. Сейчас драйвер Android ADB Interface.