Так получилось, что я опять на больничном ... решил все-таки заняться зубами на старости лет ;) А т.к. процесс этот долгий и мучительный, то помимо всего прочего я решил взять в разработку еще один проект. Предыстория очень простая, есть один такой интересный аппарат с названием Highscreen Power Five Max. Не знаю почему, но до этого времени я как-то незаслуженно обходил стороной продукцию этого производителя, не то чтобы намеренно, но как-то ни один из их аппаратов не попадался мне в руки. Поэтому когда ко мне в ЛС постучался некто и спросил "А не поможешь собрать нам Android 7.1.1 для Power Five Max?" - я вначале хотел отказать (времени совсем не было, а как известно это самый ценный ресурс, который иногда дороже всего остального, согласитесь, ведь в сутках всего 24 часа и при всем желании "докупить" время нельзя), но ради интереса спросил "А что это?" ... Когда мне показали характеристики устройства я слегка удивился ... если вкратце, то это девайс на Mediatek MT6755 с 4 Gb RAM, 64 Gb внутренней памяти (!), основной камерой в 13 MPix (Sony IMX258), Full HD Super AMOLED дисплеем и различными "плюшками" вроде датчика отпечатка пальцев и инфракрасным портом (Remote IR) для управления бытовой техникой. Впечатляет, не правда ли?
Более подробно с характеристиками аппарата вы можете познакомиться на официальном сайте производителя - Highscreen Power Five Max. Возможно чуть позже я сведу их в отдельную таблицу здесь, со своими комментариями. Но вернемся к нашей истории ... После того как я немного познакомился с этим аппаратом, я подумал что все же будет интересно собрать под него Nougat, плюс покрутить его в руках, т.к. не каждый день в руки попадают действительно интересные девайсы. Человек который изначально обратился ко мне с этим вопросом сказал, что он и еще группа заинтересованных товарищей купят мне этот аппарат, чтобы я мог начать работать над прошивкой (кстати, стоит это чудо техники на данный момент ~20990 руб., что выглядит вполне оправданной ценой за такой набор характеристик) ... но единственное условие, которое они ставят - это чтобы в получившейся прошивке работал IR порт и датчик отпечатка. Вспоминая историю с Doogee и все сложности с которыми мне пришлось столкнуться, я нехотя согласился, мысленно уже представляя все возможные проблемы с Goodix'овским датчиком fingerprint'а. Однако интерес пересилил ... и через некоторое время аппарат был у меня.
Тут надо сказать что к тому моменту уже успела выйти одна кастомная прошивка для него - Lineage 13.0, но она была на Android 6.0, плюс многие устройства в ней не работали. К тому же, как я понял из различных мобильных форумов, пользователи сумели собрать кастомный recovery для этого аппарата (TWRP), он он не поддерживал шифрование. Т.е. не расшифровывал раздел userdata ... Т.к. заставить работать встроенное шифрование пользователям было не под силу, они решили эту проблему проще, заменив флаг forceencrypt в boot'е на encryptable и отформатировав полностью раздел data, таким образом отключив шифрование вообще. Т.е. до этого момента перед использованием TWRP или установкой кастомной прошивки userdata обязательно было форматировать.
До этого момента - потому что меня такой вариант категорически не устраивал, ибо во-первых нельзя лишать телефон функции шифрования данных, а во-вторых TWRP, который не умеет работать с зашифрованным разделом, лично я бы использовать не стал. Поэтому первое что я сделал (на то чтобы разобраться как работает mobicore'овское шифрование ушли где-то сутки) это собрал TWPR с поддержкой шифрования:
На следующих фото отчетливо видно, как раздел userdata у нас расшифровывается и создается новое блочное устройство /dev/block/dm-0. Начало положено ... Забегая вперед скажу, что разработка дерева для Lineage 14.1 (Android 7.1.1) заняла у меня примерно неделю. С результатом можно ознакомиться здесь - android_device_HighScreen_PowerFiveMax. В коммитах видно, насколько сложной и поэтапной была работа над ним, а в NOTES.md перечислены основные проблемы и варианты их решения. Что-то вроде заметок для себя, но, как показывает практика, их ведение полезно всем. Т.к. аналогичные проблемы могут встретиться и у других пользователей, которые имеют аналогичное "железо".
Первая сложность с которой пришлось столкнуться - это начисто неработающий звук. audio.primary.mt6755.so загружался, но тут же падал, при попытке вызова функции _ZN7android22AudioMTKGainController17SetHeadPhoneLGainEi (android::AudioMTKGainController::SetHeadPhoneLGain(int)) и некоторых других. Изначально я пошел по неверному пути и попытался просто сделать "заглушки" для них, в либе которая загружалась через LD_PRELOAD. Звук-то конечно появился, но начисто пропал микрофон, т.к. Android не мог управлять "уровнями громкости" в нем. Тогда я попробовал использовать audio.primary от MT6735 платформы. В этом случае все заработало, но начисто пропала связь, т.е. SIM не определялась. Решение оказалось простым, а проблема была в моем незнании специфики MT6755, оказывается помимо прочего на этой платформе существует еще и папка etc/audio_param, а также некоторые другие конфигурационные файлы, отвечающие за звук, уровни громкости и т.п. Я по незнанию просто не включил их в свое дерево, в результате чего потратил несколько дней на то, чтобы разобраться в сути проблемы. Впрочем, добавив в дерево все необходимое - звук успешно поднялся.
Следующей проблемой была проблема с crash'ем Zygote ... изначально я добавил в permission'ы android.hardware.consumerir.xml ... так вот этого делать было нельзя, пока все остальное что касается работы IR не было добавлено в результирующую прошивку. На это также ушло достаточно много времени. Единственный урок который я извлек для себя - не добавлять в /etc/permissions вообще ничего лишнего до тех пор пока не будут задействованы все необходимые BLOB'ы, иначе прошивка может просто не запуститься (а в данном случае правда удалось связать крах Zygote с отсутствием IR HW модуля, но в остальных случаях все может быть не так тривиально). IR кстати после этого завелся относительно легко, по крайней мере в Peel Remote он отлично работал.
Самая душещипательная история коснулась датчика сканера отпечатков пальцев от Goodix, с подробностями можно ознакомиться в NOTES.md в дереве в разделе Fingerprint. После нескольких бессонных ночей, патчей sepolicy и PackageManager'а он заработал. Но трудов в это было вложено порядочно. В итоге получилась вполне рабочая прошивка:
Однако, на текущий момент, увы, в ней обнаружилась проблема с камерой, которая после нескольких (десятков) снимков в режиме фото просто "зависает". Возможно проблема связана с ошибкой внутренней памяти самого аппарата, т.е. возможно что проблема в данном случае не софтовая, а железная. Поэтому пока данный баг не будет устранен или не будет установлена его причина - выкладывать релиз я не буду. Работы продолжаются, ну а желающие могут пока поддержать проект ...
Обновлено 09.02.2017 22:34 MSK
Версия LineageOS 14.1 на базе Android 7.1.1 пока находится в стадии доработки, желающие могут получить её по запросу в комментариях. Также перед установкой прошивки настоятельно рекомендуется ознакомиться с порядком установки, приведенным по ссылке.
Обновлено 10.03.2017 10:49 MSK
FAQ
Q. Я сделал сброс настроек из меню Настройки -> Восстановление и сброс после чего аппарат грузится только в recovery? Что делать?
A. Все дело в том, что Lineage (любая версия) несовместимы с этим TWRP, поэтому сброс через меню Настройки -> Восстановление и сброс делать не рекомендуется, достаточно просто сделать Wipe Data / Factory Reset в Recovery. Если же вы по каким-то причинам сделали этот сброс и телефон у вас грузится только в Recovery, то поправить это достаточно просто:
1. Залить стоковую прошивку через SP Flash Tool (менее предпочтительный вариант)
2. Вручную очистить раздел para / misc с помощью SP Flash Tool. Как это сделать показано на следующей картинке:
Более подробно с характеристиками аппарата вы можете познакомиться на официальном сайте производителя - Highscreen Power Five Max. Возможно чуть позже я сведу их в отдельную таблицу здесь, со своими комментариями. Но вернемся к нашей истории ... После того как я немного познакомился с этим аппаратом, я подумал что все же будет интересно собрать под него Nougat, плюс покрутить его в руках, т.к. не каждый день в руки попадают действительно интересные девайсы. Человек который изначально обратился ко мне с этим вопросом сказал, что он и еще группа заинтересованных товарищей купят мне этот аппарат, чтобы я мог начать работать над прошивкой (кстати, стоит это чудо техники на данный момент ~20990 руб., что выглядит вполне оправданной ценой за такой набор характеристик) ... но единственное условие, которое они ставят - это чтобы в получившейся прошивке работал IR порт и датчик отпечатка. Вспоминая историю с Doogee и все сложности с которыми мне пришлось столкнуться, я нехотя согласился, мысленно уже представляя все возможные проблемы с Goodix'овским датчиком fingerprint'а. Однако интерес пересилил ... и через некоторое время аппарат был у меня.
Тут надо сказать что к тому моменту уже успела выйти одна кастомная прошивка для него - Lineage 13.0, но она была на Android 6.0, плюс многие устройства в ней не работали. К тому же, как я понял из различных мобильных форумов, пользователи сумели собрать кастомный recovery для этого аппарата (TWRP), он он не поддерживал шифрование. Т.е. не расшифровывал раздел userdata ... Т.к. заставить работать встроенное шифрование пользователям было не под силу, они решили эту проблему проще, заменив флаг forceencrypt в boot'е на encryptable и отформатировав полностью раздел data, таким образом отключив шифрование вообще. Т.е. до этого момента перед использованием TWRP или установкой кастомной прошивки userdata обязательно было форматировать.
До этого момента - потому что меня такой вариант категорически не устраивал, ибо во-первых нельзя лишать телефон функции шифрования данных, а во-вторых TWRP, который не умеет работать с зашифрованным разделом, лично я бы использовать не стал. Поэтому первое что я сделал (на то чтобы разобраться как работает mobicore'овское шифрование ушли где-то сутки) это собрал TWPR с поддержкой шифрования:
На следующих фото отчетливо видно, как раздел userdata у нас расшифровывается и создается новое блочное устройство /dev/block/dm-0. Начало положено ... Забегая вперед скажу, что разработка дерева для Lineage 14.1 (Android 7.1.1) заняла у меня примерно неделю. С результатом можно ознакомиться здесь - android_device_HighScreen_PowerFiveMax. В коммитах видно, насколько сложной и поэтапной была работа над ним, а в NOTES.md перечислены основные проблемы и варианты их решения. Что-то вроде заметок для себя, но, как показывает практика, их ведение полезно всем. Т.к. аналогичные проблемы могут встретиться и у других пользователей, которые имеют аналогичное "железо".
Первая сложность с которой пришлось столкнуться - это начисто неработающий звук. audio.primary.mt6755.so загружался, но тут же падал, при попытке вызова функции _ZN7android22AudioMTKGainController17SetHeadPhoneLGainEi (android::AudioMTKGainController::SetHeadPhoneLGain(int)) и некоторых других. Изначально я пошел по неверному пути и попытался просто сделать "заглушки" для них, в либе которая загружалась через LD_PRELOAD. Звук-то конечно появился, но начисто пропал микрофон, т.к. Android не мог управлять "уровнями громкости" в нем. Тогда я попробовал использовать audio.primary от MT6735 платформы. В этом случае все заработало, но начисто пропала связь, т.е. SIM не определялась. Решение оказалось простым, а проблема была в моем незнании специфики MT6755, оказывается помимо прочего на этой платформе существует еще и папка etc/audio_param, а также некоторые другие конфигурационные файлы, отвечающие за звук, уровни громкости и т.п. Я по незнанию просто не включил их в свое дерево, в результате чего потратил несколько дней на то, чтобы разобраться в сути проблемы. Впрочем, добавив в дерево все необходимое - звук успешно поднялся.
Следующей проблемой была проблема с crash'ем Zygote ... изначально я добавил в permission'ы android.hardware.consumerir.xml ... так вот этого делать было нельзя, пока все остальное что касается работы IR не было добавлено в результирующую прошивку. На это также ушло достаточно много времени. Единственный урок который я извлек для себя - не добавлять в /etc/permissions вообще ничего лишнего до тех пор пока не будут задействованы все необходимые BLOB'ы, иначе прошивка может просто не запуститься (а в данном случае правда удалось связать крах Zygote с отсутствием IR HW модуля, но в остальных случаях все может быть не так тривиально). IR кстати после этого завелся относительно легко, по крайней мере в Peel Remote он отлично работал.
Самая душещипательная история коснулась датчика сканера отпечатков пальцев от Goodix, с подробностями можно ознакомиться в NOTES.md в дереве в разделе Fingerprint. После нескольких бессонных ночей, патчей sepolicy и PackageManager'а он заработал. Но трудов в это было вложено порядочно. В итоге получилась вполне рабочая прошивка:
Однако, на текущий момент, увы, в ней обнаружилась проблема с камерой, которая после нескольких (десятков) снимков в режиме фото просто "зависает". Возможно проблема связана с ошибкой внутренней памяти самого аппарата, т.е. возможно что проблема в данном случае не софтовая, а железная. Поэтому пока данный баг не будет устранен или не будет установлена его причина - выкладывать релиз я не буду. Работы продолжаются, ну а желающие могут пока поддержать проект ...
Обновлено 09.02.2017 22:34 MSK
- TWRP-3.0.2.0-decker - TWRP recovery собранный из исходников с полной поддержкой принудительного шифрования раздела userdata. Т.е. если вы сразу после стоковой прошивки установите данный TWRP, вам не придется делать Format Data. Полная поддержка шифрования означает то, что раздел userdata у вас будет расшифровываться в любом случае, даже если вы установили PIN код и поставили его запрос при загрузке. В этом случае TWRP запросит у вас пароль для расшифровки раздела, введя который раздел userdata успешно примонтируется. В архиве сам TWRP и Scatter для прошивки через SP Flash Tool.
Важно: если после прошивки TWRP телефон не загружается в ОС, "зависая" на заставке Android - установите через TWRP с помощью опции Install ZIP последний архив с SuperSU с официального сайта ChainFire. Последнюю версию zip'а с SuperSU всегда можно взять здесь - Stable, Beta, Latest. - lineage-13.0-20170309-UNOFFICIAL-PowerFiveMax.zip - Lineage OS 13.0. Перед установкой этой прошивки сделать wipe'ы всех разделов. При инициализации мастера первоначальной настройки симка определяется спустя некоторое время, поэтому рекомендуется дойти до шага подключения к WiFi сети и подождать 1-2 минуты. Далее, на экране "Настройка сканера отпечатка" нажимаем "Настроить экран блокировки" и добавляем хотя бы 1 отпечаток (!) ... Это наиболее стабильная версия из всех представленных прошивок. Камера, запись видео, GPS, сканер отпечатка, ИК порт и прочее на ней работают, по-крайней мере на имеющемся у меня девайсе.
Видеоинструкция как добавить отпечатки пальцев на Lineage 13.0. Если не идет просмотр непосредственно на Яндекс.Диске, скачайте файл к себе на ПК.
Версия LineageOS 14.1 на базе Android 7.1.1 пока находится в стадии доработки, желающие могут получить её по запросу в комментариях. Также перед установкой прошивки настоятельно рекомендуется ознакомиться с порядком установки, приведенным по ссылке.
Обновлено 10.03.2017 10:49 MSK
FAQ
Q. Я сделал сброс настроек из меню Настройки -> Восстановление и сброс после чего аппарат грузится только в recovery? Что делать?
A. Все дело в том, что Lineage (любая версия) несовместимы с этим TWRP, поэтому сброс через меню Настройки -> Восстановление и сброс делать не рекомендуется, достаточно просто сделать Wipe Data / Factory Reset в Recovery. Если же вы по каким-то причинам сделали этот сброс и телефон у вас грузится только в Recovery, то поправить это достаточно просто:
1. Залить стоковую прошивку через SP Flash Tool (менее предпочтительный вариант)
2. Вручную очистить раздел para / misc с помощью SP Flash Tool. Как это сделать показано на следующей картинке:
Внимание! Значения Begin Address и Format Lenght нужно брать из вашего scatter'а, от стоковой прошивки. Т.е. открываем его и смотрим раздел para:
В данном случае:
- partition_index: SYS3
partition_name: para
file_name: NONE
is_download: false
type: NORMAL_ROM
linear_start_addr: 0x1008000
physical_start_addr: 0x1008000
partition_size: 0x80000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: INVISIBLE
is_upgradable: false
empty_boot_needed: false
reserve: 0x00
В данном случае:
- Begin Address = 0x1008000
- Format Length = 0x80000
После этой несложной процедуры телефон вновь будет загружаться в систему. Ну и еще раз, если вам необходимо вернуться к заводским настройкам, делаем Wipe Data / Factory Reset в TWRP.
Обновлено 12.03.2017 02:41 MSK
Выяснилось что существует несколько различных аппаратных ревизий устройства отличающихся типом сканера (наиболее распространена ревизия со сканером второго типа), поэтому если в прошивке от 09.03.2017, выложенной выше, сканер отпечатка по каким-либо причинам у вас не заработал, то для вашей ревизии подойдет следующая прошивка, в которой сканер будет работоспособен - lineage-13.0-20170311-UNOFFICIAL-PowerFiveMax.zip .
Обновлено 12.03.2017 02:41 MSK
Выяснилось что существует несколько различных аппаратных ревизий устройства отличающихся типом сканера (наиболее распространена ревизия со сканером второго типа), поэтому если в прошивке от 09.03.2017, выложенной выше, сканер отпечатка по каким-либо причинам у вас не заработал, то для вашей ревизии подойдет следующая прошивка, в которой сканер будет работоспособен - lineage-13.0-20170311-UNOFFICIAL-PowerFiveMax.zip .
Внимание! Материалы приведенные в данной статье размещены в ознакомительных целях. Все действия описанные в данной статье вы осуществляете на свой страх и риск! Автор(ы) статьи не несут ответственности за вышедшее из строя оборудование, в результате ошибочных действий или неверного понимания вами смысла изложенного в ней материала, а также в силу любых прямых и косвенных причин, которые потенциально могут привести к неработоспособности вашего устройства или любым другим проблемам с ним. Если вы не уверены в своих силах, сомневаетесь и т.п. - не выполняйте ничего из вышеописанного. Используя материалы из этой статьи вы соглашаетесь с тем, что ответственность за ваши действия несете вы и только вы.
comment 0 التعليقات:
more_vertsentiment_satisfied Emoticon