Cross Compiling com Linaro 7.1.1 arm-linux-gnueabihf

0

Como posso baixar corretamente o conjunto de ferramentas linaro e configurá-lo para que eu possa usá-lo com o Makefile do kernel? Quando testo minha versão na função arm-linux-gnueabihf-gcc --version , ela funciona, mas ao compilar um kernel personalizado, ele falha.

Contexto

Eu estou trabalhando para compilar um kernel Linux customizado para o Blackboard do Beaglebone. O guia que estou seguindo para criar o kernel personalizado é aqui .

Ao seguir as etapas do guia, preciso usar arm-linux-gnueabihf-gcc a fim de cruzar compilar o kernel para o hardware Beaglebone. Então eu instalei o conjunto de ferramentas do linaro em seu site . Acabei de fazer o download e, em seguida, descompactei-o na pasta /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

Eu testo e me certifico de que as coisas funcionaram na instalação.

$ arm-linux-gnueabihf-gcc --versão

E minha saída é semelhante à seguinte imagem:

Quandoterminar,estoucompilandookernelusandooMakefilepadrão.

$cd~/linux$sudomakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-bb.org_defconfig$sudomakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-uImagedtbsLOADADDR=0x80008000-j4

Nesteponto,eumedeparocomerrosnocomandopararealmentecompilarokernel.

Makefile:686:CannotuseCONFIG_CC_STACKPROTECTOR_STRONG:-fstack-protector-strongnotsupportedbycompilermake:arm-linux-gnueabihf-gcc:CommandnotfoundCHKinclude/config/kernel.releaseCHKinclude/generated/uapi/linux/version.hCCscripts/mod/empty.o/bin/sh:1:arm-linux-gnueabihf-gcc:notfoundscripts/Makefile.build:258:recipefortarget'scripts/mod/empty.o'failedmake[2]:***[scripts/mod/empty.o]Error127scripts/Makefile.build:403:recipefortarget'scripts/mod'failedmake[1]:***[scripts/mod]Error2make[1]:***Waitingforunfinishedjobs....Makefile:556:recipefortarget'scripts'failedmake:***[scripts]Error2make:***Waitingforunfinishedjobs....

Omaisconfusoéqueoserrosindicamquearm-linux-gnueabihf-gcc:notfound,noentanto,possoexecutarocomandoarm-linux-gnueabihf-gcc--versionnamesmapastaeeleseráexecutadocorretamente.

Asoluçãoparaesteproblemapodeserapenasinstalá-lousandooapt:

sudoapt-getinstallgcc-arm*

Oqueésugeridonaresposta this , mas que não t resolve minha confusão.

Por que eu posso testar minha versão na função arm-linux-gnueabihf-gcc , mas ela não é executada no Makefile corretamente? Como posso baixar corretamente o conjunto de ferramentas linaro e configurá-lo para que eu possa usá-lo com o Makefile do kernel?

    
por yodama 14.11.2017 / 22:32

1 resposta

0

Não tenho certeza se esse é o mesmo problema que eu, mas cheguei a este post ao procurar uma resposta para o meu próprio problema.

Corri para um problema semelhante ao usar um compilador cruzado linux-arm mais antigo de dentro de um contêiner docker. O problema era que o binário de compilação cruzada do gcc era de 32 bits e o de execução do contêiner era de 64 bits. O script make reportava "arm-linux / gcc não encontrado"

Você pode verificar se é de 32 bits, fazendo

file absolute-path-to-gcc

por exemplo

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

Para corrigir isso, tive que adicionar i386 ao contêiner docker, como em esta pergunta

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
    
por Thumpers 09.03.2018 / 04:46