ошибка компиляции ядра Linux с использованием набора инструментов buildroot

#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, он удалит все ненужное.