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

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

Context

Я работаю над компиляцией пользовательское ядро ​​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 toolchain и настроить ее, чтобы я мог использовать ее с файлом Makefile?

0
задан 9 March 2018 в 13:58

2 ответа

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

Я столкнулся с аналогичной проблемой при использовании старого кросс-компилятора linux-arm из контейнера докеров. Проблема заключалась в том, что кросс-компиляция gcc-бинарного файла была 32-битной, а работа с контейнером была 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
0
ответ дан 18 July 2018 в 03:16

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

Я столкнулся с аналогичной проблемой при использовании старого кросс-компилятора linux-arm из контейнера докеров. Проблема заключалась в том, что кросс-компиляция gcc-бинарного файла была 32-битной, а работа с контейнером была 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
0
ответ дан 24 July 2018 в 17:47

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

Похожие вопросы: