Usando um toolchain externo no Yocto Project

- por Sergio Prado

Categorias: Yocto Project Tags: ,

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

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.