Кросс-компиляция с помощью Linaro 7.1.1 arm-linux-gnueabihf

Как правильно загрузить набор инструментов linaro и настроить его так, чтобы я мог использовать его с Makefile ядра? Когда я тестирую свою версию на arm-linux-gnueabihf-gcc --version функция работает, но при компиляции собственного ядра происходит сбой.


контекст

Я работаю над компиляцией собственного ядра Linux для доски Beaglebone Black. Руководство по сборке собственного ядра приведено здесь.

Следуя инструкциям руководства, мне нужно использовать arm-linux-gnueabihf-gcc для кросс-компиляции ядра для оборудования Beaglebone. Поэтому я установил набор инструментов Линаро с их сайта. Я просто скачал его, а затем распаковал в /opt/ папка.

$ cd /opt/
$ sudo mv gcc-linaro-7.1.1-2017.08-x86_64_arm-linux-gnueabi.tar.xz/ gcc-arm-linux
$ export PATH=$PATH:/opt/gcc-arm-linux/bin

Я проверяю и проверяю, что все работает при установке.

$ arm-linux-gnueabihf-gcc --version

И мой вывод выглядит следующим образом:

Как только я закончу с этим, я собираю ядро, используя стандартный Makefile.

$ cd ~/linux
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bb.org_defconfig
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage dtbs LOADADDR=0x80008000 -j4

На этом этапе я сталкиваюсь с ошибками в команде, чтобы фактически скомпилировать ядро.

Makefile:686: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler
make: arm-linux-gnueabihf-gcc: Command not found
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CC      scripts/mod/empty.o
/bin/sh: 1: arm-linux-gnueabihf-gcc: not found
scripts/Makefile.build:258: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 127
scripts/Makefile.build:403: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
Makefile:556: recipe for target 'scripts' failed
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....

Что наиболее запутанно, так это то, что ошибки указывают на то, что arm-linux-gnueabihf-gcc: not found Однако я могу запустить команду arm-linux-gnueabihf-gcc --version в той же папке, и он будет работать правильно.

Решением этой проблемы может быть просто установить его с помощью apt:

sudo apt-get install gcc-arm*

Что предлагается в этом ответе, но это не решает мою путаницу.

Почему я могу проверить свою версию на arm-linux-gnueabihf-gcc функция, но она не выполняется в Makefile должным образом? Как правильно загрузить набор инструментов linaro и настроить его так, чтобы я мог использовать его с Makefile ядра?

1 ответ

Не уверен, что это та же проблема, что и у меня, но я наткнулся на этот пост, когда искал ответ на свой вопрос.

Я столкнулся с подобной проблемой при использовании старого кросс-компилятора linux-arm из контейнера докера. Проблема заключалась в том, что двоичный двоичный код gcc был 32-разрядным, а контейнер, выполняющий make, был 64-разрядным. Скрипт make сообщал, что "arm-linux/gcc not found"

Вы можете проверить, является ли он 32-битным, выполнив

file absolute-path-to-gcc

например

root@b61b0b938b8a:~# file /usr/local/arm-linux/bin/gcc
/usr/local/arm-linux/bin/gcc: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped

Чтобы это исправить я должен был добавить i386 в док-контейнер, как в этом вопросе

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
Другие вопросы по тегам