Как собрать ядро ​​Android на Windows 10 —

В Appual есть несколько замечательных руководств по разработке под Android, таких как Как создать пользовательское ПЗУ из Android Open Source Project, но эти руководства обычно ориентированы на чистую среду сборки Linux.

В этом руководстве мы покажем вам, как собрать ядро ​​Android на Windows 10 — да, мы все еще будем использовать среду сборки Linux, но это будет подсистема Linux в Windows 10. Так что, если вы Windows 10 Пользователь, заинтересованный в разработке для Android, внимательно следуйте нашему руководству.

В этом руководстве мы специально изучим, как собрать ядро ​​для устройств ARM и MediaTek, добавим функции и ознакомимся с основными принципами использования Git.

Требования

  • Windows 10 x64 (с обновлением Fall Creator)

Настройка среды Linux

  1. В Windows 10 выберите «Настройки»> «Обновление и безопасность»> «Для разработчиков»> «Включить режим разработчика».
  2. Теперь перейдите в Панель управления> Программы> Включить или выключить функции Windows> включить Подсистему Windows для Linux.
  3. Перезагрузите компьютер.
  4. Запустите подсистему Linux и дайте ей пройти процесс загрузки. Установите пароль и не теряйте его.
  5. Теперь перейдите в магазин приложений Windows и загрузите Ubuntu.
  6. Запустите Ubuntu на рабочем столе Windows 10, и он запросит имя пользователя и пароль.
  7. В Ubuntu запустите собственный терминал и введите следующую команду: apt-get update
  8. Это продолжит обновлять все репозитории для приложений и зависимостей.
  9. Далее в терминале введите: sudo apt-get install -y build-essential пакет ядра libncurses5-dev bzip2
  10. Чтобы проверить правильность установки всех зависимостей, введите «gcc» в терминале (без кавычек).
  11. Если «gcc» уже установлен, вы должны увидеть «gcc: fatal error: no input file»
  12. Теперь вы можете набрать «make» в терминале. Если «make» уже установлен, вы должны увидеть «make: *** не указана цель и не найден make-файл». стоп.»
  13. Затем введите «git», и если «git» уже установлен, вы должны увидеть кучу основных команд git.
  14. Теперь нам нужны некоторые наборы инструментов (есть несколько типов, включая GCC, Linaro и несколько пользовательских). Некоторым устройствам могут потребоваться разные наборы инструментов, например, не все ядра устройств будут загружаться или компилироваться с GCC.

Для устройств ARM

Мы будем использовать GCC 4.7 для этого.

  1. Откройте терминал Linux и введите: ядро ​​mkdir
  2. Теперь наберите: cd kernel
  3. (это не обязательно должно быть «ядро», это для простоты, вы можете назвать его как угодно).
  4. Теперь введите: git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

Для устройств ARM 64

Вам нужен 64-битный компилятор ядра для устройств ARM 64, например, aarch64.

Получение исходных файлов для вашего устройства

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

Вот пример исходного кода ядра Git.

В верхнем левом углу вы должны увидеть «Ветвь: Завершено хххх».

Существуют разные версии ядра / проекта, которые обычно разделяются на «Testing», «Beta», «Final Release» и т. Д.

Папки ядра обычно следующие:

  • / арка / ARM / конфиги: Содержит различные файлы конфигурации для устройства, такие как регуляторы и т. Д.
  • / Выход / арка / рука / загрузки /: Здесь будет храниться zimage.
  • build.sh: Скрипт, который упростит процесс сборки.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2Обычно это набор инструментов, размещенный в исходном коде ядра, что облегчает его поиск.

Вам нужно скачать исходный код вашего ядра.

Откройте терминал Linux и убедитесь, что вы находитесь в папке ядра, которую вы ранее создали (cd kernel).

Затем введите в терминале: «git clone« URL-адрес ядра github »-b« имя ветви »

Например: «git clone https://github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW»

Сборка ядра

Чтобы сделать это проще, вы можете перейти к местоположению в проводнике. Это должен быть / home / ID пользователя / kernel (или как бы вы ни назвали папку ядра).

Вы должны увидеть две папки внутри, для набора инструментов и исходного кода ядра. Зайдите в исходную папку ядра.

Для устройств ARM

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

#! / Bin / Баш
экспорт ARCH = рука
экспорт CROSS_COMPILE =
вывод mkdir
make -C $ (pwd) O = вывести «имя defconfig и вариант при необходимости»
make -j4 -C $ (pwd) O = output

Вот краткий обзор того, что делают эти команды, чтобы облегчить это в будущем.

  • #! / Bin / Баш: Сообщает сценарию выполнить команду оболочки
  • экспорт ARCH = arm: Определение типа архитектуры ядра (например, arm64 и т. Д.)
  • экспорт CROSS_COMPILE = : Найдите, где находится цепочка инструментов. Это должно соответствовать точному пути, и черта в конце действительно обязательна.
  • вывод mkdir: Это создает каталог для сохранения скомпилированного zimage
  • make -C $ (pwd) O = output : Определение defconfig для руководства компиляцией ядра.
  • make -j4 -C $ (pwd) O = output: Когда начинается процесс сборки, -j # сообщает, как быстро попробовать и скомпилировать. Как правило, вы устанавливаете этот номер в соответствии с вашим процессором. Например, установка -j32 на бюджетном процессоре, вероятно, вызовет значительную нестабильность.
  • cp output / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage: Для перемещения изображения на второй путь.

Другой пример:

#! / Bin / Баш
экспорт ARCH = рука
экспорт CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi-
вывод mkdir
make -C $ (pwd) O = вывод msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig
make -j4 -C $ (pwd) O = output
cp output / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage

Для устройств ARM 64

#! / Bin / Баш
экспорт ARCH = arm64
export CROSS_COMPILE = "путь к вашей цепочке инструментов" (он должен заканчиваться чем-то вроде "nameofarch-something-")
вывод mkdir
make -C $ (pwd) O = вывести «имя defconfig и вариант при необходимости»
make -j4 -C $ (pwd) O = output

Для устройств Mediatek (MTK)

#! / Bin / Баш
export CROSS_COMPILE = "путь к вашей цепочке инструментов" (он должен заканчиваться чем-то вроде "nameofarch-something-")
экспорт ARCH = arm ARCH_MTK_PLATFORM =
сделать "имя defconfig и вариант, если необходимо"
сделать -j4

Когда вы выполнили шаги, необходимые для вашей архитектуры ядра, вы можете ввести в терминале: sudo bash build.sh

Затем вы введете свой пароль пользователя, и начнется процесс компиляции.

Это может занять некоторое время, но обычно не очень долго, компиляция ядра не похожа на компиляцию всего Android ROM. Это действительно зависит от процессора — например, AMD Phenom X4 3,4 ГГц с 8 ГБ ОЗУ должна компилироваться от 10 до 5 минут.

Когда он закончится, он должен уведомить вас с сообщением типа «zimage is ready».

Устройства ARM и ARM64

Перейдите в «/ Output / arch / arm / boot /», чтобы найти свой zimage.

Mediatek Devices

Перейдите в «/ arch / arm / boot /», чтобы найти изображение.

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

Важное замечание: Если вы собираетесь снова скомпилировать, рекомендуется ввести команды make clean и make mrproper до того, как вы снова начнете процесс компиляции.

Создание ядра загрузки

Есть два варианта для вас на выбор.

Вы можете использовать метод anykernel (как определено пользователем XDA @ osm0sis в этом потоке XDA). Вы должны прочитать весь учебник, но сводка шагов выглядит следующим образом:

  1. Поместите zImage в корень (dtb и / или dtbo также должны указывать здесь для устройств, которые требуют пользовательских, каждое будет иметь запасной вариант к оригиналу, если не включено)
  2. Поместите все необходимые файлы ramdisk в / ramdisk и модули в / modules (с полным путем, например / modules / system / lib / modules)
  3. Поместите все необходимые файлы патчей (обычно это частичные файлы с командами) в / patch
  4. Измените anykernel.sh, чтобы добавить имя вашего ядра, расположение загрузочного раздела, разрешения для включенных файлов ramdisk и использовать методы для любых необходимых изменений ramdisk (при желании также поместите файлы баннеров и / или версий в корневой каталог, чтобы они отображались во флэш-памяти)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

Другой доступный метод — распаковка boot.img из того же ПЗУ (например, CM, TouchWiz, EMUI и т. Д.) И той же версии Android. Затем вы поменяете местами Zimage. Опять же, это действительно сложный процесс, и вы должны прочитать точное руководство, но краткое изложение шагов:

  1. Разархивируйте.
  2. Либо используйте командную строку «unpackimg», либо просто перетащите изображение. Это разделит изображение и распакует виртуальный диск в подкаталог.
  3. Измените виртуальный диск, как вам нравится.
  4. Пакетный сценарий repackimg не требует ввода и просто объединяет ранее разделенный zImage с вновь упакованным модифицированным виртуальным диском, используя всю исходную информацию об изображении (которая также была разделена и сохранена).
  5. Пакетный сценарий очистки сбрасывает папку в исходное состояние, удаляя каталоги split_img + ramdisk и все новые упакованные файлы ramdisk или образы.

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

Добавление функций в ваше ядро

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

Пример добавления регулятора приведен здесь (этот регулятор имеет кодовое название Intellimm).

В первых двух текстовых полях мы видим, что в «arch / arm / configs /» «msm8974_sec_defconfig» и «cm_msm8974_sec_defconfig» были изменены.

Между строками 140 и 141 этих файлов был добавлен этот текст: «CONFIG_CPU_FREQ_GOV_INTELLIMM = y»
(Эта строка предназначена для включения Intellimm при компиляции ядра)

Та же самая техника применяется к другим текстовым полям (что было добавлено и удалено, и его местоположение)

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

Итак, чтобы подвести итог, коммит позволит вам увидеть все внесенные изменения и все остальное!

Общие советы и хитрости

Как изменить имя и версию ядра:

Простой метод:

Отредактируйте эту строку в вашем файле defconfig:

"CONFIG_LOCALVERSION =" - "после - в вашем defconfig

Пример: CONFIG_LOCALVERSION = ”- XenomTW-3.2.6 ″

Передовые методы:

Перейдите к Makefile в корневой папке вашего исходного кода ядра.

Добавьте эти строки:

CONFIG_LOCALVERSION = "nameofyourkernel"
LOCALVERSION = "versionofyourkernel"

НЕ изменяйте строки Version, PatchLevel, Sublevel или Extraversion.

Альтернативный метод:

Перейдите в scripts / mkcompile_h и добавьте эти строки:

LINUX_COMPILE_BY = "nameofyourchoice"
LINUX_COMPILE_HOST = "nameofyourchoice"

Решение проблем PATH:

Если вы столкнулись с ошибкой «Ваш путь правильный?», Попробуйте это в терминале Linux:

"export PATH =" pathtotoolchainlocation "/ bin: $ PATH"

Доступ к вашим папкам Ubuntu из Windows 10

Ваш путь к Ubuntu обычно должен быть:

C: \ Users ”NAME” \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

Но вам не следует редактировать файлы непосредственно из Windows, так как это, как правило, нарушает права на них — вам нужно будет сбросить разрешения из терминала Linux.

Ссылка на основную публикацию