Ошибка при компиляции ядра Linux для Android 11 (R) Beta версии 1 с clang-r383902
Я использую машину Ubuntu 20.04 с последней версией установленных платформенных инструментов и (я считаю) всеми необходимыми зависимостями.
Я создал новый каталог ~/beta1-kernel-coral и в этом каталоге клонировал ядро:
git clone -b android-msm-coral-4.14-r-beta-1 https://android.googlesource.com/kernel/msm/
Я заметил, что используемая версия clang была clang-r383902. Я загрузил этот каталог и извлек его, так что у меня было два отдельных каталога в ~/beta1-kernel-coral: msm и clang-r383902.
Изнутри ~/beta1-kernel-coral/msm я выполнил две команды:
make floral_defconfig
make menuconfig
Затем, используя руководство Натана Чанса из Github, я выполнил следующую команду:
PATH="/home/jherwig/beta1-kernel-coral/clang-r383902/android_prebuilts_clang_host_linux-x86_clang-6443078-10.0/bin:/usr/bin:/usr/bin:${PATH}" make -j$(nproc --all) ARCH=arm64 CC=clang CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=aarch64-linux-android- CROSS_COMPILE_ARM32=arm-linux-androideabi-
Ядро начало компилироваться, пока я не получил следующий результат:
В руководстве Натана он советует использовать:
PATH="<path to clang folder>/bin:<path to 64-bit gcc folder>/bin:<path to 32-bit gcc folder>/bin:${PATH}" \ ...
Поскольку я установил gcc-Multilib, я подумал <path to 64-bit gcc folder>
а также <path to 32-bit gcc folder>
будет в /usr/bin. Когда я печатаюwhich gcc
в терминале я получаю /usr/bin/gcc.
1 ответ
Ядра CAF НЕ являются основными ядрами, и вы не можете их скомпилировать как таковые. Вы должны запустить make distclean и указать выходной каталог для каждой команды make, включая defconfig.
Пример: сделать O=out
Если вы не укажете O=out для каждой команды make, вы столкнетесь с этими ошибками. Значение, присвоенное O, может быть любым, не обязательно, но вы не можете собрать ядро в том же каталоге, что и исходный код.
Измените это:
сделать floral_defconfig
сделать menuconfig
К этому:
сделать floral_defconfig O=out
сделать menuconfig O=out
Постройте его с помощью:
сделать O= вне
Не забудьте сначала сделать distclean в исходном каталоге