#linux #linux-kernel #arm #cross-compiling #buildroot
#linux #linux-ядро #arm #перекрестная компиляция #buildroot
Вопрос:
Я пытаюсь скомпилировать ядро Linux версии 5.9.12 с помощью моего набора инструментов buildroot (2020.08.2), и я продолжаю получать ошибку, связанную с libfdt. Я не могу понять, как это исправить, и вот уже несколько часов бьюсь головой о стену.
username@local:~/linux-stable$ make ARCH=arm CROSS_COMPILE=arm-linux- -j64
CALL scripts/atomic/check-atomics.sh
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/piggy.o
CC arch/arm/boot/compressed/fdt_ro.o
In file included from arch/arm/boot/compressed/../../../../lib/fdt_ro.c:2,
from arch/arm/boot/compressed/fdt_ro.c:2:
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c: In function ‘fdt_generate_phandle’:
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c:149:13: error: ‘FDT_MAX_PHANDLE’ undeclared (first use in this function)
149 | if (max == FDT_MAX_PHANDLE)
| ^~~~~~~~~~~~~~~
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c:149:13: note: each undeclared identifier is reported only once for each function it appears in
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c: In function ‘fdt_get_mem_rsv’:
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c:182:13: error: implicit declaration of function ‘fdt64_ld’ [-Werror=implicit-function-declaration]
182 | *address = fdt64_ld(amp;re->address);
| ^~~~~~~~
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c: In function ‘fdt_get_property_by_offset_’:
arch/arm/boot/compressed/../../../../lib/../scripts/dtc/libfdt/fdt_ro.c:371:11: error: implicit declaration of function ‘fdt32_ld’ [-Werror=implicit-function-declaration]
371 | *lenp = fdt32_ld(amp;prop->len);
| ^~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:283: arch/arm/boot/compressed/fdt_ro.o] Error 1
make[1]: *** [arch/arm/boot/Makefile:64: arch/arm/boot/compressed/vmlinux] Error 2
make: *** [arch/arm/Makefile:330: zImage] Error 2
make: *** Waiting for unfinished jobs....
Я добавил output/host/usr/bin в свою переменную PATH env, чтобы make мог найти набор инструментов. Есть идеи?
Ответ №1:
Оказывается, в arch / arm / boot / compressed все еще висела куча старых заголовочных файлов, связанных с libfdt, поэтому, удалив их, я смог собрать ядро. Я нашел файлы, используя git status.
Комментарии:
1. Вы можете запустить
git clean -xdf
, который удаляет все, что не находится под контролем системы. Также настоятельно рекомендуется использовать отдельную папку для сгенерированного (встроенного) материала.2. В основном, согласно @b20000 и @0andriy, путем принудительного удаления / удаления неотслеживаемых каталогов, файлов. эта команда
git clean -xdf
сделает то же самое. вместо удаления кучи старых файлов, связанных с libfdt, он удалит все ненужное.