Перепрошивка ядра андроид-устройства. Изучаем Android. Ядро (Kernel) - что это такое

08.05.2019

Друзья, начинаю серию статей с подробными объяснениями того, как сделать свое ядро для собственного телефона.

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

Для компиляции ядер я использую или Linux (UBUNTU) или Windows Bash UBUNTU под Windows 10.

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

Компиляция

Компиляция ядер происходит в 2 этапа + сборка DTB + сборка ядра для прошивки:

  1. Компиляция конфигурации будущего ядра
  2. Компиляция самого ядра + возможно библиотеки уровня ядра (для MTK я этого не видел, только для MSM и другого процессора)
  3. Дополнительно собирается DTB файл конфигурации устройств, если настройка конфигурации ядра этого требует
  4. Дополнительно необходимо собрать boot.img

Первое что делается, задаются глобальные переменные параметров процессора (ARM или ARM64) и пути к компилятору (набор программам которые преобразуют текст исходного кода в двоичный файл), все это делается командами:

export ARCH=arm
export TARGET=out

export означает то, что переменная будет доступна для всех запущенных программ и будет храниться в глобальном списке переменных (окружения bash).
ARCH — тип архитектуры процессора под который будет компилироваться ядро
CROSS_COMPILE — указывает путь, где компилятор будет искать программы компиляции и сборки ядра.
TARGET — папка, куда компилятор будет складывать все свои файлы.

make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE X5PRO_6735m_defconfig

make — стандартная программа для сборки программ по сценариям
O=
$TARGET — папка, куда буду складываться все скомпилированные файлы и конфигурации, ее надо указать потому что многие модули ядра используют ее для своих целей, берется из глобальной переменной установленной в примере выше
ARCH=$ARCH — тип архитектуры процессора, обычно arm или arm64 , в примере берется из глобальной переменной установленной выше.
CROSS_COMPILE= — путь к компилятору, мы задали глобальную переменную в примере выше
5PRO_6735m_defconfig — название конфигурационного файла для компиляции ядра вашего телефона, находится по пути arch/$ARCH/configs/ и зависит от типа выбранной конфигурации процессора, мы задали ее в глобальной переменной $ARCH

Т.е. такая же команда как и выше но без указания конфигурационного файла.
-j4 — это параметр говорит, сколько процессоров (процессов компиляции) использовать при работе. У меня в компьютере 4 физических процессора, и я использую цифру 4, если у вас в компьютере 8 процессов, то используйте цифру 8! Но чем больше цифра, тем больше используется памяти. Если у вас слабый компьютер, то используйте меньшее число.

По окончании компиляции, у меня он длится около 10 минут, в зависимости от версии ядра и процессора получится несколько файлов — частей будущего файла boot.img или recovery.img и размещаются в папке $TARGET/arch/$ARCH/boot и называются по разному в зависимости от архитектуры и процессора:

  • Image.gz — упакованное в архив ядро, при запуске телефона ядро распаковывается в оперативную память и запускается, файл DTB располагается отдельно
  • Image — не упакованное ядро, файл DTB располагается отдельно
  • Image.gz-dtb — упакованное в архив ядро с встроенным файлом DTB для ARM64
  • zImage-dtb — упакованное в архив ядро с встроенным файлом DTB для ARM

Для компиляции файла DTB (DTB — двоичный файл с описанием настроек всего оборудования телефона, DTS — текстовой формат файла DTB ) для Qualcomm я дополнительно запускаю команду

dtbToolCM -2 -o $TARGET/arch/$ARCH/boot/dtb -s 2048 -p $TARGET/scripts/dtc/ $TARGET/arch/$ARCH/boot/dts/

Создается готовый для вставки в ядро файл dtb из скомпилированных раздельно файлов DTB находящихся в $TARGET /arch/$ARCH/boot/dts/

Для поиска и копирования всех возможно скомпилированных модулей для Qualcomm я использую команду которая ищет файлы по шаблону и копирует в одну папку.

find "$TARGET/" -name *.ko -exec cp {} "modules/" \;

Примеры

MTK для телефона DOOGEE X5PRO

git clone https://github.com/SnowCat6/DOOGEE-kernel-3.18.git
cd DOOGEE-kernel-3.18
export ARCH=arm
export CROSS_COMPILE=prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
export TARGET=out
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE X5PRO_6735m_defconfig
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -j4

Иходник ядра для DOOGEE X5PRO найдете здесь.
Лучше забирать через команду git clone https://github.com/SnowCat6/DOOGEE-kernel-3.18.git тогда вы сможете всегда обновлять до самой свежей версии командой git pull

Компиляция ядра под процессор Qualcomm для телефона Archos 50 Diamond

git clone https://github.com/SnowCat6/android_kernel_cyanogen_msm8916.git
cd android_kernel_cyanogen_msm8916
export ARCH=arm64
export CROSS_COMPILE=prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
export TARGET=out
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE lineageos_D50_defconfig
make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -j4
dtbToolCM -2 -o $TARGET/arch/$ARCH/boot/dtb -s 2048 -p $TARGET/scripts/dtc/ $TARGET/arch/$ARCH/boot/dts

Ядро (Kernel) в Android что это и зачeм нужны кастoмныe ядра?

Мнoгие владельцы c Android уcтрoйств на различных фoрумaх и сайтах чacтo встречают упoминaние о чем-тo нeпoнятном, чтo нaзывают ядрoм, или пo-aнглийски kernel. Егo мoжно пoмeнять и упoминaние o нем вcтречается в меню настрoeк устрoйства, в разделe «O плaншетe (телефоне)».

Ecли кoпнуть пoглубжe, тo oкажетcя, чтo ядрo – этo чacть oперационной cиcтемы, и oно ecть не тoлькo у Android, нo и у других oпeрaционных систeм: Windows, iOS, MacOS и прoчих. Нo наc будет интересoвaть ядрo Android, и чтo этo такoe мы попытаемcя oбъяcнить на урoвнe начинaющих пoльзователeй.

Вы, навернoe, знаете, чтo любая oперационнaя системa, и Android в тoм числe – этo, пo бoльшoму счету, нaбoр прoгрaмм, кoторые упрaвляют рабoтой всeгo вашего смартфона и телефона, а так же планшета, и oтвечaют за запуcк пользовательcких прилoжений, таких кaк игры, менеджeры файлoв, вeб-браузеры и прoчиe.

A ядрo Android являетcя, практически, cамoй главнoй чаcтью oперационной сиcтемы, кoторая oтвечаeт за взаимoдейcтвие между всeм «железoм» и прoгрaммной чаcтью систeмы. Ядрo сocтоит из набoрa драйвeров всегo имеющегocя в устрoйстве oборудовaния и пoдсистемы упрaвления памятью, сeтью, безoпасноcтью, и прoчих oсновныx функций oпеpационной системы.
Напримеp, кoгда вы касаетeсь экрана, чтoбы запуcтить какoе-либо прилoжениe, драйвер сенсopной панели экpана oпределяет меcтo, в кoтоpом прoизошло нажaтие и сooбщает кoopдинаты другим прoгpаммам, кoтopые oпять жe с пoмощью ядрa найдут в пaмяти устрoйства нужнoe прилoжение и запуcтят егo.

Сборка Android под конкретное устройство?

Этo кoнeчно, oчень упрoщеннaя мoдель, нo cуть рабoты oперaционнoй системы oнa oтражаeт.

Таким oбрaзом, мы выяcнили, чтo когдa любoе прoграммноe oбеспечение нуждаетcя в тoм, чтoбы oборудованиe планшета или телефoнa что-нибудь сделaлo, оно oбращаeтся за этим к ядpу oперационной систeмы.

Ядрo упpавляет абсoлютно вceм oбоpудованием: Wi-Fi, Bluetooth, GPS, пaмятью и прoчими устpoйствами. Не являeтcя исключением и «сердцеe» устрoйства – его прoцecсор. Ядрo можeт управлять eгo частoтой и энeргoснабжением.
Ядрo опeрационной системы Android, пoзаимствовaно ее разрабoтчикaми, кoмпанией Google, у oпеpационной систeмы Linux.

Taк кaк ядрo управляeт всем oборудованиeм, а oборудование у всeх планшетов и телeфoнов разнoе, базовоe ядрo Android дoрабатываeтся прoизводителeм для каждoго устрoйствa oтдельно.

Кaк и прoшивки, ядрa бывают cтoковыми (завoдcкими) и кacтoмными – альтернaтивными, coзданные незавиcимыми разрабoтчиками.

Зачeм нужны кастoмныe ядра?
Стoковое ядрo максимaльнo oптимизируется прoизводителeм для кoнкрeтного устрoйствa, нo в нeм oбычно заблoкировaны такие вaжныe функции ядрa, как, нaпримeр, управление чаcтoтой прoцессора. И еcли вам пoнадобитcя разoгнать прoцeccор свoего планшeта, вам нужнo будeт сменить ядpo на кaстoмное, в кoтоpом функция упpaвления частoтой пpoцессора pазблoкирована.

Kрoме тoгo, кaстoмные ядрa, oбычно ocновaны на бoлeе свежих верcиях Linux ядeр. Вoт примeрный перечeнь вoзможностeй, кoторые нaм дают кастoмныe ядра:

Изменениe частoты прoцессорa в ширoких пределaх;
Разгoн графичеcкoй пoдсистемы (GРU);
Снижениe частoты и напряжeния питания прoцессорa, чтo пoзволяeт дoстичь бoлeе длительнoго времeни рабoты oт бaтарeи;
Бoлее cвежиe и качественныe дрaйверы, напримeр, ускoряющие рабoту GPS или дoбавляющиe нoвые функции;
Ширoкиe вoзможноcти пo наcтрoйки и кoнфигурaции звука и цвeтoвой гаммы экранa;
Пoддержкa альтернативных фaйлoвых систeм (XFS, ReiserFS и пpoчих).

Так кaк альтернативные ядрa сoздаются незавиcимыми разрабoтчиками, нeт никакoй гарaнтии, чтo пoслe устанoвки каcтoмного ядра вaш планшет или телeфoн будут рабoтaть без сбoeв. Пoэтому перeд пpoшивкой нoвого ядpа желательнo сделaть пoлную резеpвную кoпию сиcтемы.

Компиляция ядра из исходников своими руками

Дистрибутивы, запускаемые через Linux Deploy, работают с ядром Android (модифицированное ядро Linux), а потому изменить конфигурацию ядра или подключить новые модули можно только путем пересборки этого ядра, либо сборки модулей под данную версию ядра.

Инструкция

  • Скачать и подготовить Android NDK:
  • Скачать и подготовить Android SDK, понадобятся утилиты adb и fastboot:
  • Получить исходники ядра данного устройства (в нашем случае это tinykernel-flo для Nexus 7 (2013), либо скачать аналогичную версию с kernel.org):
  • Получить файл конфигурации ядра с устройства (ядро должно быть собрано с поддержкой данной возможности):

    либо из boot.img (как извлечь boot описано ниже):

  • Если получить файл конфигурации ядра не получилось, то можно воспользоваться предварительной конфигурацией из поставки ядра (список конфигураций arch/arm/configs):
  • Узнать точную версию ядра устройства:

    Рузультат команды:

    В данном случае полной версией ядра будет строка “3.4.0-g03485a6”.

  • Установить локальную версию ядра (то что отображается после основной версии 3.4.0):
  • Изменить конфигурацию ядра в файле.config или командой:

    В нашем случае в файл.config изменены следующие строки (включена поддержка модулей и включен модуль binfmt_misc):

  • Запустить сборку ядра:

    либо только модулей:

  • Скачать утилиты для работы с загрузочным образом (boot.img):
  • Получить загрузочный образ с устройства (ядро хранится на специальном boot разделе):

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

  • Получить информацию об образе:

    Результат выглядит так:

  • Извлечь kernel и ramdisk из boot.img, заменить ядро и запаковать обратно:
  • Прошить устройство новым ядром:
  • Загрузить модуль на устройстве:
  • Следует учесть, что vermagic модуля должен полностью соответствовать версии ядра (с точностью до символа), иначе загрузить новый модуль не удастся.

    Необходимо узнать vermagic модуля и сравнить его с уже присутствующими на устройстве модулями:

    Результат выглядит примерно так:

Authored by Anton Skshidlevsky (meefik) kernel, linuxdeploy

« Запуск любого GNU/Linux дистрибутива из образаУправление Linux Deploy из командной строки »

Нашел мануал, где форматируют флешку, на фат и ехт2. На фат закидывают zImage, а на ехт2 дистрибутив дебиан + хфсе. Хочу теперь запихать «это» не на СД карту, а во внутрь планшета(ROM), у него есть 5 разделов (/dev/mmcblk1p0, /dev/mmcblk1p1, …) (system, data, kernel, cache, user). Cд карту определяет как /dev/mmcblk0p0 (фат) и /dev/mmcblk0p1 (ехт2).

На одном из разделов ROM «kernel» есть zImage андройдовский, и он запускает его Андройд. Если его заменить на дебиановский, то он запускает дебиан.

Сборка ядра Linux и модулей для Android

ТОКА ЕСЛИ СТОИТ СД КАРТА С разделом ехт2.

Если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует (Зависает во время загрузки). самое интересно во время загрузки кроме логотипа и мигающего «_» не чего нету так что на чем зависает не известно. Наверно просто не находит дебиан + хфсе, а именно /dev/mmcblk0p1 (ехт2).

А разве zImage (3Mб) это не сжатое ядро? (https://www.ibm.com/developerworks/ru/edu/l-embedded-distro/section5.html)

cyanogenmod · repo · сборка из исходников · croot · breakfast · brunch · make clean

Несколько месяцев назад я познал, что такое настройка окружения в Ubuntu для компиляции CyanogenMod из исходников. С тех пор прошло много времени, но это не значит, что я занимался чёрт знает чем 🙂 Я не болтался просто так, а портировал CyanogenMod на свой смартфон и приобретал опыт в этом деле. Однако, прежде чем написать статью для других, мне нужно было разложить всё по полочкам в собственной голове. Сейчас мы сделаем ещё один маленький шаг - научимся выкачивать из репозитория CyanogenMod исходники и познакомимся с парой-тройкой часто используемых команд. Итак, в прошлый раз я создал директорию android в своём домашнем каталоге, но сейчас передумал и назвал её CyanogenMod:

cd ~/ && mkdir CyanogenMod
cd CyanogenMod

Развлекаемся с git и repo

Во время работы с исходниками я осознал необходимость познакомиться с git и даже создал свой собственный репозиторий на GitHub. Там я публикую свою работу над деревом устройства (device tree) для Alcatel OT-986. Для начала git нужно установить:

sudo apt-get install git

Теперь пришло время воспользоваться утилитой repo и выкачать исходный код CyanogenMod из GitHub к себе на компьютер. Я всё ещё работаю с веткой ICS 4.0.4 (CyanogenMod 9.1.0):

repo init -u git://github.com/CyanogenMod/android.git -b cm-9.1.0

Также существуют ветки cm-10.1, cm-10.2 (возможно и новее на момент прочтения этой статьи). Выберите на своё усмотрение. Если вы, как и я, занимаетесь портом CyanogenMod на устройство, для которого нет никаких сторонних прошивок, то сначала попробуйте собрать ветку, соответствующую версии заводского ПО (stock ROM) - так будет легче сдвинуться с мёртвой точки. Alcatel OT-986 имеет из коробки версию Android 4.0.3, поэтому я начал работать с CM 9.1 - система загрузилась практически «с полпинка», а вот версии 10.1 и 10.2 у меня ещё полноценно так и не запустились.

Наблюдаем, как repo ругается при попытке выполнения команды init:

*** Please tell me who you are.

git config —global user.email «[email protected]»
git config —global user.name «Your Name»

to set your account’s default identity.

Укажем свои данные, выполнив заботливо подсказанные команды. Затем repo init нужно повторить, и в этот раз всё закончится успешно. Ответьте утвердительно на предложение раскрашивать вывод repo (это же весело, гы):

Enable color display in this user account (y/N)? y

Заявим свой манифест

На этом этапе официальный how-to от команды CyanogenMod предлагает начать скачивание исходников, но лично мне перед этим нужно проделать ещё один финт ушами - установить мой кастомный манифест. Это XML-файл, который позволяет указать repo, что некоторые части проекта мне не нужны. Вы тоже не хотите видеть в своей будущей прошивке дефолтный браузер? Пожалуйста:

remove-project name=»CyanogenMod/android_packages_apps_Browser»

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

Сборка прошивки на Android своими руками

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

project path=»device/alcatel/cedarlite» name=»yareg-com/device_alcatel_cedarlite»

Данная строка означает, что в директорию ~/CyanogenMod/device/alcatel/cedarlite будет скопировано содержимое репозитория https://github.com/yareg-com/device_alcatel_cedarlite.git. Эти файлы становятся частью всего исходного кода будущей прошивки, а в этом конкретном случае - особенно важной его составляющей, деревом устройства. Возможно подключать таким образом и репозитории из других источников, не только с GitHub.

Вся информация в манифесте должна быть оформлена в валидном XML-формате и сохранена в файл с любым именем и расширением.xml в директорию.repo/local_manifests. Выше я указал только фрагменты кода для наглядности, точный вариант манифеста смотрите на GitHub. Создать локальную копию с помощью git можно примерно так:

cd .repo && git clone https://github.com/yareg-com/manifest_alcatel_cedarlite.git
mv manifest_alcatel_cedarlite local_manifests

Компьютер пыхтит, а мы отдыхаем

Проделав все необходимые приготовления для работы repo, запустим процесс выкачивания исходного кода на свой компьютер:

cd ~/CyanogenMod
repo sync

Теперь всё зависит от ширины вашего интернет-канала и скорости дисковой подсистемы компьютера. Хочу предупредить, что объём директории CyanogenMod вырастет до нескольких десятков гигабайт, поэтому о свободном месте стоит позаботиться заранее. Дополнительно, лучше всего иметь быстрый SSD, несколько ядер процессора и не менее 4 GB оперативной памяти. Моя конфигурация - AMD A4 / 4 GB RAM / 2.5″ HDD 5400 rpm @ 75 Mbit/sec. Вполне комфортно, но сходить погулять во время repo sync я успеваю 🙂 Хорошо, что проделывать это необходимо всего один раз.

Вы уже ужинаете? А мы ещё завтракаем!

Когда repo sync отработает, выполним инициализацию окружения. Скачиваем некоторые зависимости CyanogenMod, на самом деле много всякого хлама - уже собранные Rom Manager, Terminal Emulator (хотя, это полезная штука) и прочее, без чего сборка не состоится:

cd ~/CyanogenMod/vendor/cm
./get-prebuilts

cd ~/CyanogenMod
source build/envsetup.sh

Часто используемые команды

Команда croot делает только одно - телепортирует вас в корень директории с исходниками, в моем случае - ~/CyanogenMod. Команда breakfast подготавливает окружение для дерева устройства:

breakfast cedarlite

Команда brunch запускает процесс сборки прошивки на основе конфигурационных файлов дерева устройства:

brunch cedarlite

Команда make clean удалит все следы предыдущей сборки, если вы хотите начать всё с чистого листа. Исходный код при этом не удаляется, так что выкачивать всё по-новой из репозиториев не придётся. Я использую make clean после больших изменений в файлах дерева устройства.

Команда repo sync обновит исходники до актуального состояния. Если я изменил что-то онлайн в своём GitHub-репозитории или команда CyanogenMod исправила какие-то баги в коде, то repo sync необходим.

Все эти команды следует выполнять из корневой директории исходного кода CyanogenMod, то есть после выполнения команды croot.

Обсуждение

Войдите на сайт, чтобы присоединиться к обсуждению.

Песочница

pull 6 июня 2015 в 19:41

Сборка ядра для Android-устройств на примере Solid Kernel для LG e975

  • Программирование ,
  • Разработка под Android

Подготовка

Что нам потребуется
  • 64 битная система Linux (я использую Ubuntu 14.04)
  • Рутованый телефон/планшет/иной девайс на Android"е с процессором QUALCOMM
Подготовка системы
Установим необходимые пакеты. Набирем в терминале:

Apt-get install bison build-essential curl flex lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev git-core make phablet-tools gperf
Система готова.

Качаем исходники
Идем на GitHub и скачиваем исходники (исходники для каждого девайса разные, поэтому ссылок давать не буду) архивом (в правой части экрана должна находиться кнопочка «Download ZIP»). Распаковываем архив в любое удобное место (у меня это папка /home/system-exe/Solid ).

Качаем тулчейн. Переходим по ссылке , отмечаем галочкой нужный тулчейн (для меня это cortex-a15, зависит от ядер процессора) и нажимаем «скачать». Распаковываем скачанный архив в папку /home/%USERNAME%/Toolchain/Linaro-4.9.3 (вместо %USERNAME% подставляем имя учетки).

Выдираем файл конфигурации из девайса
Идем по пути /proc (на телефоне) и копируем файл config.gz на комп, распаковываем и получаем файл config, которые переименовываем по шаблону %устройство%_defconfig (у меня это e975_defconfig). Кладем получившийся файл по пути /home/%USERNAME%/Solid/arch/arm/configs

С подготовкой окончили.

Сборка ядра

Заходим в терминал и набираем команду:

Cd Solid
(таким образом мы перешли в папку с нашими исходниками)

Make %устройство%_defconfig
(у меня надо так: make e975_defconfig)

После завершения пишем:

Make menuconfig
(здесь правим нужные значения конфигурации. Тут все предельно просто, думаю разберетесь.)

После завершения начинаем сборку:

Make -j8
Параметр -j8 нужен только если у вас многоядерный процессор. Цифра 8 определяет количество ядер(потоков, в случае с Intel i3, i5, i7 процессорами). К примеру у меня - Intel i7, он четырехядерный, но поддерживает два потока на каждое ядро, поэтому 2 * 4 = 8.

Все. Ждем.

В конце должна появиться надпись «zImage is ready».

Идем по пути /home/%USERNAME%/Solid/arch/arm/boot и видим там наше ядро - zImage.

Тестирование

Теперь нам осталось заставить работать этот самый zImage на нашем устройстве.

А вот теперь трижды подумайте надо ли вам это? Уверены ли вы в своих силах и в том, что правильно собрали ядро?

Подумали? Уверены? Точно уверены? Тогда продолжаем.

Извлекаем boot.img из нашего девайса. Набираем в терминале на телефоне:

Su dd if=dev/block/platform/.../by-name/boot of=sdcard/boot.img

Переносим boot.img, который лежит на карте памяти, на комп. Распаковываем его (в интернете есть множество описаний распаковки и запаковки boot.img), меняем оригинальный zImage на наш и собираем boot.img.

Закидываем наш собранный образ на карту памяти под именем new_boot.img
В терминале набираем:

Su dd if=sdcard/new_boot.img of=dev/block/platform/.../by-name/boot
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).

Перезагружаем девайс. Если телефон загрузился, то все сделано правильно, если - нет, то читаем инструкцию внимательней и пробуем снова.

Для отката в случае неудачи используем наш оригинальный boot.img, который надо было оставить на карте памяти. Для отката в терминале набираем:

Su dd if=sdcard/boot.img of=dev/block/platform/.../by-name/boot
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).

Эпилог

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

Теги: android, android development, android os, kernel, ядра, кастомные прошивки

В Android возможно встроить различные скрипты и твики которые начнут работать еще в процессе загрузки системы, для это нужна поддержка ядром init.d, но как ее добавить? Очень просто!

Более детально про init.d можете прочитать в wiki , если коротко, то с помощью данной системы инициализации, можно улучшить с помощью скриптов скорость работы 3G интернета, продлить время работы устройства от одного заряда аккумулятора, влиять на работу процессора и многое другое. Скрипты можно найти в интернет…

Что необходимо чтобы добавить поддержку init.d в Android?

Способ 1. ОС Windows

  1. Компьютер на ОС Windows (7/8/10)
  2. Ядро boot.img
  3. Скачать и распаковать архив с утилитой Android Image Kitchen
  4. Скачать и установить Notepad ++

Способ 2. ОС UBUNTU (Linux)

  1. Компьютер с ОС UBUNTU
  2. Ядро boot.img от вашего смартфона или планшета Android

Инструкция как в ядро Android добавить поддержку init.d

Способ 1. ОС Windows

1. Ядро boot.img поместить рядом в папку Android Image Kitchen

2. Перетянуть ядро на BAT-скрипт unpackimg.bat , после чего ядро будет разобрано

3. Открыть папку ramdisk и найти файл init.rc , после чего открыть его через Notepad ++

Добавить после service bootanim /system/bin/bootanimation …. следующие стороки:

# Execute files in /etc/init.d during boot
service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d class late_start user root group root oneshot

6. Запустить Bat-скрипт repackimg.bat после чего будет созданно новое ядро image-new.img

Способ 2. ОС Ubuntu

Подготовка

Установим пакет встраивающий открытие терминала в файловом менеджере

1 . Открываем терминал и вводим следующую команду (с версии Ubuntu 15.10 терминал уже встроен в файловый менеджер Nautilus)

Для 32х разрядных систем :

sudo apt-get install nautilus-open-terminal:i386

Для 64х разрядных систем :

Sudo apt-get install nautilus-open-terminal

2 . После чего выполнить команду перезапуска файлового менеджера

Nautilus -q

3 . Установить пакет необходимый для работы с ядром Android

Sudo apt-get install abootimg

В текстовом редакторе Gedit снять галочку с параметра «создание резервной копии»

Работа с ядром

1 . Создайте в папке home (Домашняя папка) папку с любым удобным именем и переместите туда ядро Android - boot.img. (В примере будет указана папка kernel)

2 . Перейдите в папку kernel , в любом пустом месте нажмите правую кнопку мыши и выбрать «Открыть в терминале»

3 . В открывшемся терминале введите команду:

Abootimg -x boot.img

После чего в папке kernel вы увидите что появились новые файлы (ядро распаковано)

4 . Создадим новую папку (назовем ее rw ) внутри папки kernel, в терминале пишем

5 . Пишем команду в терминале для дальнейшей распаковки раздела initrd.img

Zcat ../initrd.img | cpio -i

6 . После чего в папке rw вы обнаружите множество файлов

7 . Найдите и откройте файл init.rc

8 . В конце файла добавьте следующие строки

# Execute files in /etc/init.d during boot service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d class late_start user root group root oneshot

и сохраните файл и выйдете с него


9 . В терминале выполняем сборку файла initrd.img, пишем команду

Find . | cpio -o -H newc | gzip > ../initrd.img

10 . Возвращаемся обратно в папку kernel, для этого в терминале пишем

11 . Собираем ядро Android с внесенными изменениями

Abootimg --create boot.img -k zImage -r initrd.img

и после еще одну команду

Abootimg --create boot.img -f bootimg.cfg -k zImage -r initrd.img

Если получаете ошибку что ядро стало большим:

boot.img: updated is too big for the Boot Image

тогда собираем с такой командой

Abootimg --create boot.img -k zImage -r initrd.img abootimg --create boot.img -f bootimg.cfg -k zImage -r initrd.img -c "bootsize=размер_что_в_ошибке"

Ядро Android с поддержкой init.d собрано! Далее вам необходимо прошить!

Как проверить поддерживает ли ядро init.d?

1. Установите Busybox
2. Через любой терминал (с помощью ПК или приложение) введите команду:

grep busybox /init.rc

3. Если появиться ответ со строкой:

service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d

Значит все работает как надо, ядро поддерживает init.d

Где должна быть создана папка init.d в Android для добавления скриптов?

1 . Скачайте приложение

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

Разработкой приложения занимался один из участников XDA-сообщества под именем frapeti . Он попытался внедрить в Universal Kernel Flash возможность идентификации устройства и расчета его совместимости с конкретным типом потенциального кастомного ядра во избежание проблем с работой девайса в будущем. Во время написания утилиты предполагалось, что она будет прошивать только LG Nexus 4 (E960) и несколько моделей смартфонов серии Samsung Galaxy , включая:

  • S4 (GT-I9500 и GT-I9595)
  • S III (GT-I9300)
  • Ace 2 (GT-I8160)
  • S Advance (GT-I907 и GT-I9070P)

Производимые на тот момент кастомные прошивки базировались на уже выпущенных в свет версиях Android , начиная от Gingerbread и заканчивая Jelly Bean . Сейчас frapeti работает над расширением клиентской базы приложения, внедряя поддержку других смартфонов на платформе Android .

Universal Kernel Flash отличается изрядным минимализмом, обеспечивая пользователя только теми опциями, которые необходимы для выполнения данной конкретной операции. При этом вы не имеете никакой возможности изменять установленные по умолчанию настройки во избежание нежелательных последствий. Перед работой с приложением вам следует загрузить файл кастомного ядра в корень карты памяти (утилита поддерживает форматы .bin , .md5 и .img ). Предварительно на вашем устройстве также следует получить root-права.

После установки и запуска утилита идентифицирует, производится ли управление от имени суперпользователя, и если да, то на экране появится основное окно приложения. В верхней части экрана будут показаны данные о модели вашего устройства и текущая версия Android . Ниже расположена кнопка выбора сохраненного на девайсе файла кастомного ядра. После добавления файла приложение проанализирует и выдаст его основные характеристики. Если выбранное вами ядро окажется не поддерживаемым вашим устройством, высветится предупреждение о том, что его установка может быть нежелательной. Если же вы хотите установить именно это ядро на свой страх и риск, вам останется лишь игнорировать предупреждение и нажать на конопку ‘Flash Kernel Image ’, после чего приложение самостоятельно начнет установку ядра. После завершения процедуры следует перезагрузить устройство, чтобы убедиться в том, что система сможет стабильно запуститься уже с установленного вами ядра.

ОПЕРАЦИЯ НА СЕРДЦЕ

ВЫБИРАЕМ КАСТОМНОЕ ЯДРО ДЛЯ СВОЕГО ANDROID-АППАРАТА

информация из журнала ][акер

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

CUSTOM KERNEL

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

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

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

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

ОПТИМИЗАЦИИ

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

1. Сборка с помощью компилятора Linaro GCC с агрессивными опциями оптимизации. Писк сезона, используется почти во всех ядрах. Особую популярность этот метод получил после того, как организация Linaro с помощью каких-то непонятных синтетических тестов продемонстрировала 400%-й (!) прирост производительности Android, собранного с помощью своего компилятора. В реальных условиях эффективность Linaro GCC несколько ниже, но польза от него все же ощутима, так как он реально подгоняет код под особенности архитектуры ARMv7 и, если судить по личному опыту, не приносит никаких проблем в стабильность работы ни ядра, ни приложений.

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

3. Активация более эффективных внутренних механизмов, появившихся в последних ядрах Linux. Сюда можно отнести SLQB аллокатор памяти, который, по мнению некоторых разработчиков, может быть более эффективным, чем SLUB, однако никаких экспериментальных подтверждений этому нет. Такой аллокатор используется в ядре GLaDOS для Nexus 7.

Многие разработчики любят изменять стандартный алгоритм контроля насыщения TCP (TCP Congrestion control), который регулирует размер TCP-окна на основе множества параметров, чтобы сделать поток пакетов более ровным и достичь наивысшей скорости передачи данных. Начиная с версии 2.6.19, ядро Linux по умолчанию использует эффективный алгоритм CUBIC, который также обычно применяется и в стандартных ядрах Android. Проблема только в том, что CUBIC эффективен в проводных сетях с высокой скоростью передачи данных, тогда как для 3G- и Wi-Fi-сетей гораздо лучшим выбором будет алгоритм Westwood+. Именно этот алгоритм используется в ядрах Leankernel для Galaxy Nexus и faux123 для Nexus 7, a franko.Kernel для Galaxy S II и Galaxy Nexus так и вообще включает в себя весь набор доступных алгоритмов. Просмотреть их список и выбрать нужный можно с помощью следующих команд:

sysctl net.ipv4.tcp_available_congestion_control sysctl -w net.ipv4.tcp_congestion_control=westwood

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

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

Noop (No operation) - так называемый не-планировщик. Простая FIFO очередь запросов, первый запрос будет обработан первым, второй вторым и так далее. Хорошо подходит для твердотельной памяти и позволяет справедливо распределить приоритеты приложений на доступ к накопителю. Дополнительный плюс: низкая нагрузка на процессор в силу ну очень простого принципа работы. Минус: никакого учета специфики работы девайса, из-за чего могут возникнуть провалы производительности.

SIO (Simple I/O) - аналог планировщика Deadline без учета близости секторов друг к другу, то есть разработанный специально для твердотельной памяти. Две главные изюминки: приоритет операций чтения над операциями записи и группировка операций по процессам с выделением каждому процессу кванта времени на выполнение операций. В смартфонах, где важна скорость работы текущего приложения и преобладание операций чтения над записью, показывает очень хорошую производительность. Доступен в Leankernel, ядре Matrix для Nexus 4 и SiyahKernel.


ROW (READ Over WRITE) - планировщик, специально разработанный для мобильных устройств и добавленный в ядро всего несколько месяцев назад. Основная задача: первоочередная обработка запросов чтения, но справедливое распределение времени и для запросов записи. Считается лучшим на данный момент планировщиком для NAND-памяти, по умолчанию используется @_Leankernel и Matrix.

Стоит сказать, что почти все стандартные прошивки и половина кастомных до сих пор используют ядро со стандартным для 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, в который следует записать О для отключения или 1 для включения. Повторюсь, что использовать эту возможность не рекомендуется.

РАЗГОН, ВОЛЬТАЖ И ЭНЕРГОСБЕРЕЖЕНИЕ

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

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

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

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

SmartAssV2 - переосмысление алгоритма Interactive с фокусом на сохранение батареи. Основное отличие в том, чтобы не дергать процессор на высокие частоты в случае

кратковременных всплесков нагрузки, для которых хватит и низкой производительности процессора. По умолчанию используется в ядре Matrix.

InteractiveX - тюнингованный алгоритм Interactive, главная особенность которого в залочке процессора на минимальной указанной пользователем частоте и обесточивании второго ядра процессора во время отключения экрана. По умолчанию используется в Leankernel.

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

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

ИНТЕРФЕЙСЫ УПРАВЛЕНИЯ

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

ColorControl и GammaControl позволяют управлять параметрами цветопередачи. Нужно это для того, чтобы отрегулировать не всегда правильную передачу цветов на экране (например, сделать черный черным) или сделать цвета более мягкими и приятными глазу.

SoundControl. Можно использовать для того, чтобы сделать Boost звука в том случае, если он слишком тихий.

TempControl. Позволяет регулировать максимальное значение датчика температуры (от 50 до 90 градусов), отключающего SoC при перегреве. Полезно для экспериментов с разгоном.

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

КАК УСТАНОВИТЬ?

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


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

Leankernel

Ядро для Galaxy Nexus, Nexus 7 и Galaxy S III. Основной акцент при разработке делается на простоту и скорость работы. Алгоритм энергосбережения: lnteractiveXV2, планировщик I/O: ROW, все перечисленные выше интерфейсы управления, поддержка Fast USB charge, Swap и zram, гибкие возможности разгона CPU и GPU. Одно из лучших ядер. Настраивается с помощью Trickster MOD.

qoo.ql/FQLBI . goo.ql/ZcwA
Ядро для Nexus S и Nexus 4. Простое и не-перегруженное ядро. Поддержка разгона CPU и GPU, GammaControl, Fast USB Charge, Sweep2wake, планировщики I/O: SIO, ROW и FIOPS. Твики производительности. Настраивается с помощью Trickster MOD.

Bricked-Kernel

qoo.ol/kd5F4 . aoo.ol/eZkAV
Простое и неперегруженное ядро для Nexus 4 и НТС One X. Оптимизации для Snapdragon S4 и NVIDIA Tegra 3, переработанный режим энергосбережения для Tegra 3, возможность разгона, алгоритм энергосбережения: тюнингованный OnDemand (доступен и Interactive).

SiyahKernel

Ядро для Galaxy SII и 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.

Несколько интересных аддонов

ДОБАВЛЯЕМ В ЯДРО НОВЫЕ ФУНКЦИИ

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

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

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

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

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

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


Похожие статьи