❯ Предыстория
Пожалуй, стоит отметить, что данная статья является ремейком одной из моих самых первый статей, которую я написал еще летом 2022 года. На тот момент я был совсем неопытным автором и написал достаточно скомканный и не подробный текст, однако понимая, что такой гайд может быть полезен многим, я решил переписать его, снабдив большим количеством скриншотов и пояснений к каждому пункту процесса. В действиях описанных ниже нет ничего сложного, а перенести Android таким образом можно почти на любом устройстве (MTK, Spreadtrum/UniSoc, Qualcomm, Kirin, Exynos).
На самом деле, китайские производители и импортеры в РФ практически всё время пытаются забить ультра-бюджетный сегмент гаджетов различными дешевыми смартфонами и планшетами. До 5.000 рублей можно легко купить 10" планшет или 5" смартфон на относительно свежих версиях Android Go. Подавляющее число девайсов работает на весьма известном чипсете — MediaTek MT6580, 4х-ядерный чипсет аж 7 летней давности, финальная форма эволюции очень неплохого на своё время MT6582, а в качестве памяти используются eMCP (eMCP — чип, сочетающий одновременно кристалл ОЗУ и ПЗУ с общей подложкой) модули с 1гб DDR3 ОЗУ и 8гб ПЗУ. Немудрено, что таких характеристик на 2023 год не просто мало, а очень мало: смартфон из коробки не потянет ни онлайн-банкинг (Сбер, привет тебе с твоим тяжелющим приложением. Запилите лайт версию хотя-бы. Тинькофф/Альфа скорее всего в те же ворота), ни современные игрушки, ни даже клиент ВКонтакте или Telegram! Смартфоны откровенно позиционируются производителями как девайсы начального класса, которые подойдут в роли смарт-звонилки с возможностями что-то загуглить при необходимости. В них даже LTE нет, только 3G, который потихоньку в МСК начинают сворачивать.
Почти всё выше написанное применяется и к похожим смартфонам на Ali до 4.000 рублей. То же железо, разве что могут сделать в дизайне свежего флагмана с большим дисплеем неплохого качества. Чип практически 8 летней давности… в 2023… что-то здесь не то, да? В 2013 году выходило просто кучу девайсов за те же 2-3 тысячи рублей (примерно как сейчас 4-5 тысячи рублей), которые работали на очень свежих и бодрых MT6572/MT6577 в те годы. То есть, чипсет брался по году выпуска или чуть-чуть старше и все эти «мегафоны логины», «билайн смарты» легко тянули банки, оф. клиенты соц. сетей и мессенджеры. Но видимо MediaTek изначально сделала огромные заказы на 6580, захотев отнять рынок ультрабюджетных девайсов у Spreadtrum. И таки да, план работает, устройства на 6580 до сих пор продолжают выходить, с одними и теми же чипсетами, одними и теми же чипами памяти и кое-где даже схожими платами (все они наследуются от одной референсной платы). И если 5-6 лет назад в качестве самой дешевой памяти использовали eMCP от Hynix, которая была вполне неплохой: у меня многие девайсы с ней до сих пор живут и здравствуют, то сейчас используется некая Barum и Foresee. Ни по маркировке, ни по CID ничего официального найти не получается, что даёт нам возможность предположить, что это просто перемаркированная бракованная память от Hynix/Samsung с перебитым CID.
На eMMC обычно есть JTAG-поинты, а на заводах их наверняка проверяют на кол-во бэдблоков и перезаписываемость. Лично мне кажется, что сотрудники условного Hynix просто за «дешман» перепродают полуживые eMCP модули производителям смартфонов, а те их ставят в свои смартфоны. Ведь хотя-бы месяц-два они походить должны! Вышенаписанное касается только ПЗУ, ОЗУ бракованную я не видел никогда.
Сегодняшним нашим героем станет некий Xgody Y20 — в своё время довольно популярная модель-«лопата» на AliExpress, которую я купил на «сдачу» с покупки свеженькой GTX1050. Смартфон я приобрел за 4.000 рублей, за такие деньги производитель обещал весьма неплохой набор характеристик: 6580, Android 5.1 (в 2018 то году!), 1гб ОЗУ (здесь наврал) и аж 6 дюймовый IPS дисплей с разрешением 480x800.
На своё время, смартфон был в целом неплох за свою цену нового девайса — 5.1 не особо много ресурсов кушает, там можно было поиграть и в NFS Most Wanted, и в оф. клиенте ВК посидеть, пока он ещё не разжирел, и просто пользоваться «на повседнев». Для меня он имеет особое значение, поскольку это первый смартфон, который я купил на первую лично заработанные 400$, когда в 16-17 лет запилил гиперкеж на юнити для своего товарища. Теперь я храню его как память, вместе с родной коробочкой, но его работоспособность под сомнением…
Причем я нашел страницу производителя: Shenzhen Xin Sheng Shang Techonology. XGody — похоже ее личный бренд.
❯ Немного теории
В своё время, я не сделал дамп прошивки с этого девайса, а их выходило по меньшей мере 2-3 ревизии. Прошивка в сети только для одной ревизии, поэтому когда моя система окончательно захламилась, я перепрошил его, не снимая галочки с preloader. На устройствах с MediaTek, Preloader помимо загрузки вторичного загрузчика lk, инициализирует контроллер ОЗУ и ПЗУ. Список поддерживаемых модулей eMCP хранится в виде таблицы CID -> настройки ОЗУ. Именно поэтому если прошить «левый» preloader мы будем получать постоянную ошибку в SP Flash Tool — смартфон банально не сможет инициализировать ОЗУ (DRAM_FAILED)! Если производитель захотел заменить eMMC на определенной ревизии, он добавляет в csv параметры ОЗУ eMCP модуля, его CID и пересобирает Preloader. Дошло до того, что прелоадеры сортируют по номеру сборки (preloader_wegc, preloader_magc, preloader_gemini и т. п.), а поддерживаемые CID вычитывают спец. софтом для подбора подходящего preloader'а!
Кто бы сомневался, что китайцы в один и тот же смартфон поставят несколько разновидностей памяти, так случилось и с моим. Похоже к концу производства, в них начали ставить самую дешевую память, поэтому когда я год спустя нашёл подходящий preloader (помог человек с программатором, сейчас найти preloader можно и без программатора — CID флэшки пишется в лог BROM Flash Tool'а), я прошил стоковую прошивку. И всё работало (кроме камеры), вот только девайс начал самопроизвольно зависать через ~час работы. И тут я предположил, что дело может быть именно в eMMC…
Теперь давайте по порядку: если вы когда-то прошили смартфон с неподходящим preloader, то его еще можно оживить, с помощью подбора prleoader'ов с других девайсов. Для этого пытаемся что-нибудь прошить, заходим в логи Flash Tool (Help -> Show logs), открываем лог BROM и ищем там «eMMC». Download Agent сам вычитывает ID флэшки и напишет её в лог. Забиваем CID флэшки в гугл, обычно гугл приводит на форумы, где сервисники сливали спец. софтом прошивку и выкладывали логи, где сервисный софт пишет CID флэшки. Прелоадер от этого девайса можно будет взять!
Если после оживления девайса вы получили белый экран — проблема в lk или ядре. lk — эдакий аналог U-Boot в MTK, инициализирует дисплей и показываем первую «заставку» (до появления бут-анимации). Ищем подходящее ядро (boot.img) или lk. Если остался родной рекавери/бут — ядро можно вытащить оттуда и «собрать из двух один». Ну а теперь к основной теме статьи!
❯ Перенос Android на MicroSD
Давайте определимся с необходимыми работами. Android поделен на 3 основных раздела, которые необходимы для работы системы:
- system — /system/ в файловой системе, read-only раздел с основными файлами системы, android.jar, приложениями.
- userdata — /data/ в файловой системе, хранит установленные приложения, их данные.
- cache — /cache/ в файловой системе, хранит собственно кэш ART/Dalvik (в более старых системах).
Сначала preloader загружает lk, затем lk в зависимости от режима загрузки (charger/normal/recover) выбирает нужный образ с ядром и рамдиском. boot.img — основной образ с ядром, запускающий систему, а recovery.img — рамдиск с рекавери, который содержит абсолютно такое же ядро, но вместо zygote запускает recovery. Точки монтирования основных разделов лежат в vold.fstab, который можно найти в /etc/ каждого образа. Суть переноса проста:
- Делим флэшку на 4 раздела с помощью fdisk.
- Форматируем 3 раздела в ext4, а 1 — в fat (для пользовательских файлов).
- Патчим vold.fstab.
- Копируем подмонтированный как loopback устройство system.img на первый раздел флэшки с сохранением всех прав.
- Перезагружаемся, ждём первой загрузки и радуемся спасенному девайсу!
В первую очередь нам надо разбить флэшку на разделы. Есть два варианта: с устройства и с ПК. Я лично всё делаю с устройства для наглядности. Для этого нам понадобится TWRP, ADB и флэшка на 8-16гб. Можно и на 2-4 уместить, но будет немного… тесновато! Флэшку лучше брать 10 класса: скорость eMMC редко ниже чем 100мб/c, а на флэшке 4-5 класса все будет совсем печально. Прошиваем TWRP с помощью SP Flash Tool:
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 5 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-5.png)
Загружаем скаттер MT6580, выбираем наш recovery.img и жмем Download. Подключаем выключенный смартфон, дальше софт всё сделает сам!
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 6 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-6.png)
После прошивки рекавери, в него нужно зайти с помощью громкости вверх + включения. Девайс предложит выбор режима загрузки — выбираем Recovery. В TWRP сразу открыт доступ к смартфону через adb, поэтому мы можем работать как root пользователь с обычного терминала. Разбиваем нашу флэшку с помощью fdisk. На большинстве устройств mmcblk0 — это eMMC/NAND, а mmcblk1 — это внешняя microsd флэшка.
fdisk /dev/mmcblk1
n
p
1
<желаемый размер в цилиндрах для системы>
n
p
2
<желаемый размер в цилиндрах для юзердаты (лучше побольше)>
n
p
3
<желаемый размер в цилиндрах для кэша (можно ~50мб)>
n
p
4
Enter (разметит остаток флэшки для данных пользвоателя)
w
exit (выходим из шелла)
adb reboot recovery (перезагружаемся снова в recovery).
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 7 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-7.png)
Таблица разделов обновится только после перезагрузки. То, что сыпет ошибками ioctl — норма. Если вы всё сделали правильно, то в /dev/block увидите mmcblk1p1, p2, p3, p4 — это наши разделы. Еще раз вспоминаем: 1 раздел под system, 2 раздел под userdata, 3 раздел под cache, 4 раздел под всё остальное. Порядок следования значения не имеет, но я решил пронумеровать так для удобства.
Теперь нам нужно отформатировать наши разделы и подмонтировать /system/. Копируем только файлы из /system/, если вам не нужны данные на устройстве — наш /data/ достаточно будет отформатировать вместе с /cache/. Осторожно! На старых мобилках busybox на 32х битных системах не умеет форматировать ext2 на больших разделах. Ниасилили. Тут либо копировать раздел напрямую с помощью dd (что мы и сделаем), либо форматировать флэшку с ПК через кард-ридер. У меня cygwin на ПК не установлен, как и виртуалки с линухом, поэтому это вполне неплохая альтернатива:
adb shell
mount /dev/block/platform/mtk-msdc.0/by-name/system /system/
mkdir /systemsd/
mount /dev/block/mmcblk1p1 /systemsd/
dd if=/dev/block/platform/mtk-msdc.0/by-name/system of=/dev/block/mmcblk1p1 bs=1M
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 8 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-8.png)
Со скоростью флэшки не обманули!
В этой версии busybox есть баг с форматированием разделов >2гб на 32х битных системах. Поэтому если вы не хотите замарачиваться с установкой cygwin/линуха в виртуальную машину, можно просто взять dd. Нулями забить не выйдет — Android автоматом /data/ не форматирует. Если Android не сможет его подмонтировать — получите либо бутлуп, либо в системе ничего не будет сохраняться.
dd if=/dev/block/platform/mtk-msdc.0/by-name/userdata of=/dev/block/mmcblk1p2 bs=1M
dd if=/dev/block/platform/mtk-msdc.0/by-name/cache of=/dev/block/mmcblk1p3 bs=1M
Теперь нам осталось пропатчить vold в родном boot.img, чтобы система загружалась с microsd флэшки. Для этого берем AndImgTools или готовую «кухню» (я использую MTKImgTools) и распаковываем родной boot.img из прошивки:
В Unpack/boot/ramdisk/fstab.mt6580 заменяем:
/dev/block/platform/mtk-msdc.0/by-name/system /system ext4 ro wait
/dev/block/platform/mtk-msdc.0/by-name/userdata /data ext4 noatime,nosuid,nodev,noauto_da_alloc,discard wait,check,resize,encryptable=/dev/block/platform/mtk-msdc.0/by-name/metadata
/dev/block/platform/mtk-msdc.0/by-name/cache /cache ext4 noatime,nosuid,nodev,noauto_da_alloc,discard wait,check
/dev/block/platform/mtk-msdc.0/by-name/protect1 /protect_f ext4 noatime,nosuid,nodev,noauto_da_alloc,commit=1,nodelalloc wait,check,autoformat
/dev/block/platform/mtk-msdc.0/by-name/protect2 /protect_s ext4 noatime,nosuid,nodev,noauto_da_alloc,commit=1,nodelalloc wait,check,autoformat
/dev/block/platform/mtk-msdc.0/by-name/nvdata /nvdata ext4 noatime,nosuid,nodev,noauto_da_alloc,discard wait,check,autoformat
На:
/dev/block/mmcblk1p1 /system ext4 ro wait
/dev/block/mmcblk1p2 /data ext4 noatime,nosuid,nodev,noauto_da_alloc,discard wait,check,resize
/dev/block/mmcblk1p3 /cache ext4 noatime,nosuid,nodev,noauto_da_alloc,discard wait,check
/dev/block/platform/mtk-msdc.0/by-name/protect1 /protect_f ext4 noatime,nosuid,nodev,noauto_da_alloc,commit=1,nodelalloc wait,check,autoformat
/dev/block/platform/mtk-msdc.0/by-name/protect2 /protect_s ext4 noatime,nosuid,nodev,noauto_da_alloc,commit=1,nodelalloc wait,check,autoformat
/dev/block/platform/mtk-msdc.0/by-name/nvdata /nvdata ext4 noatime,nosuid,nodev,noauto_da_alloc,discard wait,check,autoformat
Обратите внимание на encryptable. Этот флаг нужно убрать, иначе система упадет в бутлуп. Шифрование «нинужно»!
Собираем boot.img, прошиваем с помощью SP Flash Tool и тестируем что получилось! По самому распространенному списку ошибок:
- Ребут сразу после начальной заставки, до анимации загрузки — либо поврежден boot.img, либо вы неверно скопировали /system/
- Бутлуп: отформатируйте правильно /data/
- Система очень сильно лагает после загрузки: это же первая загрузка, будьте терпеливей. Система с SD стартует заметно медленнее.
- Жалуется на невозможность расшифровать пользовательский раздел: Либо форматировать с помощью mke2fs (только twrp), либо пропатчить таблицу разделов самого twrp и сменить ФС уже с его помощью!
Кстати! Забавный нюанс: во время подготовки оригинала статьи, какая-то китайская флэшка на 16гб с алика у меня померла прямо во время записи образа dd. Так что будьте осторожнее! :)
❯ Юзабельно ли?
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 11 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-11.jpg)
Друзья! Очень важно понимать, что после первой загрузки Android нужно закэшировать приложения, а после каждой загрузки — прогрузить все ассеты минимально необходимых приложений в ОЗУ. Для особой наглядности, я назову этот процесс «пропердеться» :) После 1-2 минутной загрузки, система начинает работать неплохо, но не особо отзывчиво. Очень важно не забывать, что даже быстрая MicroSD в десятки раз медленней самой дешевой eMMC памяти, поэтому система будет работать не особо быстро.
Если бы в устройстве было хотя-бы 2-3гб ОЗУ, то теоретически систему можно было бы загнать в рамдиск и распаковывать с флэшки при каждой загрузке. Да, загрузка системы будет занимать минут 5, но сама система будет прямо таки летать!
Сёрфинг девайсу даётся неплохо. В целом, всё работает шустро, главное не заставлять девайс выгружать приложения в фоне. Иначе переключение на мессенджер или рабочий стол обернется 10 секундным ожиданием!
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 12 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-12.jpg)
Неплохо даются и соц. сети. Пользоваться легким клиентом ВК можно без проблем, Telegram и WhatsApp я бы не рискнул — они нехило наседают на хранилище. Но попробовать можно.
Основные функции звонилки тоже работают адекватно. Никаких проблем с этим нет, хотя теоретически может произойти ситуация, когда при первом звонке после ребута вы сможете ответить только через 1-2 секунды прогрузки интерфейса звонилки.
![На грани отвала eMMC: Устанавливаем Android на SD-карту на любом смартфоне-планшете! Вторая жизнь для дешевых кит. устр - 13 image](https://www.pvsm.ru/images/2023/02/25/na-grani-otvala-eMMC-ustanavlivaem-Android-na-SD-kartu-na-lyubom-smartfone-planshete-vtoraya-jizn-dlya-deshevyh-kit-ustr-13.jpg)
Поиграть тоже можно, но в основном в эмуляторы. Никаких вам пубгов на таком железе! Зачем было городить 9 андроид на чипсет 8 летней давности — мне не понять, но 5ка и 6ка бегают хорошо! Есть возможность установки кастомной облегченной прошивки, я лично запускал на этом девайсе «линейку» и ходил… до первого зависона. После полного переноса прошивки на microsd, зависания пропали — а значит девайс мы оживили и дали ему вторую, пусть чуть-чуть и тормозную жизнь! Почти из коробки работают все прошивки для 6580 с той же версией ядра — у моего 3.10.72, что даёт возможность накатить Android 5, 6 и 7. Но по понятным причинам, я остановлюсь на «пятерке». Также не рекомендую ставить на такое железо MIUI, прошивки с Meizu и.т.п — MIUI едва вывозят сами редмики, а тут вы на слабое железо его поставит.
❯ Заключение
Как вы уже поняли, оживить таким образом получится только девайсы, у которых eMMC ещё не совсем упала в readonly. Должны быть доступными хотя-бы первые 50мб USER раздела eMMC. На самом деле, я далеко не первооткрыватель такого способа переноса Android на флэшку: похожим образом работают кастомные свежие прошивки для девайсов 2010-2011 годов, как например Xperia Arc: там часть системы тоже отправляется на microsd, поскольку не «помещается» во внутреннюю память, а в 2011-2012 году, таким образом ставили прошивки на Galaxy Young/Ace, дабы освободить немножечко места во внутренней памяти!
После такого даунгрейда, девайс заметно теряет в отзывчивости и работает гораздо медленнее. Но если вам срочно нужен смартфон, а возможности приобрести другой нет, или вам девайс дорог как память — почему бы не оживить его таким способом? А вы как считаете?
Это не единичная статья, я регулярно пишу различные интересные статьи о самых разных гаджетах в своём блоге. Подписывайтесь на меня и TimeWeb, чтобы не пропустить новый контент! Также, если есть что-то, что жалко выкинуть на свалку, но применения найти не можете — можете заслать мне в качестве эдакого «доната». Доставка — с меня! :)
Автор: Богдан