
Мир моддинга Android, где энтузиасты создают кастомные прошивки, существует уже больше десяти лет. Обычно цель — обновить устройство до более новой версии системы, чем предлагает производитель. Но что, если пойти обратным путем? В этой статье я расскажу о своем эксперименте по портированию более старой версии Android (2.2) на смартфон, который изначально работал на более новой (2.3). Это не просто технический вызов, а способ заново пережить ощущения от ранних дней Android и вдохнуть новую жизнь в забытое железо. Мы разберем процесс без углубления в код, сосредоточившись на настройке скриптов и замене системных библиотек для адаптации прошивки к конкретному аппаратному обеспечению. Интересно? Тогда добро пожаловать под кат!
❯ Что побудило к эксперименту
Как и у многих, мое знакомство с Android началось с версий 2.x. Ощущения от первого смартфона — разблокировка свайпом, скевоморфные иконки, загрузка страниц через медленный GPRS — были волшебными. Современные оболочки вроде One UI или даже чистый AOSP не могут передать той магии.
Моим первым смартфоном была китайская реплика Samsung Galaxy S III Mini, купленная в начале 2013 года. За смешные по тем временам деньги (около 2000 рублей) она предлагала скромные, но для студента революционные характеристики:
Процессор: одноядерный Spreadtrum SC6820 (Cortex-A5, 1 ГГц) с графикой Mali-400. Высокоинтегрированный чип, включавший даже элементы GSM-модуля.
Память: 256 МБ оперативной и столько же встроенной памяти в одном чипе eMCP — технологии, уже устаревшей к тому моменту.
Дисплей: простой TFT на 3 дюйма с разрешением 480x320 и емкостным сенсором на две точки.
Аккумулятор: около 1500 мАч, выполненный в форм-факторе, знакомом по старым телефонам Nokia.
Устройство лагало, но позволяло экспериментировать: я пробовал писать сайты и даже изучал разработку под Android. Самого аппарата уже нет, но ностальгия осталась. В мире современных безрамочных смартфонов такие «китайцы» кажутся реликтами, но именно их необычные форм-факторы (например, слайдеры с QWERTY-клавиатурой) по-прежнему привлекают.

Желание снова использовать такое устройство «на ежедневной основе» не покидало меня, даже несмотря на то, что сервисы для Android 2.2 практически умерли. Это отчасти синдром утенка, отчасти вызов — создать для него легковесные клиенты для современных сервисов и дать ему второй шанс.

Объектом для эксперимента стал другой смартфон на том же чипсете Spreadtrum — Galaxy S III Mini, но с заводским Android 2.3. Мне захотелось «откатить» его до версии 2.2, которая казалась более аутентичной и ностальгичной. Задача упрощалась тем, что для этого чипсета уже существовали рабочие прошивки на Android 2.2. Оставалось лишь адаптировать их под конкретную модель.

❯ С чего начать портирование
Прежде чем браться за портирование, нужно понять базовый процесс загрузки Android:
Загрузчик (Bootloader): после включения микропрограмма BootROM инициализирует железо и передает управление вторичному загрузчику (например, U-Boot или LK), который загружает ядро Linux.
Ядро Linux: после загрузки запускается процесс с PID 0 — /init. Его задача — выполнить скрипты инициализации (init.rc) и подготовить пользовательское пространство.
Zygote и app_process: система запускает службы, драйверы и ключевой для Android процесс Zygote (на основе app_process). Он предзагружает Java-фреймворк, а затем «клонирует» себя для запуска каждого нового приложения.
Таким образом, для минимально рабочей системы нужны: подходящее ядро, рабочий init.rc и набор платформенных библиотек (особенно в /lib/hardware). Наша цель — портировать системный раздел (system.img) с прошивки Android 2.2 от другого устройства на тот же чипсет, сохранив родное ядро (boot.img) целевого смартфона.

Я взял прошивку от FeiTeng N9300 Mini для своего M-Horse 9500 Mini. Структура разделов совпадала, поэтому для начала я просто прошил чужой system.img, оставив родной boot.img.

❯ Первая загрузка и проблемы
После прошивки телефон загрузился, но вел себя странно: не было сети, не работал тачскрин, а индикатор батареи показывал 0%. Смартфон быстро выключался, даже будучи подключенным к зарядке.

Без тачскрина управление возможно только через ADB. Чтобы включить отладку, нужно модифицировать родной boot.img. С помощью утилиты MtkImgTools распаковываем образ, в файле `default.prop` меняем `ro.debuggable` на 1 и `ro.secure` на 0, затем перепаковываем и прошиваем. Теперь можно подключиться к устройству через `adb shell`, даже если интерфейс не отвечает.

Драйвер тачскрина (gt868.ko) в устройствах Spreadtrum часто идет отдельным модулем. В скрипте инициализации `init.sp6820a.init.3rdparty.rc` была строка `insmod gt868.ko`, но сам драйвер в портированной прошивке отсутствовал. Я извлек его из родного образа системы и загрузил вручную через ADB:
adb push gt868.ko /system/lib/modules/adb shellinsmod /system/lib/modules/gt868.ko
Тачскрин заработал. Чтобы драйвер загружался автоматически, нужно поместить его в нужную папку и прописать команду в скрипт инициализации, после чего перепаковать boot.img.

❯ Исправляем зарядку и мобильную сеть
Следующая проблема — отсутствие зарядки. В логах (`dmesg`) были сообщения от сервиса, отвечающего за батарею. Оказалось, что в портированной прошивке не хватает родной утилиты `vcharged` из `/system/bin/`. После ее копирования с восстановлением прав (`chmod 777`) зарядка заработала.

Сеть не определяла SIM-карту, а IMEI отображался как `null/null`. За связь с модемом в Android отвечает RIL (Radio Interface Layer) — набор библиотек и служб. В логах была ошибка из-за отсутствия служб `sprd_monitor`, специфичных для Spreadtrum. После копирования `engappclient` и `engmodemclient` из родной прошивки IMEI стал виден, но сеть все равно не регистрировалась.

Решение нашлось в скрипте `/system/opl/telephony/bin/init.tel`, который отвечает за инициализацию радиотракта. Его ручной запуск (`sh init.tel`) вернул сеть: появился уровень сигнала, определилась SIM-карта, заработали звонки. Осталось добавить вызов этого скрипта в init.rc портированной прошивки для автоматического запуска при загрузке.

На полную отладку и приведение системы в рабочее состояние ушел всего один день. Это наглядный пример того, как можно адаптировать прошивку, не имея исходных кодов, лишь заменяя ключевые компоненты.
❯ Android 2.2 в 2024 году: что может старое железо?
После всех исправлений устройство ожило с классическим интерфейсом в стиле TouchWiz, знакомыми обоями-одуванчиками и характерными звуками. Но встает вопрос: на что оно способно в современном мире?

Стандартный браузер не справляется с современным вебом, официальные клиенты соцсетей не работают. Однако это не приговор. Я разработал для него легковесные клиенты для необходимых сервисов (например, для мессенджера ВКонтакте), которые весят менее 100 КБ и работают очень шустро.

YouTube через потоковое вещание не посмотреть, но можно заранее скачивать видео на карту памяти и воспроизводить через простой плеер. Звук в наушниках, конечно, далек от Hi-Fi, но для ностальгического прослушивания MP3-треков, скачанных когда-то через 2G, — более чем достаточно. Устройство может служить медиаплеером в машине через Bluetooth или позволить поиграть в ретро-игры вроде Temple Run, которые уже не всегда запускаются на новых Android.

❯ Выводы
Подобное устройство далеко не безнадежно. Оно может выполнять базовые задачи: общение в мессенджерах, простой веб-серфинг, прослушивание музыки и даже просмотр видео. Все упирается в желание и готовность потратить время на поиск или создание подходящего софта.
Для кого-то это странное хобби, а для меня — увлекательный процесс погружения в систему, изучения работы драйверов и создания оптимизированных приложений, которые весят килобайты вместо мегабайтов. Это способ не только оживить старое железо, но и лучше понять, как устроена операционная система.
Если у вас завалялся подобный «китаец», который жалко выбросить, но нет желания с ним возиться, — он может обрести вторую жизнь в руках энтузиаста. Эксперименты продолжаются!
[мой]смартфон покупка гаджета программирование Android телефон ретро устройство приятные вещи Linux портирование научное видео без звука длинный пост 17Больше интересных статей здесь: Гаджеты.
Источник статьи: Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?.