Как определить версию компилятора при кросс-компиляции ядра Linux для arm

Мой вопрос может показаться глупым, но это одна простая проблема, с которой я сталкиваюсь последние 2 дня. На момент написания этого вопроса последняя версия ядра - 4.14, но я хочу скомпилировать любую случайно выбранную более старую версию (v3.2).

Я клонировал ядро ​​из репозитория mainline и проверил правильную версию

git checkout -b v3.2 v3.2
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make -j8 all

Это выдает мне ошибку:

  CC      arch/arm/vfp/vfpsingle.o
  LD      usr/built-in.o
  CC      arch/arm/kernel/elf.o
  CC      arch/arm/vfp/vfpdouble.o
  CC      arch/arm/mm/dma-mapping.o
  AS      arch/arm/kernel/entry-armv.o
  AS      arch/arm/kernel/entry-common.o
  CC      arch/arm/kernel/irq.o
  CC      arch/arm/kernel/process.o
  CC      arch/arm/kernel/ptrace.o
  CC      arch/arm/common/gic.o
  LD      init/mounts.o
init/do_mounts_initrd.o: In function `return_address':
/home/naveen/data/linux/arch/arm/include/asm/ftrace.h:51: multiple definition of `return_address'
init/do_mounts.o:/home/naveen/data/linux/arch/arm/include/asm/ftrace.h:51: first defined here
scripts/Makefile.build:427: recipe for target 'init/mounts.o' failed
make[1]: *** [init/mounts.o] Error 1
Makefile:945: recipe for target 'init' failed
make: *** [init] Error 2
make: *** Waiting for unfinished jobs....
  CC      arch/arm/common/icst.o
  CC      arch/arm/mm/extable.o
  CC      arch/arm/common/timer-sp.o
  CC      arch/arm/kernel/return_address.o
  CC      arch/arm/mm/fault.o
  CC      arch/arm/mm/init.o
  CC      arch/arm/mm/iomap.o
  CC      arch/arm/kernel/setup.o
  LD      arch/arm/common/built-in.o
arch/arm/kernel/return_address.c:62:2: warning: #warning "TODO: return_address should use unwind tables" [-Wcpp]
 #warning "TODO: return_address should use unwind tables"
  ^
arch/arm/kernel/return_address.c:65:7: error: redefinition of ‘return_address’
 void *return_address(unsigned int level)
       ^
In file included from include/linux/ftrace.h:19:0,
                 from arch/arm/kernel/return_address.c:12:
/home/naveen/data/linux/arch/arm/include/asm/ftrace.h:48:21: note: previous definition of ‘return_address’ was here
 extern inline void *return_address(unsigned int level)
                     ^
scripts/Makefile.build:305: recipe for target 'arch/arm/kernel/return_address.o' failed
make[1]: *** [arch/arm/kernel/return_address.o] Error 1
make[1]: *** Waiting for unfinished jobs....

Все мои шаги следовали из этой статьи, которая должна была работать. Все, что я могу выяснить (после ссылки на другие подобные статьи и вопросы по SO), что используемая версия компилятора имеет значение.

Моя текущая версия компилятора:

insanecoder@worstation ~/data/linux $ arm-linux-gnueabi-gcc --version
arm-linux-gnueabi-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

Мой вопрос: должен ли я действительно заботиться о версии компилятора (toolchain) при компиляции ядра Linux? Если да, как я могу узнать, какая версия инструментария / компилятора наиболее подходит для моей конкретной версии ядра.

Я придерживался мнения, что любой последний набор инструментов должен заботиться обо всех предыдущих версиях ядра. Старые компиляторы могут не иметь возможности компилировать более новые версии ядра из-за отсутствующих опций компилятора, если они используются. Однако, наоборот, не должно быть проблемой.

РЕДАКТИРОВАТЬ

Суть этого вопроса заключается в том, чтобы найти надежный источник информации для любой основной версии ядра Linux, где можно найти информацию о поддерживаемых версиях компилятора для его компиляции.

Цель не в том, чтобы скомпилировать конкретную версию ядра. например, я очень хорошо могу скомпилировать v4.9 с моими существующими настройками. Я просто случайно выбрал более старую версию, чтобы подтвердить свое обучение.

0 ответов

Другие вопросы по тегам