Добавляем в ядро андроид драйвера. "Зачем Android мучают"

14.04.2019

Первые кастомные (самодельные) прошивки автор CyanogenMod начал делать для своего HTC Dream . Чуть позже он с удивлением обнаружил положительные отзывы о своем детище, собрал команду энтузиастов . Сейчас его прозвище - почти синоним кастомных прошивок, а работы его команды официально признала Google. Почему другие люди с таким интересом восприняли его эксперименты? Нужно ли эти эксперименты повторять "простому смертному"?

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

В начале своего пути Android была еще одной операционной системой, дающей куда больше свобод, нежели закрытая, хотя и популярная iOS. Это сейчас, в 2013 году она "держит" 80% рынка смартфонов, тогда же, три года назад, Android была еще очень далекой от идеала и лишь немногим опережала iOS в гонке за долей умирающей Symbian .

Кастомные прошивки значительно расширили возможности по настройке и адаптации Android-смартфона под себя. Появились возможности управления самыми глубокими системными функциями: ядром, виртуальной машиной, изменением пользовательских интерфейсов

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

Конечно, некорректно игнорировать другие модификации Android, такие как MIUI, AOSP, AOKP, но на данный момент CyanogenMod по праву считается самой популярной кастомной версией Android.


Изначально кастомные (не заводские, самодельные) прошивки ассоциировались у большинства с "красивостями", изменением не самого удачного интерфейса ранних версий Android. С приходом Android версий 4.х (под кодовыми именами Ice Cream Sandwich, позже Jelly Bean, а теперь KitKat) и новой темы оформления под названием Holo по большему счету пропала необходимость изобретать новый дизайн для ОС - у разработчиков появилась возможность сосредоточиться на расширении ее возможностей.

Если попытаться описать все возможности прошивки CyanogenMod, то это займет несколько страниц простого перечисления отличий от оригинальной версии от Google, поэтому проще будет сказать, что все, что есть в обычной Android OS, есть и там, только в несколько раз больше.

Например, экран блокировки поддерживает установку своих приложений на быстрый запуск, в прошивку встроены все точки APN мобильных операторов, можно устанавливать сторонние темы оформления, очень точно настраивать панель уведомлений (даже то, с какой стороны экрана она должна выпадать). Можно перевести смартфон в планшетный режим, можно вообще отключить программные кнопки и использовать так называемые Pie Controls - кнопки, появлящиеся только если провести пальцем от края экрана к центру. Поддержка режимов дня, профилей пользователя, расширенный контроль виджетов, управление поворотами экрана, возможность получать свежие обновления по воздуху - все перечислить невозможно.

Стоит лишь добавить, что при всем этом прошивка занимает очень мало памяти (к примеру, около 115 Мб кастомной против 600 Мб официальной у Samsung Galaxy Note) и работает достаточно плавно и быстро.

Кастомные ядра

Ядро - сердце операционной системы, оно управляет всей работой аппарата. Так как все устройства имеют свой набор "железа", то и ядра производитель собирает в соответствии с требованиями конкретного аппарата. Некоторые ядра можно устанавливать и в оригинальные прошивки, но этим заниматься все-таки не рекомендуется.

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

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

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

Радиомодуль

Радиомодуль отвечает за все соединения в аппарате: Wi-Fi, Bluetooth, мобильные сети. Бывает, что в его прошивку закрадываются недочеты, из-за которых аппарат плохо ловит сигнал беспроводных сетей или тратит на соединение слишком много заряда аккумулятора. К тому же, кастомная прошивка радиомодуля может давать недокументированные возможности вроде записи звонков напрямую с линии (обычные прошивки радиомодулей не позволяют записывать телефонные разговоры, только включать обычный диктофон во время разговора).

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

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

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

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

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

Для компиляции ядер я использую или 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.

Обсуждение

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

В 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 . Скачайте приложение

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

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

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

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

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

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

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

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

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

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

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

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