Если вы когда-либо задавались вопросом «как собрать ядро Android», это руководство для вас. Создание собственного ядра может быть полезным, поскольку оно даст вам большую степень контроля над вашим устройством Android, от процессора, оперативной памяти, графического процессора и даже до батареи.
Это очень практический процесс, который включает в себя множество команд компиляции и консоли, но если вы знакомы с Linux (или хорошо разбираетесь в следующих направлениях), это не должно быть проблемой.
Обратите внимание, что это руководство предназначено для устройств, не принадлежащих Mediatek. У Appual есть руководство по компиляции ядра, специально предназначенное для Android-устройств на базе Mediatek, здесь: Как собрать ядро Android Mediatek из Source
Другие интересные статьи Appual включают в себя:
- Как создать собственное ПЗУ из Android Open Source Project | Pt. 2
- Как вручную оформить тему Android System UI
Если вы строите обычай ядро, вам просто нужно будет клонировать ядро из Git с помощью команд, представленных ниже. Но если вы собираете стандартное ядро, вам нужно знать, где взять исходное ядро из исходного кода (по разным причинам).
Исходные исходники ядра для различных брендов:
- LG
- Samsung
- HTC
- OnePlus
- Motorola
- Sony
Для загрузки ядра либо используйте git clone, либо скачайте файл tarball и распакуйте его.
Вот команда git:
мерзкий клон -b
-ИЛИ ЖЕ-
tar -xvf
Так, в качестве примера, это будет команда, чтобы получить последнее ядро Nexus 6P Nougat 3.10 от Google:
git clone -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ angler
Это должно клонировать репозиторий kernel / msm в папку angler и автоматически извлекать android-msm-angler-3.10-nougat-mr2.
Теперь, поскольку большинство Android-устройств основаны на ARM, нам потребуется использовать компилятор, который будет ориентирован на устройства ARM — это означает, что хост / нативный компилятор не будет работать, если вы не компилируете на другом устройстве ARM. У вас есть несколько вариантов здесь. Вы можете скомпилировать его самостоятельно, если знаете как, используя что-то вроде Crosstool-NG. Кроме того, вы можете скачать готовый компилятор, например, тот, который Google предоставляет для Arm 32-bit и Arm64.
Перед загрузкой готового компилятора вам необходимо знать точную архитектуру вашего устройства, поэтому используйте приложение, такое как CPU-Z, чтобы определить его.
Еще одним популярным набором инструментов будет UberTC, но для любых ядер выше 4.9 вам нужно будет их исправлять, и в первую очередь рекомендуется компилировать с помощью набора инструментов Google.
В любом случае, как только вы определились с набором инструментов, вам нужно его клонировать.
мерзкий клон
Теперь укажите Makefile на ваш компилятор, запустить его из папки toolchain.
- экспорт CROSS_COMPILE = $ (pwd) / bin / —
Пример:
- export CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-
Теперь сообщите Makefile архитектуру вашего устройства.
- экспорт ARCH = экспорт SUBARCH =
Пример:
- экспорт ARCH = arm64 экспорт SUBARCH = arm64
Найдите нужный вам defconfig, перейдя в папку arch // config в исходном коде ядра (например, arch / arm64 / configs).
Затем найдите правильный конфигурационный файл разработчика для ядра, которое вы собираете. Обычно он должен быть в форме _defconfig или _defconfig. Defconfig сообщит компилятору, какие параметры включить в ядро.
Также могут быть найдены общие конфиги Qualcomm, обычно это что-то вроде (msm-perf_defconfig, msmcortex-perf_defconfig).
Сборка ядра
Код:
очистить
сделать mrproper
делать
make -j $ (nproc –all)
Когда эти команды успешны, у вас должен быть файл Image, Image-dtb, Image.gz или Image.gz-dtb в конце.
Если эти команды не сработали, вам может понадобиться указать выходной каталог при создании нового ядра на основе CAF, например:
mkdir -p out
сделать O = out чистым
сделать O = Out mrproper
сделать O = Out
make O = out -j $ (nproc –all)
Если он по-прежнему не хочет работать, что-то сломано — проверьте заголовки или обратитесь к разработчикам ядра.
Если ядро было успешно скомпилировано, вам необходимо его прошить. Есть два различных способа сделать это — вы можете распаковать и перепаковать загрузочный образ, используя либо Android Image Kitchen, либо AnyKernel2.
Также могут быть некоторые нюансы, основанные на конкретных устройствах — вам нужно будет обратиться за помощью к разработчикам вашего устройства, если это так.
Перепрошивка ядра в Android Image Kitchen
Скачать Android Image Kitchen
Извлеките загрузочный образ вашего Android-устройства из последней доступной версии (будь то стандартный или пользовательский ROM).
Теперь распакуйте изображение, используя этот код:
unpackimg.sh .img
Затем найдите файл zImage и замените его на скомпилированный образ ядра — переименуйте его в то, что было в образе загрузки.
Теперь запустите этот код, чтобы упаковать образ:
repackimg.sh
Теперь вы можете прошить новый загрузочный образ, используя fastboot, TWRP и т. Д.
Перепрошивка ядра в AnyKernel2
Загрузите последнюю версию AnyKernel2
Примените этот патч, чтобы очистить все демонстрационные файлы.
wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff
патч -p1 < addb6ea860aab14f0ef684f6956d17418f95f29a.diff
rm addb6ea860aab14f0ef684f6956d17418f95f29a.diff
Теперь поместите образ вашего ядра в корень файла и откройте anykernel.sh, чтобы изменить эти значения:
- строка: имя вашего ядра
- название#: Список всех кодовых имен вашего устройства (из /system/build.prop: ro.product.device, ro.build.product)
- блок: Путь вашего загрузочного образа в вашем fstab. Fstab может быть открыт из корня вашего устройства, и он будет выглядеть примерно так: https://android.googlesource.com/dev…r/fstab.angler
Первый столбец — это значение, которое вы хотите установить для блока.
Теперь повторно заархивируйте ядро и прошейте его в AnyKernel2:
zip -r9 kernel.zip * -x README.md kernel.zip
Имейте в виду, что многие ядра CAF включают скрипт Python, который вызывает -Werror, что в основном приводит к тому, что ваша сборка выдает ошибки при малейших ошибках. Поэтому для более высоких версий GCC (которые включают больше предупреждений) вам, как правило, нужно внести изменения в Makefile:
diff --git a / Makefile b / Makefile
индекс 1aaa760f255f..bfccd5594630 100644
--- а / Makefile
+++ б / Makefile
@@ -326,7 +326,7 @@ include $ (srctree) /scripts/Kbuild.include
AS = $ (CROSS_COMPILE) как
LD = $ (CROSS_COMPILE) ld
-REAL_CC = $ (CROSS_COMPILE) gcc
+CC = $ (CROSS_COMPILE) gcc
CPP = $ (CC) -E
AR = $ (CROSS_COMPILE) ar
NM = $ (CROSS_COMPILE) нм
@@ -340,10 +340,6 @@ DEPMOD = / sbin / depmod
PERL = Perl
CHECK = разреженный
-# Используйте обертку для компилятора. Эта обертка сканирует на новые
-# предупреждения и вызывает остановку сборки при их обнаружении.
-CC = $ (srctree) /scripts/gcc-wrapper.py $ (REAL_CC)
-
CHECKFLAGS: = -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
-Wbitwise -Wno-return-void $ (CF)
CFLAGS_MODULE =
Использование более высокого набора инструментов GCC (5.x, 6.x, 7.x или даже 8.x) потребует от вас обнуления сценария оболочки GCC, как описано выше, и использования унифицированного заголовочного файла GCC (выберите следующее, если у вас есть include /linux/compiler-gcc#.h файл):
3.4 / 3.10: https://git.kernel.org/pub/scm/linux…9bb8868d562a8a
3,18: https://git.kernel.org/pub/scm/linux…9f67d656b1ec2f
Даже если вы получаете много предупреждений, их не нужно исправлять (как правило).
Ваше ядро собрано и готово к работе!