Прошивка файлы fls чем установить

Обновлено: 30.06.2024

Кто-то отметит, что вся нужная и ненужная информация по процессу перепрошивки находится на всем известном форуме. Я, свою очередь, отвечу, что во-первых — далеко не все проблемы и их решения там описаны, а во-вторых — не каждый сходу сможет найти среди такого обилия информации нужную. Я же исхожу из собственного опыта.

Важно:
Я не несу ответственности за ваши действия после прочтения данной статьи, обязательно делайте резервные копии данных на внешнее хранилище (SD-карты или компьютер). Но не пугайтесь — если вам удалось разблокировать загрузчик и установить recovery у вас всегда будет возможность восстановить устройство даже из «System Destroyed», а в большинстве случаев и реализовать «вертай взад» — установить официальную систему с блокировкой загрузчика (как, например, у Xiaomi).

Зачем мне перепрошивать устройство?

Для чего люди вообще перепрошивают свои устройства со стабильными ОС от производителя на какие-то сборки "От Васяна"? Причины у всех разные. Кому-то не нравится напичканная китайским хламом MIUI. Чьи-то устройства производитель уже давно не обновляет, а новую систему хочется. Кому-то по душе "чистая" система, кто-то больше не может жить под вечным прицелом Google Services и так далее и тому подобное. Справедливости ради хочу отметить, что множество неофициальных прошивок имеют поддержку от их разработчиков и на них регулярно прилетают OTA обновления. При этом они не уступают в безопасности официальным, а наиболее популярные поддерживают актуальные схемы шифрования ваших данных (FBE).

Что же такое – перепрошивка устройства?

Если коротко и ясно – замена или переустановка установленной операционной системы на другую операционную систему. Прямо как “винду переставить”. Данное определение не относится конкретно к телефонам — перепрошивают всё, что угодно, даже автомобили. Применительно к устройствам на Android это также не означает, что сторонняя прошивка должна быть именно системой Android — я имел опыт установки Ubuntu на телефон. Целесообразность этого поступка — вопрос другой.

Из каких же шагов состоит установка новой ОС, вместо существующей? Для большинства пользователей они будут примерно следующими:

Поиск и установка стороннего Recovery

Поиск файлов новой прошивки

Установка новой прошивки с помощью стороннего recovery

(опционально) Установка root-прав

(опционально) Установка GApps

В этой, как самой первой статье, я разберу только первые два пункта, в силу объема остальных.

Разблокировка загрузчика

Что за загрузчик и зачем его разблокировать? Загрузчик или Bootloader простыми словами – относительно небольшой кусочек программного кода, который занимается запуском установленной системы. Сам по себе он — незаменимая часть устройства, но в его функции также входит реализация технологии Verified Boot. Эта технология призвана ограничить установку ОС до авторизованных производителем (путем проверки подписи файла). С одной стороны, это защитит ваши данные от злоумышленника (он не сможет установить другую прошивку без форматирования вашего устройства), с другой – многие популярные прошивки обеспечивают надежное шифрование раздела Data. Наша цель — отключить механизм Verified Boot для того, чтобы мы могли установить стороннюю систему.

Скажу сразу – универсальной инструкции для всех телефонов нет и быть не может. Более того – некоторые устройства вообще не имеют способа разблокировки загрузчика, а некоторые не блокируются производителем изначально. Проверить факт блокировки загрузчика можно с помощью adb в режиме fastboot - fastboot oem device-info (что это и как пользоваться этим инструментом разберу в пункте про установку). Если true – заблокирован, иначе – нет. Все дальнейшие действия будут рассмотрены на примере устройства Xiaomi Redmi 8T на базе процессора Qualcomm.

Итак, если по результатам проверки вы обнаружили, что загрузчик заблокирован, то помочь вам с поиском способа разблокировки поможет только Технотроица – Отец (Сайт производителя), Сын (4pda) и Святой дух (Google). В случае с Xiaomi всё достаточно просто – на сайте производителя есть фирменная утилита для разблокировки загрузчика, ее использование интуитивно понятно. После успешного окончания процесса разблокировки необходимо отформатировать раздел Data, поскольку он зашифрован текущей системой и новая его попросту не расшифрует (в Xiaomi за это отвечают переключатели в окне разблокировки загрузчика) и можно приступать к процессу установки стороннего Recovery.

Установка стороннего Recovery

Что такое Recovery и почему мы начинаем процесс прошивки именно с него? Раздел Recovery – аналог BIOS на компьютере, также именуется как «Режим восстановления». Этакая "подсистема", которая призвана помочь в восстановлении работоспособности устройства. Заменить установленный производителем recovery сторонним необходимо потому, что "родной" не даст установить вам ничего, кроме официальной прошивки.

Немного о том, какие бывают Recovery

Я использую и настоятельно советую использовать другим именно TWRP-recovery, поскольку он сильно превосходит в функциональности и удобстве CWM.

Немного об ADB – это отладочный инструмент, который позволяет разработчикам отлаживать свои приложения, а таким энтузиастам как мы – прошивать телефоны и делать много других полезностей. Обо всех функциях вы можете узнать так же при помощи Технотроицы.

После скачивания recovery вы должны получить файл образа раздела android с расширением .img . Чтобы установить его на свое устройство, нам понадобится:

Компьютер или иное подходящее для запуска ADB устройство

USB-драйвера для вашего аппарата, установленные на компьютер

Чтобы прошить новый раздел recovery, необходимо перевести телефон в особый режим загрузчика – fastboot. На большинстве устройств это делается с помощью зажатия кнопок Power и Vol- при включении телефона. Успешным входом в этот режим будет считаться черный экран смартфона с белой строкой "fastboot mode". После этого необходимо подключить устройство к компьютеру при помощи USB-кабеля.

Для прошивки раздела recovery нам понадобится единственная ADB-команда. Для исполнения этих самых команд, воспользуемся консолью Windows. (я полагаю, вы справились с установкой ADB). Общий формат команды прошивки файла в раздел устройства выглядит следующим образом:


fastboot flash partition PathToFile

fastboot — путь к файлу fastboot.exe, поставляется вместе с ADB;

partition — доступный для прошивки раздел Android. Мы шьем recovery;

PathToFile — путь к .img-образу recovery, который вы скачали;

В моем случае, команда выглядела примерно так:

C:\adb\fastboot flash recovery C:\recovery.img

Некоторые recovery поставляются с автоматическими установщиками и ADB — вам нужно лишь запустить bat-файл.

Готово!

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

Послесловие

Я намеренно не подкрепляю каждый шаг обилием скриншотов, поскольку каждый случай уникален, каждое recovery имеет свой интерфейс, но основные принципы остаются одинаковыми. Также, вы не увидите тут обилия ссылок – все приведенные проекты легко ищутся в поисковиках. Напоследок, хотелось бы привести текущую конфигурацию моего телефона:

Модель: Xiaomi Redmi Note 8T
Операционная система: Android 11 ArrowOS
Recovery: Pitch Black Recovery Project (twrp-based)
GoogleServices: NikGApps based

Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.

Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google — я взял с себя обещания обязательно разобраться во что бы мне это не стало.

Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.

В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.

Преамбула

И так! Давайте сперва определимся с понятиями, которые будут использоваться в данной статье. Ваше привычное понимание, при этом, может сильно отличаться.

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

Также хочу заметить, что все примеры будет взяты для телефона HTC, но это не значит, что данная информация не может быть использована на других телефонах.

Обращаю ваше внимание, что я, как автор, не несу ответственности за возможную потерю данных на вашем телефоне в результате использования информации ниже.

Подготовка среды

Обойдусь без подробных инструкций как пользоваться тем или иным программным обеспечением. Если вам интересна данная статья и вы дочитали до этих строк, то я надеюсь, что вы уже опытный пользователь и имеете опыт использования, ну или хотя бы экспериментирования в данной области. Инструкций, статей и результатов тестирования полно в открытом доступе, впрочем, как и на Хабре. Также обойдусь без описания некоторых терминов, иначе статья получится очень большой и нудной. Будем писать только по делу. Уверен, что среда у вас уже давно стоит. Если нет, то предлагаю скачать и установить.

1. Android SDK. Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2. Android Kitchen. Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3. JD-GUI. Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4. DJ Java Decompiler. Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.
5. smali. Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6. dex2jar. Утилита для конвертации исполняемых файлов Dalvik кода.

Преобразование прошивки

Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.

После того, как прошивка из оптимизированного вида (ODEX — оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.

Непосредственно модификации

Создание патчей

Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1. Сделать DEODEX всей прошивки
2. Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается — тема другой статьи.
3. Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4. Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5. Распаковать исходный код из архива.

В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.

Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».

Оказалось все просто. Есть подпрограмма, которая на основе заранее установленных констант, при обращении отвечала, относится ли телефон к Китаю или же нет.

Код находился в файле HTCExtension.jar, а класс, который содержал данную подпрограмму находился в \com\htc\util\contacts\BuildUtils$Customization.java

Распаковка и анализ оригинального файла

1. Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar.
2. Открыть любым архиватором и вытащить от туда classes.dex
3. С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4. Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5. Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.

6. Чтобы сделать патч, нам надо дизассемблировать сам Dalvik код. Для этого используем baksmali. Удобнее всего создать отдельную папку и положить туда три файла вместе: HTCExtension.jar, smali.jar и baksmali.jar. Даем команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

- это API вашей версии Android. Для JB - это 16
- папка, где находятся все фреймворки прошивки.

В моем случае это была команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7. В нашей вновь созданной папке появилась папка HTCExtension, а в ней наши файлы с Dalvik кодом.
8. Отыскиваем файл по пути \com\htc\util\contacts\BuildUtils$Customization.java и смотрим код:

9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:

10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
, то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как
11. Да, метод ,будет работать. Но мы же не ищем легких путей - это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде

12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.

Создание Dalvik кода

1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код

3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
8. Все, код для патчинга готов.

Накатывание патча

1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.

3. Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.

Компиляция и сборка патченного JAR файла

1. С помощью backsmali мы распотрошили наш JAR файл, а теперь его надо собрать обратно.
2. Даем команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3. В нашей папочке появляется файлик classes.dex
4. Снова открываем HTCExtension.jar файл архиватором и заменяем в нем существующий classes.dex на наш только что созданный.
5. Все, наш HTCExtension.jar содержит модифицированный программный код.

Замена оригинального файла на патченный

Обычно, для рядовых пользователей создаются специальные скрипты, которые через recovery заменяются. Но нам такое не интересно. Во-первых долго и нудно, во-вторых мы же опытные пользователи и можем себе позволить некоторые тонкости.

1. Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:

2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.

Эпилог

Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.

К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.


SP FlashTool как прошивать. Аппаратная платформа MTK в качестве основы для построения современных смартфонов, планшетных компьютеров и других устройств получила очень широкое распространение. Вместе с разнообразием устройств, в жизнь пользователей пришла возможность выбора вариаций ОС Android – число доступных официальных и кастомных прошивок для популярных МТК-девайсов может достигать нескольких десятков! Для манипуляций с разделами памяти устройств Mediatek чаще всего используется SP Flash Tool — мощный и функциональный инструмент.

Несмотря на большое разнообразие MTK-устройств, процесс установки программного обеспечения через приложение SP FlashTool в целом одинаков и осуществляется в несколько шагов. Рассмотрим их подробно.

Содержание

Подготовка устройства и ПК

Для того, чтобы процедура записи файлов-образов в разделы памяти устройств прошла беспроблемно, необходимо подготовиться соответствующим образом, проведя определенные манипуляции, как с Андроид-девайсом, так и с ПК или ноутбуком.

1. Загружаем все необходимое, — прошивку, драйвера и само приложение. Распаковываем все архивы в отдельную папку, в идеальном варианте расположенную в корне диска С.


2. Желательно, чтобы названия папок для расположения файлов приложения и прошивки не содержали русских букв и пробелов. Наименование может быть любым, но называть папки следует осознанно, чтобы впоследствии не запутаться, особенно если пользователь любит экспериментировать с различными видами ПО, загружаемого в аппарат.


3. Устанавливаем драйвер. Этот пункт подготовки, а точнее его правильное выполнение во многом предопределяет беспроблемное протекание всего процесса. О том, как установить драйвер для MTK-решений, подробно рассказано в статье по ссылке ниже: Установка драйверов для прошивки Android

4. Делаем бэкап системы. При любом исходе процедуры прошивки, пользователю практически во всех случаях придется восстанавливать собственную информацию, а в том случае, если что-то пойдет не так, данные, которые не были сохранены в резервной копии, будут безвозвратно утеряны. Поэтому крайне желательно выполнить шаги одного из способов создания бэкапа из статьи: Как сделать бэкап Android-устройства перед прошивкой

5. Обеспечиваем бесперебойность подачи электроэнергии для ПК. В идеальном случае, компьютер, который будет использоваться для манипуляций через SP FlashTool должен быть полностью исправен и оснащен источником бесперебойного питания.

Установка прошивок

С помощью приложения SP FlashTool можно осуществлять практически все возможные операции с разделами памяти устройства. Установка прошивок – это основная функция и для ее выполнения в программе предусмотрено несколько режимов работы.

Способ 1: Download Only

Рассмотрим подробно процедуру загрузки ПО в Android-устройство при использовании одного из самых распространенных и часто используемых режимов прошивки через SP FlashTool — «Download Only».

1. Запускаем SP FlashTool. Программа не требует установки, поэтому для ее запуска просто дважды кликаем по файлу flash_tool.exe, расположенному в папке с приложением.



3. В главном окне программы после запуска изначально выбран режим работы — «Download Only». Сразу же следует отметить, что данное решение применяется в большинстве ситуаций и является основным для практически всех прошивочных процедур. Отличия в работе при использовании других двух режимов будут описаны ниже. В общем случае оставляем «Download Only» без изменений.


4. Переходим к добавлению в программу файлов-образов для дальнейшей их записи в разделы памяти аппарата. Для некоторой автоматизации процесса в SP FlashTool используется специальный файл под названием Scatter. Этот файл является по своей сути перечнем всех разделов флеш-памяти устройства, а также адресов начальных и конечных блоков памяти Андроид-устройства для записи разделов. Чтобы добавить скаттер-файл в приложение нажимаем кнопку «choose», расположенную справа от поля «Scatter-loading file».


5. После нажатия на кнопку выбора scatter-файла открывается окно Проводника, в котором необходимо указать путь к нужным данным. Скаттер-файл располагается в папке с распакованной прошивкой и имеет название MTxxxx_Android_scatter_yyyyy.txt, где xxxx – номер модели процессора устройства, для которого предназначены загружаемые в аппарат данные, а – yyyyy, тип памяти, используемый в девайсе. Выбираем скаттер и нажимаем кнопку «Открыть».


6. Важно отметить, что в приложении SP FlashTool предусмотрена проверка хеш-сумм, призванная обезопасить Андроид-девайс от записи неверных или поврежденных файлов. При добавлении скаттер-файла в программу производится проверка файлов-образов, перечень которых содержится в загружаемом скаттере. Эту процедуру можно отменить в процессе проверки или отключить в настройках, но делать этого категорически не рекомендуется!


7. После загрузки скаттер-файла, в автоматическом режиме добавились и компоненты прошивки. Об этом свидетельствуют заполненные поля «Name», «Begin Adress», «End Adress», «Location». Строки под заголовками содержат соответственно имя каждого раздела, начальный и конечный адреса блоков памяти для записи данных, а также путь, по которому расположены файлы-образы на диске ПК.


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


В общем случае настоятельно рекомендуется снять галочку возле пункта с разделом «PRELOADER», это позволяет избежать очень многих проблем, особенно при использовании кастомных прошивок или файлов, полученных на сомнительных ресурсах, а также отсутствии полного бэкапа системы, созданного с помощью MTK Droid Tools .


9. Проверяем настройки программы. Нажимаем меню «Options» и в раскрывшемся окне переходим в раздел «Download». Отмечаем галочками пункты «USB Checksum» и «Storage Сhecksum» — это позволит проверить контрольные суммы файлов перед записью в устройство, а значит избежать прошивки испорченных образов.


10. После выполнения вышеперечисленных шагов переходим непосредственно к процедуре записи файлов-образов в соответствующие разделы памяти устройства. Проверяем, что устройство отключено от компьютера, выключаем полностью Андроид-девайс, вынимаем и вставляем обратно аккумулятор, если он съемный. Для перевода SP FlashTool в режим ожидания подключения аппарата для прошивки нажимаем кнопку «Download», обозначенную зеленой стрелкой, направленной вниз.


11. В процессе ожидания подключения девайса, программа не дает возможности осуществлять какие либо действия. Доступна только кнопка «Stop», позволяющая прервать процедуру. Подключаем выключенный аппарат к USB-порту.


12. После подключения устройства к ПК и его определения в системе начнется процесс прошивки аппарата, сопровождаемый заполнением индикатора выполнения, расположенного внизу окна.


В течение процедуры индикатор меняет свой цвет в зависимости от производимых программой действий. Для полного понимания происходящих во время прошивки процессов рассмотрим расшифровку цветов индикатора:


13. После того, как программа выполнит все манипуляции, появляется окошко «Download OK», подтверждающее успешное завершение процесса. Отключаем девайс от ПК и запускаем его длительным нажатием клавиши «Питание». Обычно первый запуск Android после прошивки длится довольно долго, следует набраться терпения.


Способ 2: Firmware Upgrade

Процедура работы с MTK-устройствами под управлением Android в режиме «Firmware Upgrade»в целом аналогична вышеописанному методу «Download Only» и требует выполнения похожих действий от пользователя.

Отличием режимов является невозможность выбора отдельных образов для записи в варианте «Firmware Upgrade». Другими словами, в этом варианте память устройства будет перезаписана в полном соответствии с перечнем разделов, который содержится в скаттер-файле.

В большинстве случаев этот режим используется для обновления официальной прошивки в целом рабочего аппарата, если пользователю требуется новая версия ПО, а другие методы обновления не работают, либо неприменимы. Также может применяться при восстановлении девайсов после краха системы и в некоторых других случаях.

Процесс прошивки в режиме «Firmware Upgrade» после нажатия кнопки «Download» в SP FlashTool и подключения устройства к ПК состоит из следующих этапов:

  • Создание резервной копии раздела NVRAM;
  • Полное форматирование памяти девайса;
  • Запись таблицы разделов памяти устройства (PMT);
  • Восстановление раздела NVRAM из бэкапа;
  • Запись всех разделов, файлы-образы которых содержатся в прошивке.

Действия пользователя для осуществления прошивки в режиме «Firmware Upgrade», повторяют предыдущий способ, за исключением отдельных пунктов.

1. Выбираем скаттер-файл (1), выбираем режим работы SP FlashTool в раскрывающемся перечне (2), нажимаем кнопку «Download» (3), затем подключаем выключенный аппарат к порту USB.


2. По завершению процедуры, покажется окошко «Download OK».


Способ 3: Format All + Download

Режим «Format All+Download» в SP FlashTool предназначается для выполнения прошивки при восстановлении девайсов, а также используется в ситуациях, когда другие вышеописанные методы неприменимы либо не срабатывают.


Этапов выполнения прошивки в рассматриваемом режиме всего три:

  • Полное форматирование памяти аппарата;
  • Запись таблицы разделов PMT;
  • Запись всех разделов памяти устройства.

Шаги, необходимые для проведения процедуры форматирования и записи разделов в режиме «Format All+Download» аналогичны таковым в вышеописанных методах для режимов «Download» и «Firmware Upgrade».

1. Выбираем scatter-файл, определяем режим, нажимаем кнопку «Download».


2. Подключаем устройство к USB-порту ПК и дожидаемся окончания процесса.


Установка кастомного рекавери через SP Flash Tool

На сегодняшний день широкое распространение получили так называемые кастомные прошивки, т.е. решения, созданные не производителем конкретного девайса, а сторонними разработчиками или рядовыми пользователями. Не углубляясь в преимущества и недостатки такого способа изменить и расширить функционал Андроид-девайса, стоит отметить, что для установки кастомов в большинстве случаев требуется наличие в аппарате модифицированной среды восстановления – TWRP Recovery либо CWM Recovery . Практически во все MTK-девайсы этот компонент системы можно установить с помощью SP FlashTool.

1. Запускаем Флеш Тул, добавляем scatter-файл, выбираем «Download Only».


2. С помощью чек-бокса в самом верху перечня разделов снимаем отметки со всех файлов-образов. Устанавливаем галочку только возле раздела «RECOVERY».


3. Далее необходимо указать программе путь к файлу-образу кастомного рекавери. Для этого совершаем двойной клик по пути, прописанному в разделе «Location», и в открывшемся окне Проводника находим необходимый файл *.img. Нажимаем кнопку «Открыть».


4. Результатом вышеописанных манипуляций должно стать нечто похожее на скриншот ниже. Галочкой отмечен исключительно раздел «RECOVERY» в поле «Location» указан путь и сам файл-образ рекавери. Нажимаем кнопку «Download».


5. Подключаем выключенный девайс к ПК и наблюдаем за процессом прошивки рекавери в устройство. Все происходит очень быстро.


6. По окончанию процесса снова видим уже знакомое по предыдущим манипуляциям окошко «Download OK». Можно перезагружаться в модифицированную среду восстановления.


Как видим, процесс прошивки MTK-девайсов на Android с помощью приложения SP Flash Tool — процедура не сложная, но требующая должной подготовки и взвешенности действий. Делаем все спокойно и обдумываем каждый шаг – успех обеспечен!


Возможность обновления прошивки на серийно выпускаемых изделиях, или на единичных изделиях, находящихся в эксплуатации у заказчика трудно переоценить. Это не просто даёт возможность последующего устранения багов и расширения функционала, но и позволяет разработчику с более лёгким сердцем выпускать «еще сыроватый» продукт на рынок, если руководство того требует.

Поэтому важность наличия bootloader'а во вновь разрабатываемых устройствах в большинстве случаев не вызывает сомнений. В данной статье пойдет речь о разработке bootloader'а по интерфейсу USB на микроконтроллере Atmel SAM D21 с ядром Cortex M0+. А конкретно на SAMD21J18A. У микроконтроллеров SAM D20/21 нет предзаписанного бутлоадера, поэтому придётся заниматься его программной реализацией. На сайте Atmel можно найти Application notes, как сделать его с использованием стандартных интерфейсов (UART, I2C, SPI, USB). Под катом описание процесса создания USB-бутлоадера.

Постановка задачи

  • Необходимо разработать наиболее простой, с точки зрения конечного пользователя, способ обновления прошивки устройства. Для этого потребуется скопировать на обыкновенную флешку файл с новой прошивкой, воткнуть флешку в устройство и нажать кнопку reset (или пересбросить питание). После этого стартует bootloader, проверяет наличие файла с прошивкой на флешке и заливает содержимое этого файла в качестве application
  • В качестве «защиты от дурака» используем заранее известное специальное название файла прошивки, что бы исключить случайное совпадение имен с другими файлами на флешке. При этом если «злоумышленник» самостоятельно создаст сторонний файл с именем, совпадающим с ожидаемым, устройство будет пытаться использовать его в качестве прошивки. Разумеется, в этом случае работоспособность устройства будет нарушена, но её можно будет впоследствии восстановить подсунув флешку с корректной прошивкой
  • В качестве USB интерфейса используется аппаратный USB микроконтроллера устройства
  • Устройство не имеет постоянного подключения к интернету, что бы самостоятельно скачать новую прошивку
  • Считаем что подключение ПК к устройству и обновление прошивки с помощью сторонней утилиты является более сложным для конечного пользователя

Немного теории и подготовки

Память

Организация памяти samd20

Адресное пространство в памяти микроконтроллеров серии SAMD20/21 устроено просто:

Энергонезависимая память организована рядами, каждый ряд содержит 4 страницы. Размер 1 страницы 64 байта. Энергонезависимая память стирается рядами, а записывается постранично. Это важно помнить.
Нижние (младшие) ряды в основном адресном пространстве энергонезависимой памяти могут быть использованы для бутлоадера (настраивается с помощью фьюзов BOOTPROT), а верхние ряды для эмуляции EEPROM.
Bootloader-секция защищена соответствующими этому адресному пространству lock-битами и фьюзами BOOTPROT.
Фьюзы BOOTPROT одновременно определяют размер bootloader-секции и защищают выделенную область памяти от чтения.
EEPROM может быть записана несмотря на защиту соответствующей ей области памяти.

Что потребуется для организации bootloader'а?

  1. Работа с памятью контроллера – за это отвечает контроллер энергонезависимой памяти Non-volatile memory (NVM);
  2. Работа с USB – за это отвечает контроллер USB;
  3. Работа с файловой системой – это под силу FATFS.
  4. И по мелочи: работа с портами ввода/вывода, тактирование.

Примечание: в качестве среды разработки используется Atmel Studio версии 6.2 (наследница AVR Studio) и фреймворк ASF (Atmel Software Framework)

Тонкости USB

Тактирование


В соответствии со стандартом USB для реализации шины необходимо очень точное тактирование. Мы будем использовать внешний кварц на 32 кГц как опору для DFLL (Digital Frequency Locked Loop). Выход DFLL будет использоваться как для тактирования USB модуля, так и всего контроллера. Для работы USB модуля необходимо настроить DFLL так, чтобы на выходе было ровно 48 МГц. Для стабильности и точности выходной частоты DFFL он должен быть сконфигурирован в режиме closed loop.

Собираем проект

С помощью ASF wizard подключаем все необходимые нам модули, перечисленные выше.

USB Host
  • conf_usb_host.h – конфигурирует USB и настраивает обработчики прерываний (Callback),
  • conf_access.h – конфигурирует абстрактный уровень для работы с памятью.

Так же добавляем в этот файл строку:

Теперь требуется глобально определить переменную-счетчик в файле main.c, именно ее будем увеличивать при каждом вызове соответствующего обработчика:

Добавляем собственно обработчик прерывания (callback):

Файловая система

Добавляем FAT FS file system service (c помощью ASF wizard). Раскрываем модуль и выбираем режим RTC драйвера calendar_polled.
Для полноценного функционирования модуля файловой системы добавляем в начале main.c:

Работа с энергонезависимой памятью

Добавляем NVM-Non-volatile memory (driver). Кроме этого определяем необходимые константы и переменные в файле main.c:

Еще нужно сконфигурировать контроллер энергонезависимой памяти. Для этого добавляем конфигурационную структуру (глобально), считываем настройки по умолчанию, изменяем необходимое и устанавливаем (оформляем в отдельную функцию):

Все необходимые модули добавлены, можно писать код.

Алгоритм


Стоит отметить, что если в бутлоадер использует ту же периферию, что и application, то ее нужно обязательно сбросить перед переходом в application. Сброс (reset) осуществляется специальными функциями в ASF.
Также замечу, что обращаться к USB устройству можно только после 1-2 секунд с момента его подключения к шине, так как до этого происходит инициализация устройства.
Краткий алгоритм работы (только bootloader) приведен на рисунке ниже:

Читайте также: