Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?

Сфера моддинга, связанная с разработкой и портированием пользовательских прошивок для устройств Android, существует уже более десяти лет. В основном энтузиасты пытаются обновить свои устройства, портируя более новую версию Android, чем предоставляет производитель устройства. Что мы можем сказать, если уже 12-летний Galaxy S III получит неофициальное обновление до Android 14? Время от времени в голову приходят различные мысли относительно весьма странных модификаций. Например, почему бы не портировать его на более старый смартфон.. попробуйте использовать еще более старую версию Android и посмотрите, что получится. Может показаться, что я «портировал и портировал», но в процессе я обнаружил множество интересных нюансов и особенностей Android, которыми мне хотелось бы поделиться с вами, мои читатели. Сегодняшняя статья будет построена в классическом стиле «научной поп-музыки» без кода, а с исправлением скриптов для настройки системы и заменой библиотек, специфичных для платы, чтобы система имела всю необходимую функциональность.Давайте подробнее рассмотрим один из методов портирование прошивки Android, сделав ее «осведомленной» аппаратное обеспечение! интересный? Мы будем ждать вас под катом!

❯ Мотивация


Как и у многих моих читателей, одной из моих первых версий Android была 2.x. Попользовавшись простым китайским кнопочным устройством, вы наверняка никогда не забудете свои первые впечатления от использования более нового, пусть и более дешевого и менее функционального Android-смартфона. Эти ощущения были потрясающими. Здесь мы разблокируем смартфон, потянув «Замок» вправо, свайпнем по рабочему столу, тапнем по иконке браузерного приложения, созданного в стиле скевоморфизма, и получим доступ к полной странице Википедии через сеть GPRS. Она загружается (мой первый в смартфоне не было 3G), страница плавно прокручивается, и вы не забываете смахнуть шторку вниз, чтобы проверить статус ваших уведомлений на пока еще очень простой панели уведомлений... Это были поистине удивительные впечатления, которые современные устройства, включая AOSP и MIUI, превзойти не получится, как и OneUI.

Моим первым смартфоном стала китайская копия Samsung Galaxy S III Mini, которую я купил в начале 2013 года. Возможно, кто-то из вас помнит, как такие дешевые смартфоны и планшеты «Sumsanc» можно было приобрести на рыночных ларьках, в метро и других местах, где разрешена продажа несертифицированных устройств. Даже с учетом роста цен эти смартфоны стоят всего 2000 рублей, что является просто «подарком» к цене совершенно нового гаджета. На начало 2013 года это устройство было очень простым и имело следующие характеристики:

  • Процессор: Spreadtrum SC6820. 1 ядро ​​Cortex-A5 до 1 ГГц, графический процессор Mali400 MP. Этот набор микросхем для своего времени был очень высокоинтегрированным. В некоторых случаях он включал в себя ядро ​​ARM, графический процессор, контроллер питания, GPS, множество периферийных устройств (например, ЦАП) и даже часть основной полосы радиоканала GSM. BT/Wi-Fi реализован в отдельном комбинированном чипе, разработанном RDA.

  • Память: 256 МБ DDR1 RAM/256 МБ NAND-памяти в одном чипе Hynix eMCP. Предположительно, эти чипы лежали на складах еще со времен первых Android-смартфонов, но быстро потеряли свою актуальность и, вероятно, раздавались «почти бесплатно», что еще больше снизило себестоимость таких смартфонов.

  • Дисплей: Безусловный TFT. Разрешение обычно составляет 480x320 или ниже, что нормально для 3-дюймового дисплея, но слишком мало для 5-дюймового дисплея. Однако сам дисплей был в порядке, и мои глаза не «кровоточили» от дисплея. Сенсорные экраны обычно двухсенсорные и емкостные.

  • Android: версии 2.2, 2.3 встречаются на некоторых похожих моделях.

  • аккумулятор: ~1500 мАч, больше не требуется. Форм-фактор напоминает BP-4L и легко вписывается во многие смартфоны Nokia S60 того времени.


Не слишком много, правда? Уже в апреле того же года появился Galaxy S4 с Snapdragon 600, 2 ГБ оперативной и 32 ГБ встроенной памяти, но на этот раз он оснащен одноядерным чипсетом и 256 МБ оперативной памяти. Однако для меня, будучи студентом, это было большим благословением. Ничего больше не делая, я создал несколько динамических WAP-сайтов на PHP и попытался загрузить их на FTP, а также загрузил пакет ADT, чтобы опробовать его. На свой смартфон можно запилить что угодно свое!Несмотря на лаганье аппарата, в целом остался доволен. У меня больше нет этого конкретного устройства.. но я все еще храню воспоминания о нем, и в новом мире современных смартфонов такие китайцы по большей части оказались на свалке истории. Мы даем вам новый дом!

Но форм-фактор смартфонов, которым больше десяти лет, тоже может быть интересным. В современном мире редко встретишь сотовый телефон с полноценной QWERTY-клавиатурой (за исключением смартфонов UniHertz, которые стоят недешево), боковой слайдер. Поэтому мой интерес к таким устройствам объясняется очень легко!

Но у меня самого иногда возникает желание вновь пережить эти ощущения и снова использовать такое устройство «каждый день», даже если нет реально работающих на Android 2.2 сервисов. Частично я решу проблему сам и рано или поздно создам клиентов на нужные сервисы (если они мне действительно нужны), чтобы вдохнуть новую жизнь в "старое" устройство. И хотя это может быть связано с синдромом утенка и посредственной ностальгией, мое ощущение «неловкости» отнюдь не было временным, и даже сейчас я все еще пользуюсь смартфоном с интерфейсом, которого никогда раньше не видел это!

Я бы, наверное, солгал, если бы сказал, что никогда не решал портировать свой старый Android на новый телефон «как есть». Я по-прежнему верю, что мы можем хотя бы частично вдохнуть новую жизнь в эти устройства самостоятельно и заставить их работать с современными сервисами. Таким образом, эти устройства могут принести пользу не только мне, но и другим людям, которые вынуждены намеренно переключаться на пониженную передачу или использовать свои устройства. Если вы используете более старую версию Android, то предметом сегодняшнего теста является один из представителей подобных малоизвестных смартфонов того времени, а именно Galaxy S III Mini на том же железе, на котором работал мой первый смартфон из. Однако с завода он поставлялся с Android 2.3. На мой взгляд эта версия системы была слишком новой и я естественно захотел откатиться на Андроид 2.2!

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

❯ Первые шаги


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

  • Загрузчик: при включении смартфона основной загрузчик BootROM, подключенный к набору микросхем во время производства чипа, инициализирует некоторые периферийные устройства, а вторичный загрузчик из NAND (SPL — Second Program Loader, который инициализирует DDR)) и контроллер UART) для управления. Затем вторичный загрузчик передает управление U-Boot. В его задачи также входит инициализация периферийных устройств, работа с устройствами постоянной памяти (такими как контроллеры NAND или SD), загрузка ядра Linux и настройка самого процесса загрузки. U-Boot можно рассматривать как своего рода альтернативу UEFI/BIOS для мира устройств, отличных от x86. В смартфонах на базе чипов MediaTek и Qualcomm роль U-Boot выполняет ЛК. LK — небольшая ОС, включающая в себя такие задачи, как инициализация периферийных устройств и передача управления ядру Linux с помощью программы загрузки.

  • Ядро Linux: После загрузки образа ядра из initrd (небольшая файловая система, загружаемая непосредственно в память и содержащая скрипты для настройки всего остального) и передачи управления ядру, Linux имеет PID 0 — /init. Запускаем программу. Его задача — запустить сценарии инициализации среды пользовательского пространства системы в init.rc. При этом смартфон фактически готов к работе. В одной из своих статей я показал вам, как приостановить загрузку Android и запустить код, используя все ресурсы вашего смартфона в своих целях.

  • zygote и app_process: Помимо запуска служб, необходимых для работы смартфона, динамической загрузки драйверов (с помощью insmod), и определения режима загрузки (например, если телефон подключен к зарядке в выключенном состоянии, (это анимация зарядки) , init.rc запускает две программы. Один из них необходим для функционирования системы. Первый — bootanimation, воспроизводящий анимацию включения смартфона, и app_process, меняющийся на зиготу в одном из режимов его работы. Самый важный процесс для Android — предварительная загрузка системного байт-кода Java при запуске системы. Используется для рисования интерфейсов, воспроизведения звуков и т д.p получается из Framework.jar и других системных ресурсов (таких как темы и изображения), и при запуске каждого приложения оно клонирует себя (с уже загруженными ресурсами) и начинает работу. Байт-код работающего приложения или службы Android.

    Каждое запущенное приложение или служба — это отдельный app_process, например программа запуска, служба Google, клиент Messenger и т д.


все выглядит просто и логично, не так ли? Подводя итог, можно сказать, что для минимально загружаемой системы вам необходимо ядро, подходящее для вашего устройства, рабочий init.rc и правильно выполненный init.rc. Кроме того, Android использует несколько библиотек, специфичных для конкретной платформы. В первую очередь они расположены в /lib/hardware и без них ваша система может не загрузиться или что-то не работать. Вы должны быть особенно осторожны при работе с libhardware.so.

Как уже говорилось выше, мы портируем прошивку с другого смартфона на том же чипсете, но что интересно, это та же самая реплика, что и раньше. Мой смартфон из коробки работает на Android 2.3. Это гораздо более стабильно, чем исходный порт 2.2 на этой платформе. Между 2.3 и 2.2 есть существенные различия. Например, в 2.2 шторки совершенно другого цвета, есть светлая тема по умолчанию и нельзя свайпом закрыть уведомления. Кроме того, система в целом выглядит немного иначе. Для работы необходимы два образа прошивки. Один для портирования, другой для стока.

Обратите внимание: Меняем старое оформление Android на новое!.

Прошивки для смартфонов на платформе Spreadtrum распространяются в формате pac, но вы можете смело заменить образ раздела в фирменной утилите ResearchDownload для прошивки смартфонов с этим чипсетом.

Решил взять родную прошивку от FeiTeng N9300 Mini на свой смартфон M-Horse 9500 Mini. Для моих устройств не было никакой разницы в структуре разделов и списке между устройствами, поэтому я сначала прошил раздел system.img напрямую, чтобы посмотреть, что произойдет с устройством. Помните, что ядро ​​и init.rc сохраняются в образе boot.img. Так что прошивать системный раздел можно безопасно!

❯ Первый запуск


После прошивки чужого системного раздела телефон загрузился.. но повел себя немного странно. Во-первых, сети не было. Во-вторых, не работал тачскрин (с родным ядром). В-третьих, у Android вообще нет батареи и если смартфон не заряжен, он зависнет на 0% и быстро выключится. При попытке подключить кабель смартфон показывал индикацию зарядки, но потребление было нулевым.

тачскрина нет, поэтому root-доступ через adb нужно включать вручную. Для этого необходимо перепаковать родной загрузочный раздел. Для разархивирования и упаковки образов используем MtkImgTool, очень удобную «кухню» для работы. Берем boot.img из pac, кидаем в Unpack/Image/ и разархивируем через Boot -> Unpack -> boot.img

В Unpack/boot/ramdisk/default.prop вам нужно изменить ro.debuggable на 1 и ro.secure на 0. Это позволяет вам отлаживать ваше устройство, даже если Android на самом деле не работает.

теперь у вас есть корневая консоль для вашего устройства, даже если ваш телефон завис на заставке. Воспроизведите изображение, напишите оболочку adb в консоли и посмотрите, что здесь не так... Драйверы сенсорного экрана обычно статически связаны с ядром, но для устройств Spreadtrum цель помещается в модуль ko. Он находится в папке /lib/modules / или /sps/. Давайте посмотрим на init.sp6820a.init.3rdparty.rc, который отвечает за инициализацию, специфичную для этой модели смартфона.

да, вы видите insmod gt868.ko?Это команда, которая загружает драйвер тачскрина (в данном случае вышеупомянутый GT868). Могут существовать и другие модели тачскринов, но основная разница между прошивками 2.2 и 2.3 заключается в том, что папки с драйверами и некоторыми сервисами имеют разные названия. Извлеките драйвер gt868.ko из родного образа с помощью того же MtkImgTools и разархивируйте его как обычный раздел ext2:

В консоли устройства напишите следующее:

adb Push/gt868.ko
оболочка adb
insmod /system/lib/modules/gt868.ko

я также рад, что у него есть сенсорный экран. Драйвер сенсорного экрана — это обычное устройство, расположенное в /dev/input/, поэтому Android сам выбирает новое устройство ввода. Чтобы загрузить драйвер во время загрузки, просто поместите его в раздел /system/ и добавьте в init.sp6820a.3rdparty.rc. Перед этим вам необходимо перемонтировать раздел и сделать его доступным для записи:

При запуске
insmod /system/gt868.ko

оболочка adb
busybox mount -o remount,rw /system/
mkdir /lib/модули/
Выход
adb Push gt868.ko /lib/modules/

После изменения скрипта Rc необходимо перепаковать boot.img с помощью MtkImgTools и прошить его с помощью ResearchDownload. Тачскрин работает даже после перезагрузки!

❯ Поднимаем зарядку и сеть


тогда связи с аккумулятором не будет и расход батареи будет равен нулю. Здесь нам нужно было просмотреть и прочитать журналы ядра с помощью команды dmesg. Я заметил, что некоторые сервисы что-то пишут про аккумуляторы, и разобраться в этом не составило труда. Программу зарядки я нашел в папке /system/bin. Видимо, это и послужило причиной того, что CP начал заряжаться. Я не уверен, что именно он делает, но, вероятно, он корректирует некоторые значения в sysfs и, возможно, использует ioctl для связи с драйвером CP, чтобы дать ему разрешение на начало зарядки и обновление информации в sysfs. Я дам. В любом случае после замены /system/bin/vcharged на родную прошивку зарядка заработала.

для этого снова перемонтируйте /system/ в режиме записи и скопируйте vcharged, не забывая восстановить необходимые разрешения:

adb push charge /system/bin/
оболочка adb
chmod 777 /system/bin/charge

Перезагрузите устройство, и вы увидите индикатор зарядки!

Вроде всё работает: звук, вибрация, Wi-Fi с Bluetooth, но сети нет. Устройство не определило наличие SIM-карты и вместо IMEI отобразило null/null:

Для этого нужно понять, как работает подсистема, взаимодействующая с радиомодулем Android, называемая ril (Radio Interface Library). Вместо того, чтобы система работала напрямую с AT-командами (которые могут быть проприетарными и вообще отсутствовать на некоторых чипсетах, таких как Qualcomm), RIL предоставляет удобный набор функций (например, запрос состояния радио). RIL состоит из службы rild в /system/bin/ и библиотеки libril.so в папке /system/lib/. Когда система загружается, TelephonyManager открывает сокет с помощью rild и опрашивает его статус. Система получает информацию об уровне сигнала, имени оператора, IMEI и другие данные из TelephonyManager.

Заглянув в Dmesg, я обнаружил, что система переполняется, поскольку не может запустить собственную службу Spreadtrum, sprd_monitor. Когда я пытаюсь позвонить по номеру 112, смартфон продолжает пытаться включить беспроводной модуль. Я попробовал поиграться с пользовательским интерфейсом исходного кода Android, чтобы понять рабочую логику, но проблема была именно в упомянутом выше сервисе sprd_monitor. Получите их из /system/bin/ оригинальной прошивки, не забудьте выставить настройки прав на устройстве и перезагрузите систему:

adb push engappclient /system/bin/
adb push engmodemclient /system/bin/
оболочка adb
chmod 777 /system/bin/engappclient
chmod 777 /system/bin/engmodemclient

Ошибка Dmesg пропала и IMEI виден, но аппарат по-прежнему никуда не пытается позвонить и висит на экране звонка. В настройках смартфон показывает, что уровень сигнала недоступен. Это значит, что беспроводной модуль еще не работает :(

но мы не сдадимся так просто! Я порылся в файловой системе и нашел в каталоге /system/opl/telephony/bin/ скрипт, который вызывает родной 3rdparty.rc и отвечает за инициализацию радиотракта. После запуска sh скрипта видно, что сеть отображается, устройство набрало 112, а также отображается сим-карта!

shinit.tel

теперь все полностью работоспособно :) Перенес часть init из boot.img портированной прошивки, чтобы беспроводной путь запускался при загрузке устройства. Кому-то все это может показаться очень сложным и трудоемким. Однако для полной отладки и загрузки такой кастомной прошивки на устройство потребовался всего один день. Можно сказать, что это самое элементарное и простое объяснение такой сложной темы, как модификация Android-устройства.

Но мы сделали все это не таким образом. Посмотрим, как такое устройство будет работать на Android 2.2 в 2024 году, через 14 лет после выхода системы. Все ли так плохо, как кажется?

❯ Знакомимся с девайсом


Многие читатели помнят этот ламповый интерфейс в стиле TouchWiz, обои с одуванчиками и панель запуска со смартфонов, которые не имели интерфейса Samsung. И этот «грохочущий» звук… его трудно забыть!

Конечно, поначалу может показаться, что это устройство не очень подходит для современных задач. Браузер не может загрузить большинство страниц, и единственной альтернативой являются Opera Mini и официальные клиенты ВК, в которых вообще нет динамического контента. WhatsApp и YouTube уже давно не работают. Скорбящие читатели могут задаться вопросом, не превратилось ли это устройство, как и многие ему подобные, в звонилку…

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

Возможно, многие читатели удивятся – но таким устройством является YouTube. Мой домашний клиент не поддерживает потоковую передачу из сети (и, объективно, многие устройства ее не поддерживают), поэтому я предварительно загружаю видео на флэш-накопитель MicroSD, а затем воспроизвожу его. В качестве приятного бонуса вы сможете в любое время просмотреть видео в своей галерее.

Помню, как здорово было слушать музыку на таком устройстве. И если жалобы на основные динамики не имели особого значения, то были разглагольствования по поводу качества звука в наушниках. Хотя звук был громким, ему не хватало низких частот, поэтому он звучал немного плоско, но для меня этого было достаточно. - Ведь я слушал музыку в наушниках с рынка за 200-300 рублей! Я до сих пор помню те дни. Помню, как скачивал MP3-треки по 2-3 мегабайта каждый через 2G-интернет. Прослушивание одного трека означало бы просто загрузку другого, крутящегося вокруг и заполняющего мою музыкальную библиотеку. О, какое это было время! Тем не менее, устройство по-прежнему подходит для некоторых базовых мультимедийных функций, например, в качестве BT-хоста для музыки в автомобиле.
Для этих устройств вы можете загрузить Temple Run 2011 года, чтобы пережить истоки игр для смартфонов в те времена. Ведь не все игры того времени будут работать на последней версии Android!

❯ Заключение


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

Для кого-то это всего лишь проявление синдрома утенка или образа, что «кому-то не следует этого делать»… А для меня это очень интересное, увлекательное и веселое времяпрепровождение. Покопайтесь в исходном коде ядра/драйвера и в конечном итоге создайте оптимизированное клиентское приложение размером 100-200 КБ вместо 100-200 МБ :)

Дорогие друзья, если у вас есть подобный, сделанный в Китае, и у вас нет такого же желания дать ему жизнь, но и выбрасывать его не хочется, то вы можете подарить его мне :) Как видите , Устройства: хороший ход. Буквально недавно я вытащил из-под СЦ нерабочий встроенный китайский 14 Pro Max в качестве основного смартфона. Еще у меня есть канал в Telegram, где я публикую закулисные статьи, различные заметки по ремонту, модам, программированию, реверс-инжинирингу и свои мысли. Если вам интересно, пожалуйста, приходите к нам!

Понравилась статья?Какой у вас был первый Android-смартфон?Напишите в комментариях, будет интересно прочитать!

[мой]смартфон покупка гаджета программирование Android телефон ретро устройство приятные вещи Linux портирование научное видео без звука длинный пост 17

Больше интересных статей здесь: Гаджеты.

Источник статьи: Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?.