[LAB] Toolchain Pré-compilados
Cross-Compiling Toolchain
Os objetivos desta atividade são:
Aprender a utilizar um toolchain pronto, isto é, fornecido pelo fabricante do SoC ou repositório padrão por exemplo;
Compilar seu próprio toolchain utilizando a ferramenta
crosstool-ng.
Utilizando um toolchain pré-compilado
A Raspberry Pi Foundation fornece gratuitamente em seu repositório oficial, diversos componentes open-source para a Raspberry Pi. Dentre eles, estão inclusos os fontes do kernel Linux, drivers, bibliotecas e firmwares específicos, além de seu próprio toolchain, o qual será utilizadonesta atividade.
Instalação e Configuração
Inicialmente, abra um novo shell e crie a seguinte estrutura de diretórios dentro do diretório dsle19
:
Em seguida, o correto seria clonar a pasta tools
do repositório oficial da Raspberry Pi, no intuíto de obter a última versão disponível do toolchain:
No entanto, a fim de garantir uma maior eficiência na execução das atividades deste treinamento, todos os arquivos necessários foram previamente baixados e encontram-se no diretório dsle19/dl
. Portanto, substituiremos o processo de clonar o repositório tools
pela extração do seguinte arquivo:
O comando acima extrai o arquivo tools.zip no diretório atual (dsle19/toolchains
). Ao final do processo, verifique se o diretório tools
foi criado, por meio do comando ls
.
Como o toolchain fornecida pela RPi Foundation é pré-compilado, para instalá-lo basta adicionar o caminho das ferramentas (binários) do toolchain à variável de ambiente $PATH
:
Note que tal alteração é momentânea, isto é, ao fechar o shell atual ela será perdida. Um dos meios defazer essa alteração permanente (opcional) é por meio da inserção do mesmo comando no final do arquivo ∼.bashrc
, que é um script shell que é executado sempre que um novo shell é iniciado.
Simples assim, toolchain instalado! Uma maneira de verificar se o export do PATH funcionou é digitar arm
no shell e pressionar a tecla TAB duas vezes. Ao fazer isso, o shell tentará auto-completar o comando arm
de acordo com as opções de executáveis disponíveis na variável PATH. O resultado deverá ser uma lista semelhante à:
Testando o toolchain
É possível testar o toolchain através da compilação de um programa bem simples, como o helloworld.c
, em C. Inicialmente, crie a pasta ex01
dentro do diretório de exercícios exs
e, em seguida, crie/edite o arquivo helloworld.c
com seu editor favorito:
E então,
Em seguida, compile o arquivo helloworld.c
nativamente, isto é, utilizando o gcc:
Utilizando o comando file
, verifique as informações do binário gerado:
A saída do comando deve ser algo similar à:
Note que a segunda informação, Intel 80386 indica que o programa foi compilado para a mesma arquitetura de sua máquina, x86. Em seguida, execute-o:
Agora repita o processo e utilize o recém-instalado toolchain para cross-compilar o mesmo programa para a RPi. Para isso, trocamos o compilador antivo gcc por arm-linux-gnueabihf-gcc:
Novamente, verifique o programa gerado através do comando file
e veja que desta vez a arquitetura indicada será ARM:
Não será possível executar este segundo programa na sua máquina pois o programa e a máquina possuem arquiteturas diferentes. Faça o teste. No entanto, é possível copiá-lo para a RPi e executá-lo nela.
Para tal, utilizaremos o protocolo SSH para a comunicação entre a nossa plataforma host (PC) e a nossa placa (target).
Primeiramente, devemos estabelecer uma conexão de rede entre a RPi e nosso computador. O capítulo Configurando a Rede da RPi, apresenta algumas formas de se estabelecer esta comunicação.
Copie-o para a RPi através do comando scp
(secure copy). Primeiramente, confira a funcionamento do comando através de seu manual man scp
e então:
Acesse-a via SSH e tente executar o programa, lembre-se a senha padrão do usuário pi
da RPi é raspberry.
Neste ponto, conseguimos realizar a nossa primeira compilação (cross-compile) e também a nossa primeira execução na plataforma embarcada (RPi).
Este procedimento foi realizado com base em uma toolchain pronta, fornecida por terceiros. Contudo, em um contexto profissional e em aplicações reais, faz-se necessário a utilização de toolchains próprias e criadas e adequadas ao nosso sistema. Desta forma, no próximo capítulo será discutido o procedimento de criação de toolchains suas principais ferramenteas e componentes.
Last updated