Как собрать модуль ядра для android

Как собрать модуль ядра для android

Этот материал не претендует на абсолютную истину, может быть, что-то можно сделать проще и быстрее. Автор как знает, так и делает. Кроме того он не является большим экспертом в области nix-систем. Всё, что написано ниже, найдено на просторах интернета, в большинстве своём на не русскоязычных форумах, систематизировано и изложено на родном для автора языке — русском.

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

Сообщение отредактировал PaWill — 08.03.16, 14:54

Часть 1. Необходимые инструменты и исходники

Для компиляции ядра нам потребуется nix-подобная операционная система. Я использовал Ubuntu 10.04 LTS — Long-term support 32-bit, которую установил на виртуальную машину VMware Workstation. Где всё это добро скачать/купить, как установить мы здесь обсуждать не будем. Если вы это не смогли сделать самостоятельно или с помощью гугла, то читать эту статью для вас ещё рано (или уже поздно). 🙂
И так, у нас всё установлено и работает. Теперь проверим все ли необходимые компоненты присутствуют в системе, возможно какие то пакеты придётся доустановить.
Запускаем терминал:

В терминале вводим следующую команду [1]:

Судя по последней строке у меня все пакеты на месте:

У вас, вероятней всего, не будет важного пакета — sun-java6-jdk on Ubuntu 10.04 (Lucid). Для его автоматической загрузки нужно в адреса репозитория добавить дополнительные ссылки. Введите в терминале:

После того как всё скачается и установится опять команда [1] пока не будет ошибок. Будем считать что с Ubuntu покончили.

Теперь нам потребуются собственно сами исходники ядра. Их можно найти на http://opensource.samsung.com/. В строке поиска вводим «I9000» и получаем:

Нас интересует JPX GT-I9000_OpenSource_Froyo_update2.zip (211 МБ), делаем как на скрине и жмём «Continue».

Ещё нам потребуется кросс-компилятор, которым будем собирать ядро:
http://www.codesourcery.com/sgpp/lite/arm/. nux-gnu.tar.bz2 (80 МБ)

И последнее что потребуется — это initramfs.cpio. Я выдрал его из JS8. Как это сделать расскажу как-нибудь отдельно.
JS8_initramfs.tar ( 2.64 МБ )

Пока всё, продолжение следует.

Сообщение отредактировал PaWill — 19.03.11, 19:38

Часть 2. Распаковка исходников

Всё что вы скачали будет находится в каталоге /home/имя_пользователя/Загрузки. У меня этот путь выглядит как:

Источник

Как собрать модуль ядра для android

В: Могу ли я собрать ядро если производитель не выложил исходники для моего девайса?
O: Ответ на ваш вопрос неоднократно обсуждался, например «Сборка ядра не имея исходников», вы сможете собрать ядро, но придется приложить больше усилий.

В: Слышал, что в данной ветке присутствуют телепаты, гадалки, медиумы и ясновидцы, которые могут дать полный и адекватный ответ на не полностью сформулированный вопрос?
O: Эх, к нашему большому сожалению, все вышеперечисленные товарищи ушли на ТНТ и ТВ3. И мы, как и вы, тоже будем надеяться на их скорейшее возвращение в ряды пользователей нашего форума.
А пока, будьте добры: если вы хотите получить адекватный ответ на ваш вопрос, то формулируйте его соответственно.
Например: устройство + платформа + версия ядра / андроид + описание проблемы + действия которые к ней привели (изменение конфигурации, изменение в исходниках, лог терминала и/или logcat) + ой, нечаянно удалил + ой, а не помню что.

Работоспособность магнитометра
Клонирование проекта
Про сборку 9-10 для проца mt6735p (ну и видимо mt6735m)
Добавляем поддержку aptX кодека в ALPS
Сборка модулей вместе с ядром без альпсов. Инструкция для 8.1 mt6580 (версия ядра 3.18.79)
Гайд, для тех кто хочет достать прошивку тача GSLXXXX
Инструкция по сборке ядра Android (лучшая на 4pda) | или скачать Kernel_building.docx.zip ( 90.32 КБ )
Мануал по сборке ядра.
Сборка отдельного модуля / либа / бина.
Пояснения к сборке Андроид 5.х
Инструкция по сборке ядра без использования ПК
Игнорирование ошибок сборки
Мануал по портированию исходного кода ядра 4.2.х -> 4.4.x |
Работа кнопки гарнитуры platform/../../drivers/accdet
Отключение Encryption в Андроид 5.х
Инструкция по добавлению governors & schedulers
Немного по ошибкам сборки
Сборка AOSP с busybox
Компиляция Android 6.0 под Windows в оболчке bash
Перенос стокового dtb на примере mtk67xx
Добавляем поддержку OTA в свою прошивку
Как прикрутить cameracustom от сток 6 на ноугат
Инструкция по восстановлению прошивки тачскрина Synaptics
Инструкция по поднятию тачскринов

В теме нет куратора. Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).
До назначения куратора, по вопросам наполнения шапки, обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.

Сообщение отредактировал derak1129 — 05.08.21, 06:03

Я пока кроме патча биндера не могу ничего сказать 😉 Но патч биндера все знающие видели. Это под СМ11 я так понимаю только. Если посмотреть просто на прошивки от 4.4 видно что там модули не собираются. Соответственно вопросы возникают. Исходники нет нет да появляются под 4.4. Вопрос: Кто то еще пытался совместить исхи 4.2 под 4.4 ?

Сообщение отредактировал Cheshkin — 25.06.14, 14:15

Собственно, для чего создавалась эта тема:
В сети уже есть в открытом доступе исходники Android 4.4 от mediatek c ядром версии 3.4.67 Я встречал их по крайней мере на три платформы — 6582, 6592 и новая, еще не вышедшая в свет платформа 6571. Вот (кликабельно) одно из хранилищ на котором их можно найти.
Большинство аппаратов на платформе Mediatek имеют версию ядра 3.4.5 адаптированную под JB 4.2.2 и на многие аппараты уже есть предоставленные производителем либо собранные умельцами исходники соответственно версии 3.4.5. Так вот, в первую очередь интересует перенос своих драйверов в дерево исходников версии 3.4.67 и сборка рабочего ядра с последующим запуском Android KitKat. Во вторую очередь — портирование между платформами, то есть при имеющихся исходниках версии 3.4.67 от mt6582 и исходниках mt6589 версии 3.4.5 собрать ядро версии 3.4.67 для mt6589

Как это сделать (Мое мнение, на правильность не претендую) Перенести папки /mediatek/custom/mtxxxx, /mediatek/custom/проект, mediatek/config/mtxxxx, /mediatek/config/проект и /mediatek/platform/mtxxxx из исходников своего аппарата в исходники из которых будем собирать новое ядро, исправить все ошибки возникающие при компиляции и запустить ядро на телефоне.
Собранное мной по такому алгоритму ядро запускаться категорически отказалось, теперь надеюсь решить вопрос коллегиально.

Я так понимаю это есть как раз сборка ядра вместе с рам диском ?. Но это можно пока упустить. Рам диск это отдельная история

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

. Без его правильного переноса прошивка не стартанет. Ессно как его из проекта правильно перенести ?

Сообщение отредактировал Cheshkin — 26.06.14, 07:39

  • В этой теме обсуждается портирование конфигов и драйверов своего аппарата MTxxxx в ядро последней версии.
  • В этой теме не обсуждаются вопросы не относящиеся непосредственно к данной теме(настройка рабочего окружения, поиск драйверов для своего аппарата, вопросы вроде «Что значит Undeclared function?» и так далее, то есть тема создана для людей уже умеющих хотя бы собрать ядро из готовых исходников и разобраться c простыми ошибками при компиляции)
  • В этой теме не стол заказов — здесь Вам помогут советом, но основную работу Вам придется делать самим.
  • Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения.

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

А пока, будьте добры: если вы хотите получить адекватный ответ на ваш вопрос, то формулируйте его соответственно.
Например: устройство + платформа + версия ядра / андроид + описание проблемы + действия которые к ней привели (изменение конфигурации, изменение в исходниках, лог терминала и/или logcat) + ой, нечаянно удалил + ой, а не помню что.

Источник

Как собрать модуль ядра для android

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

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

Подготовка

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

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

Компиляция

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

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

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

export ARCH=arm
export CROSS_COMPILE=prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
export TARGET=out

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

Далее компилируем конфигурационный файл, итогом компиляции будет файл $TARGET/.config

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

Далее начинаем компиляцию самого ядра

make O=$TARGET ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -j4

Т.е. такая же команда как и выше но без указания конфигурационного файла.
-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

    Итак, в прошлый раз я создал директорию android в своём домашнем каталоге, но сейчас передумал и назвал её CyanogenMod:

    / && 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 «you@example.com»
    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, что некоторые части проекта мне не нужны. Вы тоже не хотите видеть в своей будущей прошивке дефолтный браузер? Пожалуйста:

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

    Сборка прошивки на 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, запустим процесс выкачивания исходного кода на свой компьютер:

    /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 (хотя, это полезная штука) и прочее, без чего сборка не состоится:

    Далее выполняем скрипт envsetup.sh, который добавляет в систему новые команды — croot, brunch, breakfast и другие:

    /CyanogenMod
    source build/envsetup.sh

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

    Команда croot делает только одно — телепортирует вас в корень директории с исходниками, в моем случае —

    /CyanogenMod. Команда breakfast подготавливает окружение для дерева устройства:

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

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

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

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

    Обсуждение

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

    Источник

    Читайте также:  Как проверить права рута андроид
    Оцените статью