Как собрать ядро ​​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 //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» и т. Д.

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

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

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

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

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

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

Сборка ядра

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

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

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

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

 #! / bin / bash export ARCH = экспорт arm CROSS_COMPILE = вывод mkdir make -C $ (pwd) O = output "имя defconfig и вариант при необходимости" make -j4 -C $ (pwd) O = output 

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

  • #! / bin / bash: сообщает скрипту о запуске в команде оболочки
  • export ARCH = arm: определение типа архитектуры ядра (например, arm64 и т. д.)
  • export 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 / bash export ARCH = экспорт arm 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 = вывод данных cp / arch / arm / boot / Image $ ($ / arm / boot / Image) 

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

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

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

 #! / bin / bash export CROSS_COMPILE = "путь к вашей цепочке инструментов" (он должен заканчиваться чем-то вроде "nameofarch-что-") export ARCH = arm ARCH_MTK_PLATFORM = make "имя defconfig и вариант при необходимости" make -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.

Интересные статьи