Что такое кастомное ядро на андроид
Перейти к содержимому

Что такое кастомное ядро на андроид

  • автор:

Ядро в телефоне — что это такое, за что отвечает (не путать с ядрами процессора!)

Android kernel

Если вы являетесь владельцем мобильного девайса (смартфона, планшета), то будет полезно узнать — ядро в телефоне за что отвечает, почему является важнейшей частью Android, iOS.

Kernel — что это такое?

Просмотр версии ядра Android

Именно так на английском языке звучит понятие "ядро", о котором пойдёт речь в обзоре. Важно понимать, что данная тема не имеет отношения к процессору. Подразумевается иная, более "глобальная" тематика. "Кернел" — это главное связующее звено между оборудованием и программным обеспечением. Ведь на телефоне могут быть установлены разные приложения, работа которых требует доступа к тем или иным ресурсам системы — обработчику процессов, ОЗУ, внутреннему накопителю, камере, кнопкам управления громкостью и т.д. Ядро позволяет скоординировать все процедуры, оптимизировать их, перенаправлять запросы между аппаратными и программными компонентами. Вот пример: когда экран выключен, а Вы нажимаете клавишу питания, то дисплей подсвечивается. Если же использовать длительное нажатие — отображается меню с выбором вариантов — перезагрузка, сделать скриншот и прочее (зависит от версии ПО). Чтобы просмотреть информацию о ядре, достаточно открыть параметры, отыскать строку "Об устройстве (телефоне, планшете, системе)". Далее находим нужный элемент. Иногда он скрыт в подпунктах:

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

Ядро в смартфоне Android

Составные части ядра смартфона

Мы рассмотрим именно Андроид, но это не значит, что для других ОС данное понятие не актуально. Зачем оно нужно? Операционная система сама по себе является комплексом программ, благодаря которому возможна скоординированная работа телефона. Когда мы запускаем приложение "Камера", то на экране отображается интерфейс с перечнем элементов (фото, видео, настройки), оптика переводится в полную боевую готовность. Если проводим время за игрой, Android "раздает указания" оперативной памяти, ЦПУ, графическому процессору, чтобы они выделили требуемое количество ресурсов для обеспечения достаточной производительности. То есть, как работает ядро? Оно управляет всем, что касается мобильного устройства. Это своего рода посредник, без которого сложно было бы представить слаженное функционирования Андроид, грамотную расстановку приоритетов. Если копнуть глубже, то мы имеем дело с набором драйверов (понятие должно быть знакомо пользователям Windows). Это файлы (утилиты), оптимизирующие управление оборудованием. Еще одна наглядная демонстрация. На рабочем столе много ярлыков. Вы нажимаете на один из них. При этом kernel задействует сенсор дисплея, вычисляются точные координаты точки, они сравниваются с текущей разметкой (пользовательской настройкой интерфейса), затем отправляется команда — "запустить требуемое приложение". Уверены, что суть ясна. Но остался еще один важный момент, который стоит рассмотреть.

  • Modern Setup Host — что это за процесс грузит диск?
  • Кешированные данные в телефоне — что это, можно ли удалять?
  • Функция Google Nearby в телефоне Android — что это, как включить?
  • ASUS ATK Package: что за программа и стоит ли её устанавливать
  • Альтиметр в смартфоне — что это за датчик

Кастомное ядро — для чего используется?

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

Именно поэтому, компании собирают "кастомные ядра" — индивидуально настроенные модификации под конкретные устройства, с учетом особенностей аппарата — камеры, размера экрана, емкости аккумулятора и т.д.

Неофициальные прошивки Android

Увы, не все бренды поступают таким образом. Чтобы не тратить время на создание оптимального варианта, они просто доверяют работу девайса стоковому (универсальному) ядру. Плюсы подобного решения очевидны — экономия бюджета. Но появляется минус для пользователей — некоторые возможности аппарата не задействованы по максимуму (частота процессора ограничена, Android не видит весь объем оперативной памяти, крутая камера снимает хуже обещанного).

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

Кроме того, есть энтузиасты, которые самостоятельно "разбирают" ядро, вносят корректировки, чтобы добавить полезные фишки (разгон процессора, управление питанием и т.п.), затем снова собирают всё в единое целое и предлагают скачивать, устанавливать вместе с кастомной прошивкой для конкретной модели девайса. Если решитесь на использование альтернативных решений, то помните:

  • всё делаете на свой страх и риск;
  • внимательно читайте отзывы, комментарии;
  • есть сомнения — задавайте вопросы;
  • изучайте материалы на разных сайтах (4PDA, XDA, Youtube);
  • обязательно копируйте ценную информацию перед проведением манипуляций.

Мы закончили рассмотрение темы "Ядро в телефоне — за что отвечает, как работает". Надеемся, что статья оказалась полезной.

Кастомные Android-прошивки и всё, что с ними связано

Покупаешь новый смартфон и ходишь радостный пока опять новый кастом не накатил. Он и работает шустро, и игрушки идут лучше: явно побыстрее стока. Но тут прилетело OTA, ядро новое вышло, да и Magisk обновился уже — пора ставить апдейты и получать “бутлупы”. Да, от общего числа пользователей Android смартфонов доля тех, кто сидит на кастомах крайне мала. Однако, всё же людям приходят в голову странные мысли по типу: “А не прошить бы мне свой Xiaomi, что б летал как ракета”. По такому случаю статья, в которой рассказывается про кастомные Android прошивки от А до Я.

Кастомные прошивки и их классификация

Что же из себя представляет кастомная Android-прошивка? Это система, к созданию которой причастны сторонние разработчики: то есть любая неофициальная прошивка. В большинстве случаев отличительными чертами подобных прошивок является иная оболочка, модифицированное ядро системы, широкая кастомизация и много разных плюшек, которых нет в официальных Android прошивках, созданных компанией-производителем. Чаще всего такие прошивки работают быстрее официальных, но реже они работают стабильнее. Существует огромное множество кастомов, которые делятся на виды, изучением которых мы сейчас и займёмся.

Вот основые вариации Android-прошивок:

  1. Официальная от производителя (модифицированная)
  2. Кастомная — собранная из исходников
  3. GSI-прошивка
  4. Портированная прошивка

А теперь про каждую поподробнее. Официальная прошивка от производителя установлена в смартфоне с завода: то есть вы покупаете телефон именно с ней. Её делал отдел компании-производителя, который отвечает за программное обеспечение своих устройств. Эти прошивки часто модифицируют умельцы путём распаковки образа прошивки, внося свои изменения. Также, любая уважающая себя компания предоставляет исходный код прошивки, которую они создали: те самые исходники. Далее по списку кастомная прошивка, собранная из исходников — та, которую собирали сторонние разработчики с нуля. Такая прошивка может включать в себя всевозмножные улучшения и кастомизации, которых не было в официальной, и их нельзя было добавить путём простой распаковки/запаковки образа. Следующая у нас GSI-прошивка — отличается от двух предыдущих тем, что при её установке не затрагивается раздел Vendor, так как GSI-образ это и есть образ системы. Работают эти GSI прошивки куда медленнее и менее стабильно, чем собранные из исходников. Ну и последняя — порт прошивки с другого девайса. Это прошивка, полностью перенесённая с иного устройства и изменённая для работы на конкретном смартфоне. По большей части это самые багованные прошивки, так как система не просто не родная, она ещё и содрана с другого устройства. Но их используют: к примеру те же любители фирменных оболочек различных устройств. Существует огромное колличество портированных прошивок со смартфонов OnePlus с их оболочкой OxygenOS, которая многим приходится по душе.

Мы будем рассматривать именно те кастомы, которые собираются из исходного кода. На это есть ряд причин, а именно: такие прошивки работают быстрее остальных, они стабильнее и представляют из себя полноценную замену стоковой, так как собирались с оптимизацией под конкретный девайс. Естественно, не без учёта качества сборки. На данный момент кастомы имеют широкое распространение среди многих моделей различных брендов. Также, само сообщество создателей кастомов постоянно растёт и развивается, поэтому найти стабильно работающую прошивку под свой смартфон не представляет особой трудности.

Существует классификация прошивок, показывающая, на основе какого исходного кода взята база для сборки:

  1. AOSP — Android Open Source Project. Представляет из себя абсолютно голую систему Android, на которую в последующем "навешивают" оболочки, по типу One UI, MIUI, OxygenOS и так далее. Пояснение: смартфонах Google Pixel не AOSP, в них установлена собственная оболочка на базе AOSP.
  2. CAF — Code Aurora Forum. Проект Linux Foundation, который содержит программный код для прошивок смартфонов на базе процессоров Qualcomm. Прошивки, которые базируются на CAF-тегах могут быть не самыми стабильными, но за счёт последних версий драйверов они имеют ряд приемуществ: лучшая производительность, более высокая скорость интернет соединения, хорошая автономность и улучшенное качество звучание.
  3. LineageOS — кастом, на котором базируются многие другие кастомы, вроде CRdroid, Resurrection Remix и им подобные. Изначально был CyanogenMod: именно он был на слуху, да и развивался постоянно. Позже переименовался в LineageOS. В какой-то момент в AOSP было внесено столько изменений разработчиками линейки, что её начали использовать как базу для других прошивок.

Зачем же нужны кастомные прошивки?

Простому пользователю — незачем. Если хочется поиздеваться над устройством, либо наоборот преобразить его с помощью новоиспечённого кастома на последней версии Android и перевернуть в нём всё, чтобы сделать так, как хочется — это ваше. Когда человек ставит кастом, он берёт ответственность за работоспособность девайса полностью на себя, и в случае, если вдруг что-то пойдёт не так, а вы не сможете починить свой смартфон, то, это уже будет ваше личное дело. Скорее всего ваш случай не попадёт под гарантийный, даже если сломалась аппаратная часть смартфона. Придётся как минимум заставлять СЦ проводить нормальную диагностику, чтобы исключить самую тупую причину поломки: кастом. Также, почти любую софтовую поломку во время прошивки можно устранить в домашних условиях, не прибегая к помощи работников сервисного центра. Так что если кто надумал шиться, знайте: кирпич это не так страшно. В любом случае в интернете есть огромное колличество гайдов "как и что в случае чего".

Рассматривая использование на повседневной основе кастомной прошивки, созданной хорошим сборщиком, можно ощутить высокую плавность и скорость работы пользовательского интерфеса в сравнении со стоковой прошивкой. Прирост производительности в играх и повышение автономности также обеспечены. Вполне возможно улучшение качества звучания, фото и видео съёмки смартфона. Если не из основного, то кастомы часто имеют последние патчи безопасности и обновления системы, которые повышают стабильность и скорость работы устройства. Также, в зависимости от прошивки появляются возможности кастомизации, которых не было в стоке.

Процесс установки прошивки и разделы накопителя

Итак, вот мы и подошли к самому главному: установка. Это универсальная инструкция для всех смартфонов, которая будет работать при установке большей части прошивок. Но, на некоторых устройствах могут быть свои особенности установки, которые нужно уточнять в источнике откуда берёте прошивку. Обращать внимание на нюансы действительно очень важно, так как если шить "как захотел", то в лучшем случае можно получить "бутлуп", а в худшем будет "кирпич". Все манипуляции должны производится на уже разблокированном загрузчике. Разблокировка осуществляется с помощью софта от производителя смартфона, либо командами Fastboot. За подробностями — в тему своего устройства.

При подготовке скачиваем всё, что необходимо для установки прошивки: нужное TWRP, последний Firmware (если имеется на ваш смартфон), сама прошивка, кастомное ядро (вдруг нужно), патчи и фиксы (при надобности), по желанию GAPPS (Google Apps), дешифратор (снятие шифрования Data) и Magisk (Root-права). После того, как всё скачалось, лучшим вариантом будет перекинуть все эти файлы на флешку, чтобы шиться с неё. Из всего выше перечисленного для установки прошивки нужно только TWRP и сама прошивка, но, чаще всего люди шьют и всё остальное, поэтому вот последовательность, которая включает в себя самую обычную установку прошивки.

TWRP — модифицированная версия Recovery (режим восстановления), в котором мы и будем производить все манипуляции. Для этого достаточно установить драйвера для своего устройства на компьютер и прошить образ нужного TWRP в раздел "Recovery" (если не грузиться, то и в Boot) через специальную утилиту в зависимости от платформы процессора смартфона: MediaTek или Qualcomm (SPFlashTool или Minimal ADB and Fastboot). Выбирайте TWRP на вкус и цвет, главное чтобы работало. Если TWRP уже установлен, сразу начинаем со второго пункта.

Основные разделы смартфона, которые видно в TWRP:

  1. Dalvik / ART Cache — кэш виртуальных машин Dalvik / ART.
  2. Cache — системный кэш.
  3. Data — раздел с данными системы и всех установленных в ней программ.
  4. System — сама система. Те же GSI-образы устанавливаются именно в этот раздел.
  5. Vendor — бинарники, конфиги, библиотеки. В общем всё, что запихнул производитель в смартфон, для нормальной его работы.
  6. Внутренняя память — она у вас на главной странице в проводнике. Созданные или скачанные вами файлы.
  7. Micro SDCard — точка монтирования карты памяти (флеш-память).
  8. USB OTG — точка монтирования флешки, либо харда, подключенных по OTG-кабелю.

Заходим в TWRP той комбинацией клавиш смартфона, которой заходят в режим Recovery и производим очистку смартфона, чтобы кастом шился на чистый накопитель. Для этого в TWRP ищём пункт связанный с очисткой и заходим в него. Там же мы наблюдаем разделы смартфона и галочки рядом с ними. Нам нужно поставить галки напротив разделов Dalvik / ART Cache, Cache, Data, System, Vendor (необязательно), Внутренняя память, но не ставить на Micro SDCard и USB OTG, которые указывают на SD-карту, либо OTG-накопитель, в зависимости от того, где у вас лежат файлы для прошивки. После мы просто проводим свайп для очистки разделов (вы потеряете все данные на смартфоне). Далее нам нужно отформатировать DATA-раздел. Делается это там же в меню очистки с введением подтверждения в виде слова "yes". После успешного форматирования DATA-раздела нам нужно сделать перезапуск в TWRP. Зачем? Это может быть необходимо, для правильного определения разделов самим TWRP во избежание ошибок при установке прошивки. Также, существует вариант OTA-обновления: установка прошивки как обновления уже существующей, без форматирования памяти.

  • Грузимся обратно в TWRP и приступаем к установке: Выбираем накопитель на котором лежат необходимые файлы и ставим всё в такой последовательности:
    1. Firmware
    2. Прошивка (Система, которую ставим)
    3. Перезагрузка в TWRP (По причине, описанной выше)
    4. Ядро
    5. Перезагрузка в TWRP
    6. Необходимые патчи / фиксы
    7. GAPPS (Google Services)
    8. DFE (Отключение шифрования)
    9. Magisk (Root права)
    • Перезагрузка в систему и дальнейшая её настройка на ваш вкус.

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

    Проблемы при установке прошивки

    Ошибки могут быть разные, но решаются по одному и тому же алгоритму. Если TWRP выдаёт ошибку, то:

    1. Проверить какую прошивку вы ставите. Всякое бывает, можно и не свою скачать случайно.
    2. Перечитать инструкцию если таковая есть, вдруг что-то пропустили.
    3. Перекачать установочный zip с прошивкой (он может быть битый).
    4. Если 1-2-3 не сработали, то проводим очистку разделов и форматируем Data.
    5. Крайний случай: прошиваем стоковой прошивкой через фирменный прошивальщик.
    6. Только при наличии программатора и умения с ним работать: шьём через него сток (может решить проблему, если не помог обычный прошивальщик)
    7. Пробуем восстановить смартфон по индивидуальной для каждого инструкции "Восстановление из кирпича", которая ищется в теме своего устройства.
    8. Если совсем никак, скорее всего проблема в железе. Поэтому остаётся только вариант сервисного центра.

    Все проблемы, которые могут возникнуть в рабочей системе решаются установкой "Фикса от Васяна", сменой ядра, либо установкой другого кастома.
    Если вы уже решили заняться этим делом, то ищите и пытайтесь пофиксить, а ещё лучше показать остальным как вы решили свою проблему, если решения до вас не было.

    Выводы: нужно оно нам, или нет

    Для начала придётся немного пострадать, а там уже опыт наберётся и можно будет шиться без гайдов и фиксить любую проблему самому. Получение удовольствия от использования своего смартфона станет не таким редким явлением. Захотели себе что-то особенное и лучше чем сток? Готовы уделять этому время? Форумы с прошивками вас ждут. "Кастом будет всегда лучше любого стока" — эта фраза будет иметь смысл только в том случае, если прошивка хорошо собрана, имеет ядро с различными оптимизациями и почищена от мусорных приложений. Тут дело уже не во вкусах, а в том, как на самом деле.

    • Разработка под Android
    • Разработка под Linux
    • Гаджеты
    • Смартфоны

    Делаем свое кастомное ядро

    Делаем свое кастомное ядро

    Кастомные ядра — настоящее раздолье для юзера. С их помощью вы можете полностью настроить смарт под себя — что вам нужно? Невероятная скорость и плавность или максимальная экономия энергии? Конечно, на первых порах прошить ядро довольно сложно, хотя что там — даже поставить рекавери очень непростая задача для новоиспеченного андроид-юзера. Думаю, многие интересовались тем, как делают такие ядра, да и как вообще самому сделать нечто похожее? Если вы относитесь к этому числу — эта статья для вас!

    Подписывайтесь на наш Телеграм

    Внимание! Статься содержит зубодробительное кол-во картинок и мозговзрывающий контент!

    Если вы все-таки решились попробовать себя в шкуре ядродела, то наверняка будете озадачены кол-вом подобных инструкций. Многие из них написаны на английском, да и процесс компилирования ядра проходит с помощью Google NDK (в том числе инструкция на 4PDA). В моей же статье описано все о сборке и компилировании ядра с помощью довольно популярного тулчейна — Linaro 4.9.1. На самом деле уже давно как в свет вышел новый Linaro 4.9.2, но он довольно сырой(по крайней мере отвратительно работает на Nexus 5)

    Все что нам потребуется для сборки ядра:

    • Исходники стокового ядра
    • Стоковый рамдиск
    • Любой Linux дистрибутив(рекомендую Ubuntu 14.04LTS)
    • Тулчейн(Linaro)
    • Желание и стремление к созданию ядра

    Итак, первым делом нужно установить необходимые для сборки пакеты:

    Делаем свое кастомное ядро

    Чтобы получить необходимые пакеты прописываем следующие комманды(просто скопируйте весь список и вставьте в терминал с помощью комбинации Shift+Ins) —

    sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.8-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libreadline-gplv2-dev gcc-multilib g++-multilib libc6-dev x11proto-core-dev libx11-dev gawk texinfo automake libtool cvs

    Делаем свое кастомное ядро

    Как видим, все необходимые пакеты установлены. Настройка ОС завершена — переходим к следующему пункту — скачивание исходников.

    Исходники моего устройства находятся по адресу android.googlesource.com/kernel/msm

    Делаем свое кастомное ядро

    Здесь также находятся исходники для N4, N7 2013. Если у вас устройство линейки Nexus — смотрите таблицу выше. Если же у вас другое устройство — ищите исходники на соответствующих ресурсах производителя.

    Чтобы получить исходники достаточно прописать комманду

    git clone https://android.googlesource.com/kernel/msm

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

    Делаем свое кастомное ядро

    Проверить список бранчей можно коммандой

    git branch -a

    Делаем свое кастомное ядро

    Для моего устройства необходим бранч origin/android-msm-hammerhead-3.4-kitkat-mr2. Чтобы получить данный бранч пишем

    git checkout origin/android-msm-hammerhead-3.4-kitkat-mr2

    Начнется проверка файлов

    Делаем свое кастомное ядро

    После окончания проверки вы увидите папку с исходниками в той директории, в которой их скачали

    Делаем свое кастомное ядро

    Остался последний пункт и можно начинать разработку ядра! Необходимо скачать тулчейн. Получить его можно коммандой

    git clone https://github.com/anarkia1976/AK-linaro.git

    Делаем свое кастомное ядро

    После этого в вашей директории появится папка AK-linaro. Из этой папки достаем нужный тулчейн. Я использую Linaro 4.9.1-2014.07.20140718.CR83

    Кидаем папку с тулчейном в домашнюю директорию и переименовываем в «linaro» для удобства

    Итак, подготовка завершена, теперь переходим к самому процессу создания ядра. Ах да, чуть не забыл — нам потребуется рамдиск, достать его из стокового ядра можно с помощью Android IMAGE Kitchen, всю инфу и инструкции найдете по этой ссылке — forum.xda-developers.com/showthread.php?t=2073775

    После того как достали рамдиск кидаем его в домашнюю директорию, опять же, так намного удобнее. Теперь нам потребуются специальные скрипты для того, чтобы скомпилировать ядро. Ссылка на скрипты — yadi.sk/d/vN0KCGF8bB9gV

    Эти скрипты необходимо распаковать в папку с исходниками

    Делаем свое кастомное ядро

    Также вам понадобится конфиг, обычно название конфига совпадает с кодовым названием вашего устройства, например у меня это «hammerhead_defconfig»

    Название конфига следует написать в 29 строку в файле «env_setup.sh»

    Делаем свое кастомное ядро

    Сам же конфиг находится по пути «arch/arm/configs»

    Завершающим шагом является адаптация главного Makefile под Linaro. Для этого находим строчку

    REAL_CC = $(CROSS_COMPILE)gcc
    CC = $(CROSS_COMPILE)gcc

    Теперь найдите эти строчки:

    # Use the wrapper for the compiler. This wrapper scans for new # warnings and causes the build to stop upon encountering them. CC = $(srctree)/scripts/gcc-wrapper.py $(REAL_CC)

    И удалите. Все готово для первой компиляции!

    Открываем терминал, переходим к папке с исходниками и прописываем следующую комманду:

    ./build_kernel.sh

    Делаем свое кастомное ядро

    Начнется компиляция. На варнинги(Warning) не обращайте внимание! Главное, чтобы не было ошибок! Большинство ошибок подробно опысываются, т.е. решить их довольно легко, но если же вы словите ошибку после VMLINUX, то тут придется попотеть, так как в гугле вы вряд ли что-то найдете, придется сидеть на Гитхабе и искать что-то подобное у других энтузиастов-ядроделов

    Если ядро скомпилировалось правильно и без ошибок, то вы увидите подобное окно

    Делаем свое кастомное ядро

    Если все в порядке, то советую забекапить текущие исходники, мало ли что может случиться. Собственно вы только что собрали свое первое ядро, пусть оно и отличается от стокового одним лишь использованием Linaro

    Теперь я расскажу про патчи — это то, чем мы будет «тюнинговать» ядро. Для примера я приведу патч, благодаря которому вы можете разогнать свой MSM8974 — github.com/franciscofranco/hammerhead/commit/104890313a73dae0e7d7a13975801cc568d231ad

    Этим патчем мы повышаем максимальный вольтаж и, соответственно, частоты до 3GHz. Этот способ предназначен ТОЛЬКО для устройств на базе чипа MSM8974(Snapdragon 800(801)) Чтобы пропатчить ядро достаточно привести свои файлы в такое-же состояние, что и в патче. Проще говоря — добавить/удалить/заменить строки. Обязательно удаляйте плюсики! Для тех кто не понял, про какие плюсы я говорю:

    + < 1, < 3014400, HFPLL, 1, 157 >, L2(21), 1100000, 957 >,

    Как видим, в начале стоит + Это означает, что эту строку надо добавить в ваш файл. Сам + добавлять нельзя!

    После применение данного патча(изменения своих исходников под данный комент) максимальная частота повысится с 2.3GHz до 3GHz. На разных чипах это реализовано по разному!

    Теперь вновь запускаем компиляцию, дожидаемся ее окончания и получаем ядро. Оно лежит в папке «Out»

    Делаем свое кастомное ядро

    Не забывайте делать "./clean_kernel.sh" перед началом компиляции!

    Теперь прошиваем ядро на устройство. Если оно запустится, то поздравляю — вы только что сделали свое первое, по настоящему кастомное ядро с разгоном!

    Делаем свое кастомное ядро

    Удачи вам и не стоит отчаиваться если что-то идет не так, нельзя создать суперядро за несколько дней — на это уходят недели, а то и месяцы.

    Делитесь своим опытом в комментариях!

    Выбираем кастомное ядро для своего Android-аппарата

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

    Custom kernel?

    Что такое кастомное ядро? Как мы все знаем, Android представляет собой пирог, состоящий из трех базовых слоев: ядро Linux, набор низкоуровневых библиотек и сервисов и виртуальная машина Dalvik, поверх которой работает графическая оболочка, высокоуровневые инструменты и сервисы, а также почти все приложения, установленные из маркета. Создатели большинства альтернативных кастомных прошивок обычно работают только с двумя верхними слоями, добавляя функции в графическую оболочку (например, кнопки в шторке), изменяя ее (движок тем в CyanogenMod), а также добавляя новые системные сервисы (эквалайзер в CyanogenMod) и оптимизируя существующие.

    Авторы популярных прошивок также по мере возможностей вносят изменения в ядро Linux: оптимизируют (сборка с более агрессивными флагами оптимизации компилятора), включают в него новую функциональность (например, поддержку шар Windows), а также вносят другие изменения вроде возможности поднимать частоту процессора выше предусмотренной производителем. Зачастую все это остается за кадром, и многие пользователи кастомных прошивок даже не подозревают об этих возможностях, тем более что тот же CyanogenMod поставляется с кастомным ядром только для ограниченного круга девайсов, для которых доступны как исходники родного ядра, так и возможность его замены. Например, почти все прошивки CyanogenMod для смартфонов Motorola используют стандартное ядро — заменить его на свое невозможно из-за непробиваемой защиты загрузчика.

    Выбираем алгоритм перезагрузки TCP, планировщик I/O и алгоритм управления энергосбережением

    Другие статьи в выпуске:

    Хакер #171. 3D-принтеры

    • Содержание выпуска
    • Подписка на «Хакер» -60%

    Однако ядро в смартфонах с разлоченным загрузчиком можно заменить отдельно от основной прошивки. И не просто заменить, а установить ядро с огромным количеством различных функций, которые требуют определенных технических знаний для управления, а потому обычно не встраиваются в ядра популярных прошивок, таких как CyanogenMod, AOKP и MIUI. Среди этих функций можно найти поддержку высоких частот работы процессора, управление гаммой экрана, режимами энергосбережения, высокоэффективные менеджеры питания и огромное количество других фич.

    В этой статье мы поговорим о том, что нам могут предложить создатели кастомных ядер, рассмотрим основные кастомные ядра для различных устройств, а также попробуем установить ядро независимо от основной прошивки и проверим все на собственной шкуре. Итак, что обычно предлагают разработчики альтернативных ядер?

    Умный регулировщик

    В SoC’ах OMAP35XX, используемых, например, в Galaxy S II и Galaxy Nexus, есть функция SmartReflex, которая выполняет роль умной системы регулировки вольтажа при изменении нагрузки на процессор. По сути, она избавляет от необходимости тонкого тюнинга вольтажа пользователем.

    Регулируем вольтаж

    Оптимизации

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

    1. Сборка с помощью компилятора Linaro GCC с агрессивными опциями оптимизации. Писк сезона, используется почти во всех ядрах. Особую популярность этот метод получил после того, как организация Linaro с помощью каких-то непонятных синтетических тестов продемонстрировала 400%-й (!) прирост производительности Android, собранного с помощью своего компилятора. В реальных условиях эффективность Linaro GCC несколько ниже, но польза от него все же ощутима, так как он реально подгоняет код под особенности архитектуры ARMv7 и, если судить по личному опыту, не приносит никаких проблем в стабильность работы ни ядра, ни приложений.
    2. Расширение возможностей управления частотой и вольтажом центрального и графического процессоров, а также использование более эффективного для планшетов и смартфонов алгоритма управления энергосбережением. Используется во всех кастомных ядрах и ядрах большинства серьезных кастомных прошивок. Подробнее эту особенность мы рассмотрим в следующем разделе.
    3. Активация более эффективных внутренних механизмов, появившихся в последних ядрах Linux. Сюда можно отнести SLQB аллокатор памяти, который, по мнению некоторых разработчиков, может быть более эффективным, чем SLUB, однако никаких экспериментальных подтверждений этому нет. Такой аллокатор используется в ядре GLaDOS для Nexus 7. Приятная полезность Trickster MOD: возможность включить ADB по Wi-Fi
    4. Многие разработчики любят изменять стандартный алгоритм контроля насыщения TCP (TCP Congrestion control), который регулирует размер TCP-окна на основе множества параметров, чтобы сделать поток пакетов более ровным и достичь наивысшей скорости передачи данных. Начиная с версии 2.6.19, ядро Linux по умолчанию использует эффективный алгоритм CUBIC, который также обычно применяется и в стандартных ядрах Android. Проблема только в том, что CUBIC эффективен в проводных сетях с высокой скоростью передачи данных, тогда как для 3G- и Wi-Fi-сетей гораздо лучшим выбором будет алгоритм Westwood+. Именно этот алгоритм используется в ядрах Leankernel для Galaxy Nexus и faux123 для Nexus 7, а franko.Kernel для Galaxy S II и Galaxy Nexus так и вообще включает в себя весь набор доступных алгоритмов. Просмотреть их список и выбрать нужный можно с помощью следующих команд:Изменение алгоритма контроля насыщения TCPsysctl net.ipv4.tcp_available_congestion_control sysctl -w net.ipv4.tcp_congestion_control=westwood

    В 3G-сетях алгоритм контроля перегрузки TCP Westwood+ всегда выигрывает

    Еще один тип оптимизации: изменение стандартного планировщика ввода-вывода. Ситуация на этом поле еще более интересная, так как вместо того, чтобы разобраться в принципах работы планировщиков, некоторые сборщики ядер просто читают в Сети документы по I/O-планировщикам для Linux и делают выводы. Среди пользователей такой подход распространен еще более сильно. На самом деле почти все самые производительные и умные Linux-планировщики совершенно не подходят для Android: они рассчитаны на применение с механическими хранилищами данных, в которых скорость доступа к данным разнится в зависимости от положения головки. Планировщик использует разные схемы объединения запросов в зависимости от физического положения данных, поэтому запросы к данным, которые располагаются близко к текущему положению головки, будут получать больший приоритет. Это совершенно нелогично в случае с твердотельной памятью, которая гарантирует одинаковую скорость доступа ко всем ячейкам. Продвинутые планировщики принесут на смартфоне больше вреда, чем пользы, а лучший результат покажут самые топорные и примитивные. В Linux есть три подобных планировщика:

    • Noop (No operation) — так называемый не-планировщик. Простая FIFO очередь запросов, первый запрос будет обработан первым, второй вторым и так далее. Хорошо подходит для твердотельной памяти и позволяет справедливо распределить приоритеты приложений на доступ к накопителю. Дополнительный плюс: низкая нагрузка на процессор в силу ну очень простого принципа работы. Минус: никакого учета специфики работы девайса, из-за чего могут возникнуть провалы производительности.
    • SIO (Simple I/O) — аналог планировщика Deadline без учета близости секторов друг к другу, то есть разработанный специально для твердотельной памяти. Две главные изюминки: приоритет операций чтения над операциями записи и группировка операций по процессам с выделением каждому процессу кванта времени на выполнение операций. В смартфонах, где важна скорость работы текущего приложения и преобладание операций чтения над записью, показывает очень хорошую производительность. Доступен в Leankernel, ядре Matr1x для Nexus 4 и SiyahKernel.
    • ROW (READ Over WRITE) — планировщик, специально разработанный для мобильных устройств и добавленный в ядро всего несколько месяцев назад. Основная задача: первоочередная обработка запросов чтения, но справедливое распределение времени и для запросов записи. Считается лучшим на данный момент планировщиком для NAND-памяти, по умолчанию используется в Leankernel и Matr1x.

    Стоит сказать, что почти все стандартные прошивки и половина кастомных до сих пор используют ядро со стандартным для Linux планировщиком CFQ, что, впрочем, не так уж и плохо, поскольку он умеет правильно работать с твердотельными накопителями. С другой стороны, он слишком сложен, создает бОльшую нагрузку на процессор (а значит, и батарею) и не учитывает специфику работы мобильной ОС. Еще один популярный выбор — это планировщик Deadline, который не хуже SIO, но избыточен. Посмотреть список доступных планировщиков можно с помощью такой команды:

    # cat /sys/block/*/queue/scheduler 

    Для изменения применяется такая (где row — это имя планировщика):

    # for i in /sys/block/*/queue/scheduler; do echo row > $1; done 

    Некоторые сборщики ядер применяют и другой вид оптимизации, связанный с вводом-выводом. Это отключение системного вызова fsync, применяемого для принудительного сброса изменившегося содержимого открытых файлов на диск. Существует мнение, что без fsync система будет реже обращаться к накопителю и таким образом удастся сохранить время процессора и заряд батареи. Довольно спорное утверждение: fsync в приложениях используется не так уж и часто и только для сохранения действительно важной информации, зато его отключение может привести к потере этой же информации в случае падения операционной системы или других проблем. Возможность отключить fsync доступна в ядрах franco.Kernel и GLaDOS, а для управления используется файл /sys/module/sync/parameters/fsync_enabled, в который следует записать 0 для отключения или 1 для включения. Повторюсь, что использовать эту возможность не рекомендуется.

    Добавляем в ядро новые функции

    Само собой, кроме оптимизаций, твиков и разных систем расширенного управления оборудованием, в кастомных ядрах также можно найти совершенно новую функциональность, которой нет в стандартных ядрах, но которая может быть полезна пользователям.

    В основном это различные драйверы и файловые системы. Например, некоторые ядра включают в себя поддержку модуля CIFS, позволяющего монтировать Windows-шары. Такой модуль есть в ядре Matr1x для Nexus S, faux123 для Nexus 7, SiyahKernel и GLaDOS. Сам по себе он бесполезен, но в маркете есть несколько приложений, позволяющих задействовать его возможности.

    Еще одна полезность — это включение в ядро драйвера ntfs-3g (точнее, в пакет с ядром, сам драйвер работает как Linux-приложение), который необходим для монтирования флешек, отформатированных в файловую систему NTFS. Этот драйвер есть в ядрах faux123 и SiyahKernel. Обычно он задействуется автоматически, но если этого не происходит, можно воспользоваться приложением StickMount из маркета.

    Многие ядра также имеют в своем составе поддержку так называемой технологии zram, которая позволяет зарезервировать небольшой объем оперативной памяти (обычно 10%) и использовать ее в качестве сжатой области подкачки. В результате происходит как бы расширение количества памяти, без каких-либо серьезных последствий для производительности. Доступно в Leankernel, включается с помощью Trickster MOD или командой zram enable.

    Последние две интересные функции — это Fast USB charge и Sweep2wake. Первая — это не что иное, как принудительное включение режима «быстрой зарядки», даже если смартфон подключен к USB-порту компьютера. Режим быстрой зарядки доступен во всех более-менее новых смартфонах, однако в силу технических ограничений он не может быть включен одновременно с доступом к карте памяти. Функция Fast USB charge позволяет включить этот режим всегда, отключив при этом доступ к накопителю.

    Sweep2wake — это новый способ будить устройство, изобретенный автором Breaked-kernel. Смысл его в том, чтобы включать смартфон, проведя пальцем по клавишам навигации, располагающимся ниже экрана, либо по самому экрану. Это действительно удобная функция, но в результате ее включения сенсор будет оставаться активным даже во время сна устройства, что может заметно разряжать батарею.

    Разгоняем графический процессор

    Разгон, вольтаж и энергосбережение

    Разгон популярен не только среди владельцев стационарных компов и ноутбуков, но и в среде энтузиастов мобильной техники. Как и камни архитектуры x86, процессоры и графические ядра мобильной техники отлично гонятся. Однако сам способ разгона и предпринимаемые для его осуществления шаги здесь несколько другие. Дело в том, что стандартные драйверы для SoC’ов, отвечающие за энергосбережение и изменение частоты процессора, обычно залочены на стандартных частотах, поэтому для тонкого тюнинга приходится устанавливать либо альтернативный драйвер, либо кастомное ядро.

    Почти все более-менее качественные и популярные кастомные ядра уже включают в себя разлоченные драйверы, поэтому после их установки возможности управления «мощностью» процессора значительно расширяются. Обычно сборщики кастомных ядер делают две вещи, влияющие на выбор частоты. Это расширение частотного диапазона за рамки изначально заданных — можно установить как более высокую частоту процессора, так и очень низкую, что позволяет сохранить батарею и увеличить градацию частот, например, вместо трех возможных частот предлагается на выбор шесть. Второе — это добавление возможности регулировки вольтажа процессора, благодаря чему можно снизить напряжение процессора на низких частотах для сохранения заряда батареи и повысить на высоких для увеличения стабильности работы.

    Всем этим можно управлять с помощью известной платной утилиты SetCPU или же бесплатной Trickster MOD. Рекомендации по управлению все те же, что и для настольных систем. Нижнюю частоту процессора лучше установить минимальной, но не ниже 200 МГц (чтобы избежать лагов), верхний порог повышается постепенно с тестированием стабильности работы, при падении которой рекомендуется немного поднять вольтаж для данной частоты. Каких-то рекомендаций по вольтажу нет, так как каждый процессор уникален и значения будут для всех разными.

    Главный экран утилиты настройки ядер Trickster MOD

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

    • SmartAssV2 — переосмысление алгоритма Interactive с фокусом на сохранение батареи. Основное отличие в том, чтобы не дергать процессор на высокие частоты в случае кратковременных всплесков нагрузки, для которых хватит и низкой производительности процессора. По умолчанию используется в ядре Matr1x.
    • InteractiveX — тюнингованный алгоритм Interactive, главная особенность которого в залочке процессора на минимальной указанной пользователем частоте и обесточивании второго ядра процессора во время отключения экрана. По умолчанию используется в Leankernel.
    • LulzactiveV2 — по сути, изобретенный заново OnDemand. Когда нагрузка на процессор превышает указанную (по умолчанию 60%), алгоритм поднимает частоту на определенное число делений (по умолчанию 1), при понижении нагрузки — опускает. Особый интерес представляет тем, что позволяет самостоятельно задавать параметры работы, поэтому подходит для прожженных гиков.

    Вообще, сборщики ядер очень любят придумывать новые алгоритмы энергосбережения по причине простоты их реализации, поэтому можно найти еще с десяток других. Большинство из них полный шлак, и при выборе планировщика следует руководствоваться правилом: либо один из трех описанных выше, либо стандартный Interactive, который, кстати, очень неплох. Сделать выбор можно с помощью все той же Trickster MOD.

    Trickster MOD позволяет активировать почти все возможности кастомных ядер

    Интерфейсы управления

    Большинство популярных кастомных ядер включают в себя несколько механизмов тонкого управления различными параметрами драйверов, наиболее распространены из которых ColorControl, GammaControl, SoundControl и TempControl.

    Тюнингуем цветопередачу

    • ColorControl и GammaControl позволяют управлять параметрами цветопередачи. Нужно это для того, чтобы отрегулировать не всегда правильную передачу цветов на экране (например, сделать черный черным) или сделать цвета более мягкими и приятными глазу.
    • SoundControl. Можно использовать для того, чтобы сделать Boost звука в том случае, если он слишком тихий.
    • TempControl. Позволяет регулировать максимальное значение датчика температуры (от 50 до 90 градусов), отключающего SoC при перегреве. Полезно для экспериментов с разгоном.

    Первые два интерфейса доступны практически везде, включая ядра CyanogenMod, вторые два — в Leankernel и, может быть, в других. Так или иначе, всеми ими можно управлять с помощью Trickster MOD.

    Ядра

    Какое же ядро выбрать? На этот вопрос нет однозначного ответа, и не потому, что «каждому свое», а потому, что в мире существует огромное количество Android-устройств и почти столько же различных ядер. Тем не менее есть несколько популярных ядер, которые разрабатываются сразу для нескольких устройств. Так или иначе многие из них я упоминал по ходу повествования, здесь же приведу их краткое описание.

    • Leankernel — ядро для Galaxy Nexus, Nexus 7 и Galaxy S III. Основной акцент при разработке делается на простоту и скорость работы. Алгоритм энергосбережения: InteractiveX V2, планировщик I/O: ROW, все перечисленные выше интерфейсы управления, поддержка Fast USB charge, Swap и zram, гибкие возможности разгона CPU и GPU. Одно из лучших ядер. Настраивается с помощью с помощью Trickster MOD.
    • Matr1x (http://goo.gl/FQLBI, goo.gl/ZcyvA) — ядро для Nexus S и Nexus 4. Простое и неперегруженное ядро. Поддержка разгона CPU и GPU, GammaControl, Fast USB Charge, Sweep2wake, планировщики I/O: SIO, ROW и FIOPS. Твики производительности. Настраивается с помощью Trickster MOD.
    • Bricked-Kernel (http://goo.gl/kd5F4, goo.gl/eZkAV) — простое и неперегруженное ядро для Nexus 4 и HTC One X. Оптимизации для Snapdragon S4 и NVIDIA Tegra 3, переработанный режим энергосбережения для Tegra 3, возможность разгона, алгоритм энергосбережения: тюнингованный OnDemand (доступен и Interactive).
    • SiyahKernel — ядро для Galaxy S II и S III. Гибкие возможности разгона, автоматическая калибровка батареи, улучшенный драйвер сенсорного экрана, алгоритмы энергосбережения: smartassV2 и lulzactiveV2, планировщики I/O: noop, deadline, CFQ, BFQV3r2 (по умолчанию), V(R), SIO. Драйверы CIFS и NTFS (с автомонтированием). Конфигурируется с помощью ExTweaks.
    • franco.Kernel — ядро для Nexus S, Galaxy Nexus, Nexus 4, Nexus 7, Nexus 10, Galaxy S III, Galaxy Note, Optimus One и One X.

    Возможности ядра сильно разнятся от устройства к устройству, поэтому подробности придется смотреть на месте. Тем не менее, прошивая это ядро, ты получишь возможность разгона, тюнинга драйверов, отличную производительность, а также поддержку различных алгоритмов энергосбережения и планировщиков. По сути, ядро включает в себя почти все описанные в статье твики. Считается одним из лучших доступных ядер. Имеется приложение для автоматического обновления franko.Kernel Updater. Конфигурировать можно с помощью Trickster MOD.

    Как установить?

    Все ядра распространяются в стандартных для Android ZIP-архивах, которые следует прошивать через консоль восстановления точно так же, как альтернативные прошивки. Обычно ядра совместимы с любыми прошивками, поэтому, подобрав нужное ядро, его можно смело устанавливать. Единственное, на что следует обратить внимание, — это версия Android, с которой обеспечена совместимость ядра. Оно может как подойти ко всем доступным для устройства версиям Android, так и работать только с одной (разработчик обычно явно говорит об этом). Перед прошивкой обязательно сделай бэкап текущей прошивки с помощью все той же консоли восстановления. Если что-то пойдет не так, ты всегда сможешь откатиться.

    Выводы

    Как ты смог убедиться, кастомные ядра обладают множеством преимуществ перед ядрами, используемыми в стандартных или сторонних прошивках. А что еще более важно — необязательно знать все тонкости Android, чтобы их использовать, достаточно скачать и установить ZIP-архив.

    Евгений Зобнин

    Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *