Поискав в интернете инструкции по прошивке android-устройств пришел к выводу что 90% всех решений основываются на Windows, что, как минимум замечательно (ведь андроид сам работает на ядре линукс) и немного обидно: что делать пользователям Linux когда нужно прошить смартфон? Ставить Windows? Так как последний пункт особенно раздражал, было устроено решение написать инструкцию на русском языке, собранную по крупицам из интернета (где в основном все на англ.) + свые решения. Инструкцию по созданию backup’а andriod на процессорах MTK в операционной системе ArchLinux. Думу многим должна быть полезна, в том числе и мне как памятка, доступная практически отовсюду. Далее, как обычно в таких ситуациях, следует предупреждение: все что вы делаете, вы делаете на свой страх и риск. Творец данной статьи никакой ответственности за возможную порчу оборудования не несет.
Основываясь на клавиатурах по прошивке (называют содержимое энергонезависимой памяти компьютера или любого цифрового вычислительного устройства — микрокалькулятора, сотового телефона, GPS-навигатора и т. д., в которой содержится его) дроид с MTK под виндовс яcно видно, что основным инструментом здесь выступает прога SP Flash Tool. В какой мере я понял эта программа является в какой-то степени аналогом линуксому dd: считывает и вписывает этые на смартфон поблочно с тем лишь отличием, что делает это с выключенным смартфоном. К счастью эта прога имеется и для linux, найти ее можно здесь. Скачиваете архив, разархивируете, находите файл flashtool, кидите. Далее. Для работы SP Flash Tool необходим так называемый scatter файл — это обычный текстовый файл с перечнем разделов из памяти смартфона с указанием смещения начала соответствующего обличила относительно физического нуля смартфонной памяти. Смещение это указывается в шестнадцатиричной системе счисления. Смотрит scatter-файл примерно так:
PRELOADER 0x0
{
}
...
На виндовс этот файл (именованная область данных на носителе информации) получают с помощью программы MTKDroidTool, какой-никакая хоть и работает под вайном, но заставить ее увидеть телефон не вышло. Можно конечно порыскать в вебе прошивку для своей модели телефона и из нее взять scatter-файл, но лично я такой вид не рассматривал, так как для бэкапа «собственного» телефона хочется использовать «свои» же файлы. К тому же, искает ведь необходимые этые MTKDroidTool под виндовс, значит и в линуксе их можно достать. Как оказывается, да. «Достать» эти данные возможно из файла /proc/dumchar_info на самом телефоне. Этот файл (по моим надзорам присутствует на большинстве моделей смартфонов на процессоре MTK). Он даёт как раз необходимую и наиболее полную данные, требующуюся для создания scatter-файла. Выглядит примерно вот так:
Part_Name Size StartAddr Type MapTo
preloader 0x0000000000600000 0x0000000000000000 2 /dev/misc-sd
...
Кроме этого файла встречаются также и другие, например /proc/mtd, но в них в основном информация только о примонтированных разделах, а нам нужны все, в том числе и не примонтированные, поэтому эти файлы не подойдут в рамках сегодняшной статьи. Поэтому тем, кто не нашел в своем смартфоне файл dumchar_info данная статья будет не до конца полезна.
Получить этот файл из смартфона можно тоже разными способами (например в самом смартфоне скопировать его на SD-карту, а далее с карты на компьютер), но мы пойдем некоторым путем. Скопируем этот файл со смартфона на компьютер (] — «вычислитель») — устройство или система, даровитая выполнять заданную, чётко определённую, изменяемую последовательность операций) с помощью ADB. Для этого водворим android-tools в состав какого входит adb:
# pacman - S android-tools
Далее, для того чтобы пк правильно распознал ваш телефон, необходимо написать правило udev. Кроме этого на самый-самом смартфоне нужно подсоединить «Отладку по USB». Для этого на смартфонах с android версии до 4.2 в меню нужно отыскать и активировать одноименный пункт, а на смартфонах с android версией старше 4.2 необходимо раскрыть Меню -> Настройки -> О модели и 7 раз нажать на строку с номером сборки. После данного будет доступным меню разработчика в котором и находится требуемая настройка. Правило для udev станем строчить в соответствии с инструкцией на ArchWiki. Для его написания нам необходимы «VENDOR ID» и «PRODUCT ID» смартфона. Дабы их заполучить подключаем смартфон к компьютеру usb-кабелем и вводим в терминале команду lsusb. В выводе какой-никакой нужно найти строку, соответствующую вашему смартфону (мобильный телефон, дополненный работоспособностью карманного персонального компьютера). Выглядеть она будет примерно так:
Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp.
Из этой строки определяем что VENDOR ID = 0bb4, а PRODUCT ID = 0c8d.
Теперь непосредственно напишем закон udev: творим файл /etc/udev/rules. d/51-android. rules со следующим содержимым:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="VENDOR ID", ATTRS{idProduct}=="PRODUCT ID", MODE="0660", GROUP="adbusers"
Чтобы это правило вступило в силу перезапускаем все правила udev командой:
# udevadm control --reload-rules
И еще одно: для доступа обычному пользователю (не root) к ADB-устройствам необходимо чтобы этот пользователь состоял в группе adbusers. Поэтому добавим нашего пользователя в эту группу:
# gpasswd - a adbusers
Чтобы добавление в группу заместило в силу необходимо перелогиниться в системе. Итак, после всех этих манипуляций может быть проверить, видит ли Arch смартфон. Подключаем смартфон (мобильный телефон, дополненный функциональностью карманного персонального компьютера) по USB к компьютеру и вводим в консоли:
$ adb devices
Тут команда уже от пользователя (префиксы $ и # указывают на пользователя и рута соответственно). Если вывод схож на данный:
List of devices attached
HT07VHL00676 device
Значит все в порядке и телефон найден и различён компьютером. Если же нет, то еще раз внимательно проверьте корректность созданного правила udev. Сейчас дабы получить файл dumchar_info достаточно выполнить команду:
$ adb pull /proc/dumchar_info
И файл окажется в рабочей директории.
Далее нужно составить сам scatter-файл. Опять же есть несколько путей для решения этой задачи: например вручную «набирать» этот файл, копируя и суммируя нужные данные из dumchar_info. Но мы пойдем путем автоматизации данного процесса, так как вручную очень легко можно ошибиться в шестнадцатиричных значениях. А в деле прошивки устройств такого семейства оплошности с большой долей вероятности могут привести к «окирпичиванию» устройства. Поэтому я накидал script для этой операции. Скрипт собирает и вычисляет необходимые данные в нужной очередности и хранит их в файле с именем _my_scatter_.txt. Собственно сам скрипт:
#!/bin/bash
# Проверка введенных данных
if [ $# != 1 ] && [ ! - f $1 ]; then
echo "Введено неправильное имя файла.
Использование: script файл_dumchar_info"
exit
fi
# Приобретение данных
names=(`grep 0x $1 | awk '{print $1}' | tr '[a-z]' '[A-Z]' | tr '[a-z]' '[A-Z]'`)
sizes=(`grep 0x $1 | awk '{print $2}' | sed 's/x0*/x/g' | tr '[a-z]' '[A-Z]'`)
start=(0X0)
for ((i=1; i<${#names[@]}; i++)); do
start_prev=`echo ${start[$i-1]} | sed 's/^0X//g'`
size_prev=`echo ${sizes[$i-1]} | sed 's/^0X//g'`
start+=(`echo "obase=16;ibase=16; $start_prev + $size_prev" | bc | sed 's/^/0X/g'`)
done
# Вывод ранного scatter файла для выбора пунктов установки префикса __NODL_
for ((n=0; n<${#names[@]}; n++)); do
echo "`echo $n+1 | bc` ${names[$n]} `echo ${start[$n]} | tr '[A-Z]' '[a-z]'`"
done
echo "
Введите через пробел номера пунктов, к которым необходимо добавить префикс __NODL_. Необходимые пункты можно посмотреть в сети в scatter-файлах для вашей модели телефона:
"
read nn
prefix=($nn)
# Приложение префиксов к именам блоков и обновление массива с именами блоков (многозначный термин, фамилия и топоним)
for k in ${prefix[@]}; do
names+=([$k-1]=`echo __NODL_${names[$k-1]}`)
done
# Запрос на ввод изменения процессора
echo "
Введите модель процессора вашего android-устройства (четыре числа без пробела):
"
read mtk_ver
# Высокомерничаем имя файлу
file_name=$(echo MT${mtk_ver}_my_scatter_`date +%d-%m-%y`.txt)
# Вывод в scatter файл (кликанная область данных на носителе информации)
for ((n=0; n<${#names[@]}; n++)); do
echo "${names[$n]} `echo ${start[$n]} | tr '[A-Z]' '[a-z]'`
{
}" >> $file_name
done
echo "
Выполнено! Ваш scatter-файл `echo $file_name` сохранен в "$PWD.
Скрипт помимо получения scatter файла дает возможность перед его сохранением указать блоки, к которым будет добавлен префикс _NODL (т. е. No Download — не брать). Используется префикс как служебная информация для SP Flash Tool и означает что отмеченный им блок нужно проигнорировать и не загружать в устройство. Можно, конечно, вручную снять галочки с «ненужных» для загрузки блоков, но раз мы пишем скрипт, то пусть он и это делает. Обычно в категорию «ненужных» попадают следующие блоки: PMT, NVRAM, MISC, FAT, BMTPOOL и раздельные другие. Для каждой модели смартфона такие блоки индивидуальны, поэтому крайне вожделенно все же найти scatter-файл от какой-нибудь прошивки для вашей модели телефона в интернете и сравнить с только что созданным. На вполне резонный вопрос зачем тогда такая морока с самостоятельным покупкой scatter-файла, если все равно пользуемся скачанным отвечу, что скачанный файл используется только для выяснения блоков, требующих префикса __NODL_. Основную же информацию о положении и размере этих блоков мы получаем сами и однозначно актуальную для своей модели телефона, в то время как в файлах из интернета смещения и размеры разделов могут отличаться от ваших настоящих, что критично. Теперь, после извлечения scatter-файла возможно перейти непосредственно к созданию backup’а своей прошивки. Запускаете файл flashtool из распакованной папки с прошивальщиком. Указываете созданный scatter-файл. Далее переходите во вкладку Read back. Добавляете строку с параметрами сохраняемого блока нажатием кнопки Add.
Двойной клик на созданной строке — появится окно для ввода имени создаваемого бэкапа. Назовите его например FULL_ROM и выберите директория сохранения. После нажатия Ок появится второе окно с двумя полями. В начальном — шестнадцатиричное значение смещения начала копируемого блока от начала физической памяти устройства (кстати, здесь нужно упомянуть что SP Flash Tool не работает с блоками памяти более 4Гб. Такое выходит ограничение). Во втором — шестнадцатиричное значение длины считываемого блока. Для цельного дампа памяти телефона в первом поле нужно указать нулевое значение, т. е. 0x0. Во ином значение, по которое будем копировать. Можно указать 0x400000 (это 4Гб в десятичной системе счисления). То присутствует максимум возможный для flashtool. Если у вас телефон с 4Гб внутренней памяти, то такие настройки заручат вам полную копию всего телефона, включая пользовательские приложения и настройки, а также все что обращается на внутренней карте памяти. В большинстве случаев это нецелесообразно: бэкап займет много места и времени на свое создание также потребует значительно. Поэтому во втором поле представим смещение блока CACHE (например вот так 0x36780000). Этот блок (многозначный термин, имя и топоним) в большинстве случаев вытечет сразу за блоком ANDROID, на котором, собственно разговаривая, и заканчивается системная часть прошивки телефона (аппарат для передачи и приёма звука (в основном — человеческой речи) на расстоянии). Иными словами при таких настройках вы заполучите полный бэкап телефона без кеша и пользовательских этих (равносильно сбросу к заводским опциям), занимающий не много места и достаточно быстро читаемый из телефона.
Далее отключаем телефон от пк и выключаем его (телефон (аппарат для передачи и приёма звука (в основном — человеческой речи) на дистанции)). В SP Flash Tool жмем кнопку Read back и подключаем выключенный телефон к пк. В программе должны пронестись несколько разноцветных полосок. После окончания появится зеленоватое окошко с надписью ОК. Значивает все хорошо и прошивка скопирована. Можно отключать телефон от пк и закрывать программу. Backup готов. Дальше можно уже «играться» с прошивками. Если напортачите, то чрез SP Flash Tool заливаете назад свой backup и по новой!

