Теперь стоит рассказать, как я восстанавливал работоспособность фронтальной камеры в Xiaomi Redmi Note 4 на кастоме, у которого есть исходный код для конкретной платформы.
Пока на форумах годами пытались бороться с нерабочими камерами и сканером опечатка пальцев на своих аппаратах, я уж тогда решил, что надо с этими недостатками бороться, но там были и другие причины.
Xiaomi Redmi Note 4 nikel полноценно работает только на шестом андроиде, который уже 5 лет считается морально устаревшим. И, к сожалению, никто не попытался полностью портировать сторонние прошивки и опубликовать свои же исходники. И лишь LineageOS работал не так гладко, как хотелось бы.
Что уж говорить, если AOSP, собранный пользователем с ником Cofface, работает намного лучше, но при этом старые болячки, присущие андроидам, лечить не собирались.
В итоге у меня пошла такая мысль - раз уж портирование этого редмика на новые андроиды удаётся весьма паршиво, то почему бы не улучшать старое и проверенное годами?
На просторах GitHub до сих пор можно найти полноценный исходный код версии Android 6.0, разработанный специально для платформы MT6797 в нескольких ревизиях, а там же входят и несвободные компоненты, включая встроенный софт и HAL-модули от MediaTek.
Как уже было сказано ранее, они были закрыты под NDA-соглашениями, и есть вероятность, что производитель опубликовал их легально, т. е. с разрешения MediaTek и его представителей.
Другая проблема в том, что кастомное ядро теоретически можно собрать, но оно вряд ли запустится даже со стоковой таблицой разделов, поэтому я этот кастом оставил только для сборки и дальнейшего портирования, но при этом работать будет только стоковое ядро Linux 3.18.22, исходный код которого так до сих пор и не выложили.
Молодцы, Xiaomi! Только вот не стыдятся нарушать лицензию GPLv2, где в случае с применением ядра Linux в публичных релизах должен быть опубликован его исходный код и никак иначе.
Для анализа текущей ситуации я решил дизассемблеровать стоковое ядро через IDA и оказалось, что оно использует передачу OTP-пакетов к сенсорам, когда как кастомное ядро использует несколько упрощенный метод.
Далее - бинарные файлы в /system/lib(64)/hw
Казалось бы, замена блобов с кастома на сток должна решать многие проблемы, но не тут-то было - камеры просто перестали определяться в системе. Даже инженерное меню и DeviceHWInfo ничем помочь не могли, поэтому смело переходим к следующем этапу.
Файл ProjectConfig…mk в device-tree для Redmi Note 4 и конфигурация ядра
Это тот самый список доступных драйверов для сенсоров, камер и объективов и других параметров, которые так или иначе должны быть привязаны к конкретному аппарату и его техническим особенностям и должны быть собраны с учётом всех этих аспектов.
Там выяснилось, что тот ProjectConfig…mk, который лежал в стоковой прошивке MIUI 10.2, не совсем подходил к кастомной прошивке, поэтому по всей вероятности не работала фронталка.
Конечно, в этих конфигах можно прописать драйвер s5k5e8yx_mipi_raw при наличии исходников, но стоит ли того, вопрос открытый. Драйвер s5k5e8yx_mipi_raw может содержать несколько ревизий, из-за чего приходится долго и упорно ломать голову, где и что заведётся.
В итоге, в самом начале 2025 года, мне наконец-то удалось на кастоме завести фронтальную камеру. Решалось это драйвером s5k5e2ya_mipi_raw, что забавно: вроде бы фронталка Samsung S5K5E8, а она работает с драйвером S5K5E2.
Правда, побороть проблемы с автофокусом на основной камере пока не удаётся, даже если я прописал сразу несколько драйверов на объективы.
Кто же знает, чем можно ещё вернуть электронного пенсионера к жизни, помимо проблем со сканером опечатка пальцев и акселерометра…