Портирование с android one

Портирование с android one

Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения.

В данной теме обсуждаются лишь доступные для указанных процессоров версии Android, ниже версии 5.1 нет, и не будет!. Все вопросы наподобие «А можно портировать 4.4 на 6580 и т.д» будут удаляться без предупреждения!

Немного терминологии:
Стокоффициальное ПО которое поставлялось с смартфоном/планшетом. В него входит — прошивка, рекавери.
Портированиепроцесс адаптации ПО с устройства с аналогичными или не очень характеристиками под ваше устройство. Получившийся результат принято называть порт.
Донорустройство, ПО которого, служит основой для порта (см.выше)
Что значат термины портирование и кросспортирование

Все предоставленные инструкции не абсолютное руководство к действию. Прежде всего, всегда нужно думать головой и лишь потом делать что-то руками. Инструкции не дают 100% гарантии того, что выполнив их вы запустите прошивку.

«Хоть среди нас и есть экстрасенсы, но предсказательно-чакровая энергия не безгранична. Поэтому, от вас лишь требуется: волос девственницы, семя распутника, капля росы гватемальского рассвета, кусочек гривы единорога, ну, или лог. » (с) Кто — то из форумчан
Лог ошибки обязателен (когда этого требует ситуация), нет лога, нет проблемы!

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

Как снять лог можно ознакомиться в этой теме Что такое LogCat и как им пользоваться? также, если у вас проблемы с коннектом снять лог можно и так.
Решения при проблемах с подключением по adb к ПК так же есть и здесь

Важное примечание! Лог снимайте командой adb logcat *:E -> logcat.txt. Тогда в логе будут указаны только ошибки, что намного упростит его обработку.

Если у Вас ошибка во время установки прошивки через рекавери, то лог можно снять и там. В TWRP 3.0.X лог снимается следующим образом:
1. Сначала воспроизводится ошибка ( повторно делаются те же действия которые привели к ошибке)
2. После идем в «Дополнительно — Копировать лог». Лог сохранится на карту памяти ( при ее наличии в телефоне) в виде файла recovery.log. Его необходимо прикрепить к посту с описанием проблемы (см. спойлер «Шаблон оформления сообщения с проблемой»).

Сообщение отредактировал rozetkin — 08.06.21, 00:00

Перед сборкой boot.img рекомендую руководствоваться следующими критериями:
1. Если порт — это оф.прошивка (либо ее мод) с устройства с аналогичными характеристиками, то в 90% прошивка запустится на вашем boot.img .
2. Если порт — это уже серьезно перебранная прошивка (CyanogenMod и т.д) то так же в 90% запустится с заменой kernel в boot.img донора

В общем смотрите по ситуации. Пока что, в бутах 6.0 особо различий нет со стоковым (имеется в виду в основных скриптах, исключая обвески) даже у того же CyanogenMod 13.0. Так что, смело меняем лишь kernel и пакуем ядро.
P.S но сравнить boot.img между собой не помешает никогда, ниже пример сравнения сток boot.img и СM 13 (на скрине — результат команды «Синхронизация папок» в TotalCommander):

Читайте также:  App html android что это

Этого набора мне хватило чтобы запустить CM13 и пару других портов. Конечно, это основа, скорее всего после запуска не будет звука, не будет работать камера, и GPS.

P.S Если не запускается по данной инструкции, то перебираем лишь boot.img заменяя kernel либо заменяя boot.img на свой. Так же обязательно кидаем папку /etc/firmware чтобы предотвратить слет IMEI ( не проверено ), больше ничего не меняем из файлов, и пробуем запускать.

Сообщение отредактировал Akella_MC — 11.09.17, 08:23

Итак, не работает звук:
lib\hw-все файлы на audio*.so

Если после этого, есть звук при уменьшении и увеличении громкости, так же при наборе номера, но не вопрозводит мелодии и т.д, тогда:
etc
audio_device.xml
audio_effects.conf
audio_em.xml
audio_policy.conf
media_codecs.xml
media_codecs_google_audio.xml
media_codecs_google_video_le.xml
media_codecs_mediatek_audio.xml
media_codecs_mediatek_video.xml
media_codecs_performance.xml
mtk_omx_core.cfg
lib:
soundfx\ — папкой
libaudio-resampler.so
libaudiocompensationfilter.so
libaudiocomponentengine.so
libaudiocustparam.so
libaudiodcrflt.so
libaudioeffect_jni.so
libaudiomtkdcremoval.so
libaudioresampler.so
libaudiosetting.so
libaudiospdif.so
libaudioutils.so
libMtkOmxVdecEx.so
libMtkOmxVenc.so
libMtkOmxVorbisEnc.so
libsoundpool.so
libsoundtrigger.so
libsoundtriggerservice.so
libvcodecdrv.so

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

Итак, прежде всего проверьте IMEI! И только после этого, если связи таки нет, приступаем к действиям описанным ниже:

Как известно, основными файлами отвечающие за связь явлются файлы из каталога etc/firmware, но бывают случаи, что и после замены этой папки, связи нет. и чтобы исправить сие недоразумение делаем следующие действия:

Открываем папку system оф.прошивки и задаем поиск по всем папкам на присутствие в имени файлов словосочетания «ril». После окончания поиска, все что вам выдало, раскидываем по папкам донора с заменой файлов.

Так же, в папке bin заменяем следующие файлы:
gsm0710muxd
gsm0710muxdmd2

После пробуем. Так же в boot.img есть скрипты init.modem.rc и meta_init.modem.rc, можете сравнить их, и при необходимости заменить
После этого, все должно встать на свои места. Помните, бездумное закидывание, может добавить много увлекательных часов поиска, того самого файла который мешает грузиться системе. Не жадничайте, кидайте помаленьку!

Сообщение отредактировал Akella_MC — 21.07.18, 20:18

Источник

Портирование с android one

Начнем. Вы, наверное, слышали, что в некоторых устройствах используется какая-то диковинная A/B структура разделов . Она отличается от структуры в большинстве Android устройств.
На ней как-то странно и непривычно устанавливаются обновления, прямо при работающей системе (O_o). Внутри OTA образов другая, нечитабельная структура. Установка TWRP сопровождается какими-то, раннее не встречаемыми, сложностями, дополнительными манипуляциями и значительно отличается от всего, что «я» раньше видел. Все говорят о каких-то буквах «А», «Б», слотах, двух и системах и прочих, непонятных «мне», вещах. Что же, давайте попробуем во всем этом разобраться.

Начнем с общих вопросов:
Q: Ну и кто все это придумал? Проклятые производители простым гикам жизнь усложняют?
A: Новая структура «A/B разделов» разработана непосредственно Google-ом как часть глобальных изменений в архитектуре Android. Она успешно используется в смартфонах Google Pixel, Essential Phone и различных других устройствах. В дальнейшем все больше устройств от сторонних производителей будут ее использовать. Ничего плохого и страшного в этом нет, наоборот, открывается много новых возможностей.

Читайте также:  Обновление bq 6040l magic до 10 андроид

Q: Так что же из себя представляет A/B структура разделов?
A: Если говорить совсем просто — внутри вашего устройства расположены сразу две (а в зависимости от реализации и больше), независимые между собой, системы. Что-то на подобии MultiROM (если слышали о таком), только с гораздо более продуманной реализацией на более низком уровне. Если интересует конкретная информация с объяснением всех аспектов — прошу продолжить чтение.

Таблица разделов на примере Google Pixel:
Дабы наглядно отобразить, изложенную выше, теорию и увидеть отличия по сравнению с другими устройствами — познакомимся с таблицей разделов Google Pixel.
Если вы вообще не знакомы со структурой разделов в Linux-подобных системах, и Android в частности, — советую поискать информацию об этом в Google, благо ее полно.

Нас интересуют конкретные разделы, существующие в двух копиях для наглядности и демонстрации.
Итак (раскрываем код полностью):

/dev/block/bootdevice/by-name/aboot_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/apdp_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/bootlocker_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/cmnlib32_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/cmnlib64_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/devcfg_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/hosd_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/hyp_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/keymaster_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/msadp_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/pmic_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/rpm_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/tz_a # Разделы первого загрузчика (Слот «a»)
/dev/block/bootdevice/by-name/xbl_a # Разделы первого загрузчика (Слот «a»)

/dev/block/bootdevice/by-name/aboot_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/apdp_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/bootlocker_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/cmnlib32_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/cmnlib64_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/devcfg_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/hosd_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/hyp_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/keymaster_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/msadp_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/pmic_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/rpm_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/tz_b # Разделы второго загрузчика (Слот «b»)
/dev/block/bootdevice/by-name/xbl_b # Разделы второго загрузчика (Слот «b»)

/dev/block/bootdevice/by-name/modem_a # Раздел первого модема/радиомодуля (Слот «a»)
/dev/block/bootdevice/by-name/modem_b # Раздел второго модема/радиомодуля (Слот «b»)

/dev/block/bootdevice/by-name/boot_a # Раздел первого ядра (Слот «a»)
/dev/block/bootdevice/by-name/boot_b # Раздел второго ядра (Слот «b»)

/dev/block/bootdevice/by-name/vendor_a # Первый проприетарный раздел (Слот «a»)
/dev/block/bootdevice/by-name/vendor_b # Второй проприетарный раздел (Слот «b»)

/dev/block/bootdevice/by-name/system_a # Первый системный раздел (Слот «a»)
/dev/block/bootdevice/by-name/system_b # Второй системный раздел (Слот «b»)

Как видно из выдержки выше, — имеются два, независимых между собой, слота, а именно «группы разделов», которые содержат в себе основные, обновляемые компоненты прошивки.

Два представленных слота состоят из:
Bootloader (загрузчик) — 28 разделов (14 на каждый слот).
Radio/Modem (радиомодуль) — 2 раздела (по одному на слот).
Boot (ядро) — 2 раздела (по одному на слот).
Vendor (драйверы) — 2 раздела (по одному на слот).
System (система) — 2 раздела (по одному на слот).

Остальные разделы, не указанные в таблице, представлены в одном экземпляре за ненадобностью их деления.
Обратите внимание раздел пользовательского хранилища (userdata) всегда один! Именно поэтому вы не можете (без очистки хранилища) одновременно использовать две абсолютно разных прошивки, будет конфликт. Возможно одновременное использование одинаковых по типу прошивок (а в некоторых случаях и это невозможно без сброса данных).

Читайте также:  Show map in android

Принципиальные отличия по сравнению с другими устройствами:
С дублированием разделов и, структурой в целом, разобрались. Однако, вы могли заметить (если просматривали полную таблицу разделов) отсутствие, привычных в любом устройстве, разделов «/recovery» и «/cache». Да, их действительно нет. Но могут и встречаться в отклонениях от нормы.

Q: Стоп. Но если раздела для Recovery нет, а сам Recovery есть (Он ведь есть, правда?), где же он находится?
A: Система восстановления (Recovery) включена в состав образа ядра (boot). А потому, наличие, отсутствие и тип установленного recovery напрямую зависят от ядра системы. Переключение в него (Recovery), как и раньше, осуществляется специальным флагом в «/misc» разделе.
Именно в этом и состоит загвоздка установки TWRP — его как-то нужно «засунуть» в ядро. Потому TWRP сначала временно загружают (устанавливать то его некуда), а затем уже из TWRP, специальным скриптом, на лету распаковывается ядро и вшивается в него TWRP. Такая же схема «перепаковки ядра на лету» применяется при получении «systemless» рут-прав через SuperSU и Magisk.

Q: Хорошо, а что же тогда случилось с «/cache» разделом?
A: В привычных устройствах он необходим лишь для хранения OTA обновлений и системных логов Recovery, в данном же случае, ввиду применения новой схемы этих самых обновлений (см. ниже), раздел стал попросту «не нужОн». Вот от него и избавились.

Ручное переключение слотов:
Естественно, помимо самих слотов, должен быть способ ручного взаимодействия с ними. И он есть. Для ручного переключения текущего активного слота необходимо воспользоваться утилитой fastboot. Команды:

Так же, переключится в другой слот можно в соответствующем пункте TWRP (Reboot -> Slot A / Slot B).

Итоги и положения:
1. Между слотами как система, так и сам пользователь могут переключаться.
2. Изначально (с завода) слоты полностью идентичны между собой. Различия появляются после применения любого OTA обновления системы.
3. Слоты изолированы между собой. Состояние и целостность одного слота никак не влияет на другой. За исключением применения OTA обновлений (см. ниже).

«Seamless» система обновлений:
Итак, с разделами и слотами разобрались. Но что же там с обновлениями, наверняка их тоже коснулись изменения, ввиду описанного выше?
Да, OTA обновления на устройствах с A/B структурой кардинально отличаются от того, что мы можем видеть на других устройствах.

Итоги и положения:
1. Все OTA обновления устанавливаются в неактивный, противоположный слот. То бишь — обновляется лишь один слот.
2. Все OTA обновления устанавливаются в фоновом режиме при рабочей системе, без перезагрузки устройства.
3. Все OTA обновления устанавливаются в два этапа «Шаги»: «Шаг 1» — Загрузка обновления. «Шаг 2» — Фоновое применение обновления в неактивный, противоположный слот.
4. После установки OTA обновления, при перезагрузке устройства, оно автоматически загрузится в обновленный слот (ранее неактивный).

Android 8.0+ — трансляция обновлений:
Начиная с версии Android 8.0 возможна (но не обязательна) частичная реализация трансляции обновлений с одновременным их применением (прямая запись).
Это значит, что обновления не нуждаются в предварительной их загрузке, а применяются «на лету».

Сообщение отредактировал Displax — 08.06.20, 01:27

Источник

Оцените статью