test adv
,

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

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

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

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

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

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

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

Запускаем терминал(Ctrl+Alt+T)

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

Чтобы получить необходимые пакеты прописываем следующие комманды(просто скопируйте весь список и вставьте в терминал с помощью комбинации 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" перед началом компиляции!

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

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

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

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

Последнее изменение:
 
justmax437
justmax437, 7 сентября 2014, 22:15   #   (...)
Кривее инструкции в жизни не видел
Ответить
mc_zz
mc_zz, 8 сентября 2014, 07:58   #   (...)
Напиши лучше.
Ответить
justmax437
justmax437, 8 сентября 2014, 15:15   #   (...)
Да знаешь, была мысль, даже первый топик колонки начал писать, но потом как-то подумал «А нахер оно мне собственно?». Ну и забил на это дело.
__TCAPT__
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 18:28   #   (...)
Что тебе не нравится?
Ответить
justmax437
justmax437, 8 сентября 2014, 18:37   #   (...)
Ну взять хотя бы консольные команды для «настройки ос»
__TCAPT__
Видно что человек до это про Ubuntu максимум от кого-то слышал, но сам опыта использования не имеет. Зачем 20 раз вызывать пакетную систему, когда можно прописать все пакеты один за другим одной коммандой примерно так:
sudo apt-get install git flex zip busybox-static и так далее.

Во вторых — зачем самостоятельно копаться по конфигам и что-то в них править, когда можно просто скачать исходники и применить lunch <кодовое имя устройства> для AOSP-based прошивок или breakfast <кодовое имя устройства> для CM или CM-based прошивок.

В третьих — инструкций по сборке ядер в сети и так навалом. Вполне можно было расписать еще и о том, как например применять к ядрам патчи например от Faux123 или добавлении разгона процессора в acpiclock.c
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 18:44   #   (...)
Я много знаю про убунту, но если установить все это той коммандой, которую написал ты ничего не выйдет, проверено. Иначе я конечно же написал
Ответить
justmax437
justmax437, 8 сентября 2014, 18:59   #   (...)
Ты просто копировал комманду с developer.android.com? Там непонятно зачем в блоке с этой коммандой зачем-то воткнуты лишние слеши между некоторыми пакетами. Зачем не знаю, но если их удалить, то все нормально ставилось по крайней мере на 13.10
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:01   #   (...)
Не, комманды я взял как-раз таки с 4PDA. Лично у меня половина пакетов пропускается, другая половина просто не находится или крашится
Ответить
Neismuhosramska
Neismuhosramska, 8 сентября 2014, 23:38   #   (...)
потому нужна просто опция -y и -f или --force и список пакетов в строчку (если не так не минусуйте, убунтой давно не пользуюсь)
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 18:47   #   (...)
Про разгон я как-раз таки написал. У Фаукса принципиально другой способ разгона, который очень криао работает на нексусе, потом, имеющиеся инструкции или давным давно устарели, или в них применяется Google NDL, или они на английском языке, да и вообще предназначены для сборки ядра и вшития с такового в кастом прошивку
Ответить
justmax437
justmax437, 8 сентября 2014, 19:00   #   (...)
Ну так а зачем еще собирать кастомные ядра, если не для кастомных прошивок?
Ответить
justmax437
justmax437, 8 сентября 2014, 19:02   #   (...)
Под библиотеками фаукса я имел в виду например его звуковую систему. Управление acpi это не все, что у него есть.
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:03   #   (...)
Я знаю)) В моём ядре стоят его патчи на WCD9320.c, правда, модифицированные. Приводить весь список — места не хватит)
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:02   #   (...)
90% кастомных ядер работают только на стоке и Stock-based AOSP прошивках
Ответить
justmax437
justmax437, 8 сентября 2014, 19:03   #   (...)
Эмм… Бред какой.
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:04   #   (...)
CAF ядер мало, только Необадди, да Дориманикс делают
Ответить
justmax437
justmax437, 8 сентября 2014, 19:07   #   (...)
Code Aurora вроде только для Qualcomm чипсетов ядра делают, не? Есть еще много других людей. Те же Exunos4Brothers, AGNi, Blackhawk и прочее. Ядра блекхоук из серии NEXT у меня работали на чем угодно начиная с 4.1 и до 4.4 без пересборки или модификаций.
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:15   #   (...)
Наработки CodeAurora также можно портировать на другой чипсет, к примеру на Exynos, структура похожая
Ответить
erta
erta, 8 сентября 2014, 19:34   #   (...)
Эм, у меня на ноте 10.1 большинство кастомных ядер инсталятся только на сток и его моды…
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:35   #   (...)
А я что пишу?
Ответить
erta
erta, 8 сентября 2014, 19:38   #   (...)
Но с каких пор тачвиз с его кучей хлама в бинарниках стал AOSP или похожим на него?
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:39   #   (...)
AOSP — это исходники
Ответить
erta
erta, 8 сентября 2014, 19:43   #   (...)
Хм, а у меня исходники от циана и самсунга очень сильно отличаются… Очень сильно…
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:48   #   (...)
У циана совершенно другие исходники, основанные на наработках CAF
Ответить
pavel999
pavel999, 8 сентября 2014, 19:42   #   (...)
Блин че к человеку пристаешь главное чтобы работало а не корче-длиннее
Ответить
justmax437
justmax437, 8 сентября 2014, 19:46   #   (...)
Принцип «главное-чтоб работало» в программировании называют индусским кодом. Намек понят?
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:49   #   (...)
Программированием занимаешься?
Ответить
justmax437
justmax437, 8 сентября 2014, 19:52   #   (...)
Java
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 19:53   #   (...)
Я C и C++ изучаю
Ответить
MrBronde
MrBronde, 7 сентября 2014, 23:57   #   (...)
Супер, но есть вопрос.Сначало надо делать на компе, а потом на тел., или на оборот?я ламер и лалка((((
Ответить
CMDR_Sol
CMDR_Sol, 8 сентября 2014, 14:42   #   (...)
Нет, на компе делаешь ядро, а на смарте его прошиваешь
Ответить
vladi_mir_82
vladi_mir_82, 22 ноября 2014, 11:09   #   (...)
У меня планшет с проектором smartq u7. С недавних пор начал задумываться о разгоне GPU, реально ли это сделать? Принцып разработки кастомного ядра под TiOmap устройства тот же? Может кто под заказ этим занимается?
Ответить
erta
erta, 22 ноября 2014, 14:45   #   (...)
Нет.Вам эта инструкция не поможет.
Ответить
IbragiM_99
IbragiM_99, 10 сентября 2014, 19:35   #   (...)
Классно, однозначно +
Ответить
MrBronde
MrBronde, 11 сентября 2014, 10:33   #   (...)
А можешь еще и про прошивки выложить, будет убойно))))
Ответить
Rost
Rost, 8 октября 2014, 13:35   #   (...)
Крутая статья, побольше бы таких от пользователей.
Ответить
id63353490
id63353490, 29 марта 2015, 20:59   #   (...)
Помогите! Не могу получить рамдиск и в папке confings по пути arch / arm / confings, найти Makefile. У меня устройство на МТК6582
Ответить
id185629601
id185629601, 26 мая 2015, 23:22   #   (...)
arch / arm / configs / щите файл кодовое_имя_устройства_defconfig
рамдик можно выковырнуть многими способами из boot.img вашего девайса...
например forum.xda-developers.com/showthread.php?t=2073775



Ответить
Trashartem
Trashartem, 29 мая 2015, 10:34   #   (...)
как для mtk6589 собрать ядро без исходников от производителя
Ответить
NeiLoN
NeiLoN, 29 мая 2015, 10:44   #   (...)
Никак
Ответить
erta
erta, 2 июня 2015, 16:43   #   (...)
Методом подбора драйверов, нужно еще найти правильный кодеген.
Ответить

Добавить комментарий
Если нужно ответить кому-то конкретно,
лучше нажать на «Ответить» под его комментарием