Construindo Sistemas de Linux Embarcado com LTIB

De Wiki do Veiga

Tabela de conteúdo

Introdução

O LTIB (Linux Target Image Builder) é uma ferramenta para criação de BSPs (Linux Board Support Packages) para diferentes plataformas alvo. BSPs gerados com o LTIB podem incluir o bootloader, o kernel do Linux e um rootfs composto por um grande número de pacotes selecionáveis.

Esta ferramenta foi utilizada na preparação de uma das seções de demonstração da palestra sobre Linux Embarcado apresentada no Tchelinux 2009 (veja os slides). A placa utilizada na demonstração é o kit de desenvolvimento da Freescale MPC8313E-­RDB. A Freescale disponibiliza BSPs para suas familias de processadores PowerPC, que podem ser acessados aqui.

Este texto descreve os procedimentos para a geração de um BSP personalizado utilizando o LTIB. A placa alvo utilizada no exemplo é a da palestra.

Instalação do LTIB

Alguns pacotes são necessários para utilizar no LTIB (no Ubuntu):

sudo apt-get install patch g++ rpm zlib1g-dev m4 bison libncurses5-dev \
                     libglib2.0-dev gettext build-essential tcl libstdc++6-dev 

Instalação do LTIB:

mkdir ltib
sudo mount -o loop MPC8313E_RDB_K26_20070831-LTIB.iso ltib/
cd ltib
./install
...

Gerar os pacotes rpm (primeira vez apenas):

cd ltib-mpc8313erdb-20070824
./ltib -c

Compilação

cd ltib-mpc8313erdb-20070824
./ltib -c

Após executar o ltib com o parâmetro -c, será lançado um menu para configuração do BSP e seleção de pacotes.

Copiar o rootfs, a imagen do kernel e o arquivo de device tree para o /tftpboot.

cp rootfs.ext2.gz.uboot /tftpboot
cp rootfs/boot/uImage /tftpboot
cp rootfs/boot/mpc8313erdb.dtb /tftpboot

Agora é só configurar a placa para dar o boot via TFTP.

Solução de Problemas

Durante a instalação do LTIB ocorreu o seguinte erro:

bison -y -d ./parse.y
make: *** [parse.c] Segmentation fault

A solução foi editar o arquivo bison.spec:

vim dist/lfs-5.1/bison/bison.spec

Na linha 25 (seção %Build), substituir "make" por "make CFLAGS=-O0".

Outro erro encontrado foi "Failed building mtd-utils". A solução foi editar o patch do mtd-utils e comentar algumas linhas:

Editar o arquivo a seguir:

vim /opt/freescale/pkgs/mtd-utils-20060302-cf-byteswap_h-1.patch

Comentar as linhas 46, 47 e 48:

+//#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
+//# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
+//#endif

Remover o diretório de build do mtd e executar o ltib novamente:

rm /opt/freescale/ltib/usr/src/rpm/BUILD/mtd/ -rf
./ltib

Referências


Marcelo Veiga Neves < marcelo.veiga at gmail.com >

Ferramentas pessoais