В 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
- В Windows 10 выберите «Настройки»> «Обновление и безопасность»> «Для разработчиков»> «Включить режим разработчика».
- Теперь перейдите в Панель управления> Программы> Включить или выключить функции Windows> включить Подсистему Windows для Linux.
- Перезагрузите компьютер.
- Запустите подсистему Linux и дайте ей пройти процесс загрузки. Установите пароль и не теряйте его.
- Теперь перейдите в магазин приложений Windows и загрузите Ubuntu.
- Запустите Ubuntu на рабочем столе Windows 10, и он запросит имя пользователя и пароль.
- В Ubuntu запустите собственный терминал и введите следующую команду: apt-get update
- Это продолжит обновлять все репозитории для приложений и зависимостей.
- Далее в терминале введите: sudo apt-get install -y build-essential пакет ядра libncurses5-dev bzip2
- Чтобы проверить правильность установки всех зависимостей, введите «gcc» в терминале (без кавычек).
- Если «gcc» уже установлен, вы должны увидеть «gcc: fatal error: no input file»
- Теперь вы можете набрать «make» в терминале. Если «make» уже установлен, вы должны увидеть «make: *** не указана цель и не найден make-файл». стоп.»
- Затем введите «git», и если «git» уже установлен, вы должны увидеть кучу основных команд git.
- Теперь нам нужны некоторые наборы инструментов (есть несколько типов, включая GCC, Linaro и несколько пользовательских). Некоторым устройствам могут потребоваться разные наборы инструментов, например, не все ядра устройств будут загружаться или компилироваться с GCC.
Для устройств ARM
Мы будем использовать GCC 4.7 для этого.
- Откройте терминал Linux и введите: ядро mkdir
- Теперь наберите: cd kernel
- (это не обязательно должно быть «ядро», это для простоты, вы можете назвать его как угодно).
- Теперь введите: 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). Вы должны прочитать весь учебник, но сводка шагов выглядит следующим образом:
- Поместите zImage в корень (dtb и / или dtbo также должны указывать здесь для устройств, которые требуют пользовательских, каждое будет иметь запасной вариант к оригиналу, если не включено)
- Поместите все необходимые файлы ramdisk в / ramdisk и модули в / modules (с полным путем, например / modules / system / lib / modules)
- Поместите все необходимые файлы патчей (обычно это частичные файлы с командами) в / patch
- Измените anykernel.sh, чтобы добавить имя вашего ядра, расположение загрузочного раздела, разрешения для включенных файлов ramdisk и использовать методы для любых необходимых изменений ramdisk (при желании также поместите файлы баннеров и / или версий в корневой каталог, чтобы они отображались во флэш-памяти)
- `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`
Другой доступный метод — распаковка boot.img из того же ПЗУ (например, CM, TouchWiz, EMUI и т. Д.) И той же версии Android. Затем вы поменяете местами Zimage. Опять же, это действительно сложный процесс, и вы должны прочитать точное руководство, но краткое изложение шагов:
- Разархивируйте.
- Либо используйте командную строку «unpackimg», либо просто перетащите изображение. Это разделит изображение и распакует виртуальный диск в подкаталог.
- Измените виртуальный диск, как вам нравится.
- Пакетный сценарий repackimg не требует ввода и просто объединяет ранее разделенный zImage с вновь упакованным модифицированным виртуальным диском, используя всю исходную информацию об изображении (которая также была разделена и сохранена).
- Пакетный сценарий очистки сбрасывает папку в исходное состояние, удаляя каталоги 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.