- Нюансы установки сторонних прошивок на Android-смартфоны. Первые шаги. Установка стороннего Recovery
- Содержание
- Преамбула
- Зачем мне перепрошивать устройство?
- Что же такое – перепрошивка устройства?
- Разблокировка загрузчика
- Установка стороннего Recovery
- Готово!
- Послесловие
- Прошивка для android карты
- Запуск ОС Андроид с SD-карты для устройств на процессоре Amlogic S912
Нюансы установки сторонних прошивок на Android-смартфоны. Первые шаги. Установка стороннего Recovery
Содержание
Преамбула
Кто-то отметит, что вся нужная и ненужная информация по процессу перепрошивки находится на всем известном форуме. Я, свою очередь, отвечу, что во-первых — далеко не все проблемы и их решения там описаны, а во-вторых — не каждый сходу сможет найти среди такого обилия информации нужную. Я же исхожу из собственного опыта.
Важно:
Я не несу ответственности за ваши действия после прочтения данной статьи, обязательно делайте резервные копии данных на внешнее хранилище (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 (2-3 секунды), можно пробовать запустить только что установленный режим Recovery – при включении телефона зажать Power и Vol+ до момента появления на экране лого производителя, после чего можно отпустить кнопку Power до появления логотипа выбранного вами recovery.
Готово!
Поздравляю, вы только что получили, почти что, полный доступ над программной частью вашего устройства! Один шаг для энтузиаста — большой шаг для сообщества. Но это — только первый шаг, за ним идут еще несколько, не менее важных шагов к получению максимального контроля над вашим устройством.
Послесловие
Я намеренно не подкрепляю каждый шаг обилием скриншотов, поскольку каждый случай уникален, каждое recovery имеет свой интерфейс, но основные принципы остаются одинаковыми. Также, вы не увидите тут обилия ссылок – все приведенные проекты легко ищутся в поисковиках. Напоследок, хотелось бы привести текущую конфигурацию моего телефона:
Модель: Xiaomi Redmi Note 8T
Операционная система: Android 11 ArrowOS
Recovery: Pitch Black Recovery Project (twrp-based)
GoogleServices: NikGApps based
Готов выслушать конструктивную критику, спасибо за прочтение!
Источник
Прошивка для android карты
Разработка и портирование прошивок для устройств на SOC Amlogic
Устройство или ОС, прошивка: Android OS
Полезная информация о портирование и разработке прошивок, обсуждение различных нюансов.
Multi IMG Tools — Программа для работы с прошивкой
В теме нет куратора. По вопросам наполнения шапки обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.
Сообщение отредактировал derak1129 — 10.07.21, 12:35
Если кому интересно собрал Android 9.0 из исходников от khadas https://github.com/khadas/
Работает:
Включение с пульта
Кнопки пульта работают в системе
Bluetooth
Wifi
Ethernet
Воспроизведение видео
Известные проблемы:
Мерцание при использовании курсора
Пишите что еще
2020-06-27
Обновлен код hwcomposer — исправлены проблемы с черным экраном при смене настроек экрана и при выходе из воспроизведения видео
update_khadas_pie_9377_20200627.img
Это первая прошивка на android 9.0 для устройств на базе S912. Прошивка treble, так что возможна установка gsi ромов в раздел system.
Сообщение отредактировал HighwayStar — 29.06.20, 06:36
Сообщение отредактировал 11asd11 — 05.07.20, 23:19
А вот такой WI-FI+Bluetooth получится прикрутить? AP6630wifi.7z ( 156.49 КБ )
Сообщение отредактировал iCr — 07.07.20, 12:15
Еще вопрос, а в этой сборке поддержка композитного AV-выхода будет?
HighwayStar,
Фактически 3Гб. ОЗУ.
И можно добавить поддержку гигабитных лан?
Доделал u-boot для того чтоб им можно было загружать прошивки на 9 андроиде на устрйоствах с LPDDR3. Пришлось откатить некоторые хаки добавленные khadas и добавить тайминги памяти из ветки android 7.1. Вот исходный код u-boot для android 9.0 для устройств с LPDDR3 https://github.com/Amlogic-Lineage/u-boot/commits/khadas-vims-pie_lpddr
Код u-boot для LPDDR3 не умеет правильно определять размер установленной памяти, поэтому готовые прошивки собраны только для варианта 3 Гб, вроде бы с LPDDR3 таких боксов больше. Ссылки на сборки добавил в исходный пост TAP pro [Android] (Пост HighwayStar #97984308)
LPDDR3 chl: Rank0+1 @ 912MHz
bist_test rank: 0 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 730 rank: 1 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 730 — PASS
Сообщение отредактировал Brahner — 10.07.20, 08:40
Добавил сборки для DDR3/DDR4 с поддержкой автовыбора 1/2/3 Gb памяти. TAP pro [Android] (Пост HighwayStar #97984308)
Для DDR3 немного снижена частота, так как некоторые 3Gb боксы используют более дешевую память и не запускаются на 912Mhz
Davietpda выложил бету прошивки под 912-й.
Запустил прошивку Davietpda на 3/32 lpddr3(tx9pro). Загрузчик брал из toxtarparavos.
+ Мерцания в сборке Davietpda нет
+ Одновременно работают пульты от h96pro plus и от ветки tx92(z6, z6 plus, tx9pro и тд.). Как в андройде, так и включение коробки
+ WiFi(qc9377 ) и 1000 ethernet работают
— Но у меня не работает один из usb портов на моей плате
— bluetooth не работает, не включается
Кто проверял, как у Вас?
Образ прошивки на mega
Отдельно архив с загрузчиками lpddr3 из образ toxtarparavos: Менять нужно все. DDR.USB и UBOOT.USB нужны в момент прошивки. bootloader.partition прошивается в пзу и загружает коробку.bootloader_LPDDR3_Android_9.zip ( 1.58 МБ )
Сообщение отредактировал Brahner — 13.07.20, 14:24
alexesgg,
Поставил на h96pro+ 3/32
Проводная сеть воркает, вайфай тоже.
Бт вроде как нет.
Вообщем то очень неплохо.
Правда видит только 2гб памяти..
Сообщение отредактировал xam1988 — 11.07.20, 01:37
Скорее всего, проблема в загрузчике, который я использовал от toxtarparavos, не совсем подходит к tx92-LP.
Записал лог, проверял порты проводной мышкой.putty.txt ( 185.09 КБ )
У Davietpda появилась образ для LPDDR3. На этой прошивке, оба usb работают. :scratch_one-s_head:
Сообщение отредактировал Brahner — 11.07.20, 16:27
Источник
Запуск ОС Андроид с SD-карты для устройств на процессоре Amlogic S912
В статье детально, с приведением исходного кода, описывается работа, проведенная по переносу и запуску с SD-карты программной прошивки с ОС Андроид для устройств на процессоре Amlogic S912.
Мне нравятся миниатюрные компьютеры, выполненные по технологии система на чипе (SOC). За крошечные размеры и небольшое энергопотребление по сравнению с персональными компьютерами. Используя такие устройства, можно решать широкий круг задач. На миникомпьютеры можно установить как ОС Android (так делает большинство производителей данных «игрушек»), так и различные дистрибутивы Linux или Chrome OS.
Моя текущая работа — это разработка приложений для Андроид. В этой работе очень желательны тесты на реальных устройствах на различных версиях системы. Есть у меня пара миникомпьютеров от компаний Rockchip и Amlogic, на которых я также выполняю свои тесты. Андроид, как операционная система, довольно динамично развивается и сейчас на рынке используются ее модификации от 4.4 до 10 версии. А на подходе уже Андроид 11-й версии.
Многие компании, занимающиеся разработкой телеприставок на базе Андроид, вынуждены иметь недолгий срок сопровождения свои детищ в виду быстрого развития как аппаратных, так и программных средств. Один из моих основных рабочих инструментов для тестов — это приставка KM8P на процессоре S912 с двумя гигабайтами ОЗУ и предустановленной операционной системой Андроид версии 7.1. Время идет, и за пару-тройку лет на рынке последовательно появились версии 8.1, 9.0 и 10.0 ОС Андроид.
Очень хотелось бы потестировать свое приложение под этими самыми версиями. Но что делать? Или нужно покупать зверушки на новых процессорах и версиях Андроид, или заниматься самостоятельной адаптацией новых версий Андроида на имеющихся устройствах. Первый путь легок и прост: заплатив не очень большую сумму, проблема легко решается. Но легких путей мы не ищем, поэтому выбираем второй путь. Второй путь гораздо труднее, но интереснее. К тому же, и сам чип S912 является отличным 8-ядерным процессором, не намного уступающим по производительности новейшим процессорам Amlogic на чипе S905x.
Итак, был выбран второй вариант, как более интересный и отвечающий моим потребностям. Встал вопрос: а каким путем пойти? Текущая версия Андроид 7.1 под капотом имеет ядро Linux 3.14.29 и ПЗУ NAND на чипе SK Hynix H27UCG8T2ETR, для которого Amlogic разработала собственный драйвер aml_nftl_dev.ko.
Все новейшие версии Андроид базируются на ядре 4.9. И желательно использовать именно его. Однако, политика Amlogic такова, что последние несколько лет SDK Android компания предоставляет только юридическим компаниям, занимающимся производством устройств на базе чипов Amlogic.
Тем не менее, на просторах github’а можно найти исходники ядра 4.9 на основе SDK Android от Amlogic 2017-18 года. Например, git-репозитарий компании Khadas. Однако, дело, в том, что драйвер aml_nftl_dev для версии ядра 4.9 отсутствует. Что делать? Адаптировать данный драйвер для ядра 4.9? Но помимо адаптации драйвера, придется также править так называемое дерево устройств ядра. Это трудный путь.
Множество устройств на процессоре S912 имеет более современное ПЗУ с контроллером EMMC. К счастью, для обладателей таких устройств совсем недавно (в июне-июле 2020 года) появились прошивки на Андроид 9, собранные энтузиастами (ознакомиться можно здесь и здесь). Я не мог воспользоваться данными прошивками в виду отсутствия на моем устройстве чипа EMMC. Однако, прекрасно понимал, что имея на приставке слот для SD-карточки, для работы с которым используется все тот же драйвер MMC, что и для работы с микросхемой EMMC, можно попытаться использовать SD-карту вместо ПЗУ.
К сожалению, ситуация осложнялась тем, что Amlogic изначально не предусмотрел старт системы с SD-карты. Тем не менее, кое-что было. Amlogic реализовала возможность обновления прошивок с SD-карты. Эта и другие возможности были достигнуты компанией Amlogic путем существенной доработки загрузчика u-boot под свои нужды. В частности, имеется возможность запустить ядро системы с FAT-раздела SD-карты. Итак, было принято решение выяснить, можно ли адаптировать драйвер MMC для возможности старта с SD-карты. Я погрузился в изучение исходного кода драйвера.
Изучая исходный код, я выяснил, во-первых, что драйвер для монтирования загрузочного раздела ограничивается работой только с микросхемой EMMC, а остальные устройства игнорирует. А такими устройствами как раз является SDMMC-слот и SDIO-порт. А почему бы не изменить код так, чтобы драйвер не пропускал устройство SDMMC, а продолжал бы с ним работать, как с EMMC?
Во-вторых, было определено, что разработчики Amlogic используют собственную структуру данных для хранения таблицы разделов диска и записывают ее по некоторому смещению на диске. Структура данных несложная, в ней хранится смещение, имя, размер и некоторые другие характеристики раздела. После определения типа устройства, драйвер читает таблицу разделов на диске и создает блочные устройства в системе согласно этой таблице.
Получается, что разрешив драйверу работать с SDMMC, как с EMMC и записав таблицу разделов по заранее известному адресу на SD-карте, я смогу, таким образом, сымитировать EMMC и загрузить систему с SD-карты! Подумал, почему бы не сделать утилиту, которая будет записывать таблицу разделов в нужном формате и при необходимости проверять ее корректность. Сказано — сделано. Тем более, что сделать ее было несложно, благо практически вся инфраструктура уже была описана в исходном коде драйвера. Исходный код утилиты размещен на github’е, репозиторий amlpt. Утилита создана в ОС Ubuntu. Но, думаю, при необходимости, ее не сложно будет перенести и на Windows.
Для начала нужно заполнить параметры таблицы разделов в файле mmcparts_a9.c, указав там имена, смещения, размеры и тип разделов. Для обычных разделов указывается тип — 0x1, для разделов типа cache — 0x2, а для разделов типа data — 0x4. За начальное смещение первого раздела я взял значение 0x2800000 (40Мб). Далее заполнил имена, размеры и типы разделов в структурах partitions согласно таблице разделов из дерева устройств. Для 9-го Андроида таких разделов насчиталось 17.
Заполнив данные в файле mmcparts_a9.c, создаем утилиту для записи таблицы разделов, запустив скрипт make_amlptwrt.sh. Данный скрипт создает исполняемый файл amlptwrt, с помощью которого можно сформировать двоичный файл mmc_parts.bin. Это и есть наша таблица разделов, которую читает драйвер MMC. Аналогично запускаем скрипт make_amlptrdr.sh для создания утилиты чтения таблицы разделов amlptrdr, с помощью которой мы можем проверить правильность заполнения данной таблицы. После запуска amlptrdr в консоли отобразится таблица разделов с именами, смещениями и размерами в мегабайтах. Примерно так:
/AML/amlpt$ ./amlptrdr
[mmc_verify_partition_tbl] mmc read partition OK!
show_mmc_partitions
[disk p01] logo offset 40 Mb, size 8 Mb
[disk p02] recovery offset 48 Mb, size 24 Mb
[disk p03] misc offset 72 Mb, size 8 Mb
[disk p04] dtbo offset 80 Mb, size 8 Mb
[disk p05] cri_data offset 88 Mb, size 8 Mb
[disk p06] rsv offset 96 Mb, size 16 Mb
[disk p07] metadata offset 112 Mb, size 16 Mb
[disk p08] vbmeta offset 128 Mb, size 2 Mb
[disk p09] param offset 130 Mb, size 16 Mb
[disk p10] boot offset 146 Mb, size 16 Mb
[disk p11] tee offset 162 Mb, size 32 Mb
[disk p12] vendor offset 194 Mb, size 130 Mb
[disk p13] odm offset 324 Mb, size 128 Mb
[disk p14] system offset 452 Mb, size 1350 Mb
[disk p15] product offset 1802 Mb, size 128 Mb
[disk p16] cache offset 1930 Mb, size 1120 Mb
[disk p17] data offset 3050 Mb, size 4050 Mb
Для того, чтобы драйвер MMC заработал с устройством SDMMC, я внес два небольших исправления в исходный код драйвера, в файл drivers/amlogic/mmc/emmc_partitions.c:
а) Во-первых, разрешаем драйверу работать с устройствами, отличными от EMMC. Для этого меняем функцию is_card_emmc следующим образом:
Конечно, это самое никчемное изменение, которое можно было придумать, но для достижения моей цели этого достаточно. Как говорится, матушка-лень впереди планеты всей.
б) Определяем смещение, по которому будет читаться таблица разделов. Правку делаем в функции mmc_read_partition_tbl:
Если посмотрим на исходный код драйвера, то сумма констант MMC_BOOT_PARTITION_SIZE + MMC_BOOT_PARTITION_RESERVED равна 36 Мб. Следует отметить, что данные правки подходят для моего варианта, когда в устройстве отсутствует чип EMMC или в дереве устройств он отключен. Для других случаев придется придумывать более корректный вариант правок.
Итак, смещение, по которому будет записана таблица разделов на SD-карте равна 36 Мб. Для того, чтобы разместить нашу таблицу разделов, созданную утилитой amlptwrt, на SD-карте достаточно выполнить команду:
При этом предполагается, что /dev/sdb — это SD-карта.
Далее компилируем ядро, создаем boot.img с нулевым initrd и примерно такими параметрами ядра:
Вспомним, что u-boot от Amlogic умеет стартовать ядро Linux c SD-карты с раздела FAT. Создаем на SD-карте в самом начале раздел FAT размером 32 Мб. Этого вполне достаточно для размещения нашего boot.img и dtb.img. В дереве устройств dtb.img необходимо отключить EMMC, чтобы нашей SD-карте было присвоено имя /dev/mmcblk0. Или не отключать, но тогда нужно будет изменить в boot.img параметры ядра, чтобы ядро смогло успешно подключить системный раздел, который в данном случае будет иметь имя /dev/mmcblk0p14.
И, как заключительная часть марлезонского балета, осталось записать разделы Андроид-прошивки на SD-карту. Для этого распаковываем прошивку и записываем на SD-карту подходящие разделы согласно смещениям в таблице разделов:
Те разделы, которые отсутствуют в прошивке, я просто заполнял нулями. Некоторые разделы, такие как system или vendor и некоторые другие, могут являться sparse-разделами. Их предварительно необходимо преобразовать в обычные разделы:
С разделами cache и data нужно поступить немного по-другому. Смотрим нашу таблицу разделов, созданную утилитой amlptwrt, и с помощью программы fdisk создаем соответствующие разделы с нужными смещениями и размерами на SD-карте и форматируем их в файловую систему ext4:
После форматирования, с помощью той же утилиты fdisk, удаляем уже ненужные разделы /dev/sdb2 и /dev/sdb3.
Чтобы загрузчик u-boot распознал, что нужно загрузиться именно с SD-карты, размещаем в FAT-разделе файл aml_autoscript. Сам файл aml_autoscript может быть создан с помощью утилиты mkimage из простого текстового файла следующего содержания:
Вот и все, что необходимо для переноса прошивки с Андроид на борту на SD-карту.
Несколько прошивок, которые были сделаны по данному методу, опубликованы в соответствующей теме на форуме 4PDA. Если что-то непонятно, задавайте вопросы в комментариях. Чем смогу — помогу.
За сим позвольте откланяться и удачи всем в переносе прошивок!
Источник