среда, 22 марта 2017 г.

Всё обо всём. Выпуск #05. Немного о ядрах ...

В последнюю неделю в блоге практически не было новых постов ... отчасти это связано с небольшими проблемами со здоровьем, отчасти с тем, что плюсом к этому была очень большая нагрузка по работе. Однако, даже в этой ситуации с катастрофической нехваткой времени, все же удалось немного заняться тем что действительно интересно мне сейчас. После последнего поста про активацию тачпада в recovery и patch'е ядра Mediatek я заинтересовался вопросами сборки ядра из исходников. Про это и будет сегодняшний выпуск ... т.к. это "Всё обо всём", то здесь не будет конкретных мануалов или инструкций, я просто расскажу о том каких результатов удалось достичь мне в рамках моих "домашних исследований" ;) В качестве подопытного я взял небезызвестный "музыкальный смартфон" от компании Highscreen - Boost 3 SE PRO и решил попробовать собрать для него альтернативное ядро 3.18.35+ ...

Надо сказать что изначально этот аппарат поставляется с Android 6.0 и стоковым ядром 3.18.19, традиционным для Marshmallow. Поэтому цели которые я ставил перед собой изначально выглядели следующим образом - попробовать собрать рабочее ядро 3.18.35+ и изучить возможность сборки ALPS 7.0 (Android Nougat) под этот аппарат. Те из вас, кто ранее пользовался различными кастомными прошивками (не обязательно для этого аппарата) наверняка заметили, что подавляющее большинство из них, например, Lineage 14.1 (Android 7.1.1) и т.п. обычно собирают на базе "стокового ядра". В основном это обусловлено тем, что производитель не предоставляет исходники ядра для своих аппаратов ... т.е. исходников ядра у авторов прошивки просто нет ... Как известно, ядро 3.18.19 для работы Android Nougat "не подходит", поэтому в данной ситуации есть два пути - либо собрать обновленное ядро из исходников, либо "адаптировать" прошивку для работы на старом ядре, что в большинстве случаев мы и видим.

Мне же в данном случае был интересен другой путь, а именно, сборка Android Nougat из Mediatek'овских исходников и как, следствие, процесс сборки обновленного ядра. Что из этого получилось вы можете видеть на следующих фото:


Тех кто увидев данные фото спешит воскликнуть "вау, наконец-то кто-то собрал полноценный Nougat для нашего аппарата" - поспешу огорчить. Он далеко неполноценный. Т.е. это просто "учебный проект" на котором я учился собирать ядро, разбираться с работой драйверов lcm, imgsensor'а, touchpad'а, узнавал что такое dts (dtb), codegen.dws и т.п. вещи.

За основу были взяты исходники ALPS'а 7.0, найденные на просторах "китайского интернета". Иногда поиск по pan.baidu.com бывает достаточно занимательным ... так или иначе мне удалось найти один более или менее рабочий проект, который можно было использовать для моих задач.


В результате примерно двух дней работы мне удалось собрать более-менее живое ядро 3.18.35+ с которым собранный Nougat запускался ... в ядро были перенесены драйвера дисплея, тача, акселерометра, сенсоров камеры, исправлены все ошибки сборки ... однако, по факту оказалось что до создания полноценной прошивки на базе этого ядра еще "ой как далеко" и по-сути это труд не для одного человека. В получившемся варианте не работает камера (то что необходимые драйверы сенсоров камеры есть в ядре - далеко недостаточно для того чтобы камера работала в Android) ... кстати, те кому интересно могут почитать найденный мной на просторах интернет Camera Porting Guide от Archermind. Так вот, помимо наличия необходимых драйверов в Kernel space, Android в User space'е тоже должен знать о том какие сенсоры камеры используются в аппарате (у меня он пока этого не знает). Также, т.к. аппарат использует ЦАП ESS9018K2M + усилитель ADA4897-2 - звук в Android также отсутствует. Т.к. чтобы он заработал необходимо наличие драйверов ESS9018 в ядре и соответствующих модификаций "звуковой части" самого Android - audioflinger'а, audiopolicymanager'а и т.п.

Естественно все это требует более тщательного изучения, исходников от производителя и, самое главное, времени, т.е. тех самых "человекочасов", которых в рамках "хобби" просто нет. Поэтому говорить в данном случае о сборке полноценного Android 7.0 на Mediatek'овских исходниках не приходится. Однако, благодаря этому маленькому эксперименту мне удалось получить, как минимум, начальные знания о kernel. Разобраться в том из чего состоит ядро, каким образом осуществляется интеграция новых устройств в него и ряде других абсолютно понятных и прозрачных для тех кто имеет с этим дело каждый день моментов. Примечание "для тех кто имеет с этим дело каждый день" в данном случае было сделано не зря, т.к. на тот момент когда я только начинал этот эксперимент никаких знаний о ядре у меня не было совсем. Т.е. ядро для меня представлялось неким черным ящиком в виде Image.gz-dtb в boot.img ... по-сравнению с тем уровнем за два дня работы я узнал достаточно много, но все равно крайне недостаточно ;) Как там было у Сократа: "Я знаю, что ничего не знаю" или в другой интерпретации "Чем больше я узнаю, тем больше понимаю, что ничего не знаю" ... 

Примерно такие же ощущения испытал и я ... ну а на сегодня, пока все ... если в этом проекте что-то сдвинется с мертвой точки - я обязательно буду держать вас в курсе. Тех же кого просто интересуют альтернативные прошивки на данный аппарат, могу сказать что я уже выложил LineageOS 13.0 (Android 6.0) для него на одном из популярных мобильных форумов. При желании можно найти и попробовать ... Всем добра и stay tuned ... ;)

Комментариев нет :

Отправить комментарий