Crosstool-ng
Neste treinamento, iremos utilizar a Crosstool-ng para montar a nossa própria toolchain em um primeiro momento.
Ela é provavelmente a principal ferramenta open-source para geração de toolchains, foi projetada exclusivamente para geração de toolchains, diferente da Buildroot e Yocto, por exemplo, que geram tudo desde toolchain, imagem do kernel, RootFS e etc.
Além disso, como esperado o Crosstool-ng suporta diversas plataformas como ARM, PowerPC, x86 e outros bem como, tem a capacidade de gerar ferramentas para plataformas bare-metal. Por fim, o Crosstool-ng possue a interface de configuração similar a interface utilizada para configurar o kernel Linux.
Instalando o Crosstool-ng
Como esperado a primeira etapa de instalação da ferramenta, constitui-se em baixar-la de algum repositório. Em seguida, devemos instalar a ferramenta localmente para utiliza-la. Então, depois de baixar e extrair a ferramenta realizamos sua instalação:
A instalação em um diretório local é sempre recomendada, pois é normal utilizar mais de uma arquitetura no mesmo desktop. Ou seja, você pode programar diversas arquiteturas sem que uma ferramenta interfira na outra. Para tal, basta utilizar a flag --enable-local
, indicando que deseja instalar somente neste diretório.
Então, basta fazer a compilação automatizada através do comando make
e então utilizar o make install
para ajustar os binários nos diretórios correto e organizar tudo para que a ferramenta funcione.
A partir deste momento, a ferramenta já pode ser utilizada, por exemplo, é possível listar os samples que ele fornece pelo comando ./ct-ng list-samples
. Estes samples podem, ser uma espécie de esqueleto com as configurações básicas para uma determinada plataforma ou arquitetura.
Escolhido um exemplo da lista, basta carrega-lo através do comando ./ct-ng <sample-name>
. Depois de carregado, você vai lança a aplicação propriamente dita e personalizar.
Detalhamento de alguma opções de configuração
Ao passo que estamos realizando a configuração do Crosstool-ng, podemos realizar-la de diversas formas, porém algumas opções podem ser uteis e não necessáriamente alto explicativas. Desta forma, vamos avaliar algumas opções do menuconfig. Algumas destas opções serão explicadas de forma mais profunda na seção seguinte durante o experimento.
Alguns comentários a respeito do Crosstool-ng:
Na opção Target options:
Suffix to the architecture: literalmente um sufixo a para indicar uma variante da arquitetura. Por exemplo: ARM -> conjuntos de instruções, v7, v6 e v8. No caso do treinamento estamos interessados na RPi3, onde o sufixo é v8. É possível criar toolchains para mais de uma arquitetura, ou variação.
Attemp to combine: É uma feature do Crosstool-ng para combinar as bibliotecas em um único diretório, é interessante por exemplo utilizando arch64. Uma vez que os toolchains usam lib, lib64 e quando se tem mais de uma arquitetura começa a ficar bagunçado o diretorio.
Nossa arquitetura possui MMU então vamos utiliza-la.
Endianess: Little endian, isto é, bytes menos significativos primeiro.
Todo o sistema, toolchain, kernel e bootloader serão 32 bits. Apesar da RPi 3 suportar instruções 64 bits, pois o processador é 64 bits. Ela ainda é instável, tendo diversas ferramentas incompatíveis.
Target Optimisations: são configurações relacionadas ao GCC, é basicamente um wrapper do crosstool
[EM BREVE..]
Last updated