Usando um toolchain externo no Yocto Project
- por Sergio Prado
A configuração de qual toolchain o Poky irá utilizar para construir a distribuição Linux é realizada através da variável TCMODE, que definirá qual arquivo tcmode-*.inc será incluído durante o processamento das receitas.
O valor padrão desta variável é “default“, fazendo com que seja incluído o arquivo tcmode-default.inc, que via PREFERRED_PROVIDER’s irá definir as receitas necessárias para compilar e gerar os componentes de software do toolchain.
Portanto, alterando o conteúdo desta variável podemos modificar o comportamento do Poky, fazendo-o utilizar um toolchain externo.
Para exemplificar, vamos compilar uma imagem para o QEMU usando o toolchain Sourcery G++ da Mentor Graphics.
PREPARANDO O AMBIENTE
Os testes foram feitos em um host Ubuntu 12.04 64 bits.
O primeiro passo é preparar a máquina para trabalhar com as ferramentas do Yocto Project:
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm |
Se você estiver usando outra distribuição, consulte a documentação do Yocto Project para preparar a sua máquina de desenvolvimento.
Criei um diretório para realizar os testes e entre nele:
$ cd ~ && mkdir -p yocto |
BAIXANDO AS FERRAMENTAS
Clone o repositório do Poky:
$ git clone -b dizzy http://git.yoctoproject.org/cgit/cgit.cgi/poky |
Clone também a camada meta-sourcery, que contém as receitas para utilizar o toolchain da Mentor Graphics:
$ git clone git://github.com/MentorEmbedded/meta-sourcery.git |
Os binários do toolchain precisam ser instalados separadamente. Faça isso com os comandos abaixo:
$ wget https://sourcery.mentor.com/GNUToolchain/package12813/public/arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 $ tar xjfv arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 |
CONFIGURANDO O SISTEMA DE BUILD
Inicialize o diretório de compilação:
$ source poky/oe-init-build-env |
Abra o arquivo conf/bblayers.conf e inclua a camada meta-sourcery na variável BBLAYERS (não esqueça de alterar para o diretório HOME do seu usuário):
BBLAYERS ?= " \ /home/sprado/yocto/meta-sourcery \ /home/sprado/yocto/poky/meta \ /home/sprado/yocto/poky/meta-yocto \ /home/sprado/yocto/poky/meta-yocto-bsp \ " |
Abra o arquivo conf/local.conf e altere a variável MACHINE:
MACHINE ??= "qemuarm" |
Neste mesmo arquivo, configure o toolchain na variável TCMODE e defina o local da instalação do toolchain em EXTERNAL_TOOLCHAIN (não esqueça de alterar para o diretório HOME do seu usuário):
TCMODE ?= "external-sourcery" EXTERNAL_TOOLCHAIN = "/home/sprado/yocto/arm-2014.05" |
COMPILANDO E TESTANDO
Agora é só gerar a imagem:
$ bitbake core-image-minimal |
E depois emular com o QEMU:
$ runqemu qemuarm |
POR QUE USAR UM TOOLCHAIN EXTERNO?
Na maioria dos casos, não tem um porquê. Você irá provavelmente utilizar o toolchain gerado pelo Poky.
Mas em alguns casos bem específicos, pode ser que você queira utilizar um toolchain pré-compilado. Provavelmente porque este toolchain possui suporte à algumas funcionalidades específicas da sua plataforma de hardware. Ou então porque você quer uma compilação inicial mais rápida, já que o Poky não precisará compilar e gerar o toolchain. Ou porque você quer um toolchain com uma versão do GCC diferente da versão utilizada pelo Poky, ou uma biblioteca C diferente não suportada pelo Poky, etc.
Independentemente do motivo, é legal saber que temos esta flexibilidade com o Yocto Project.
Happy compiling!
Sergio Prado