Você está na página 1de 26

Arquiteturas de Hardware para sistemas

embarcados

Sistemas embarcados
Período 2010.2

1 Saulo O. D. Luiz
Roteiro

• Scratchbox
• Compilação do núcleo do S.O.

2 Saulo O. D. Luiz
Toolchains – Scratchbox
• Torna fácil a cross-compilação de um sistema completo
• Arquivos cross-compilados de forma transparente
– Para as ferramentas de construção a compilação parece nativa
• Suporta as plataformas arm, x86, x86_64, mips
(experimental)
• Usa o emulador qemu para executar transparentemente
os binários arm
• Suporta as bibliotecas glibc e uClibc
• Site: http://scratchbox.org

3 Saulo O. D. Luiz
Toolchains – Scratchbox

• Uso da versão 0.9.8


• Configuração pela linha de comando
• Usado para desenvolvimento de
aplicações na plataforma Maemo

4 Saulo O. D. Luiz
Instalando o scratchbox
• Baixe os tarballs de instalação
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-core-0.9.8.8.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-devkit-debian-
0.9.8.8.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-libs-0.9.8.8.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-arm-
glibc-0.9.8.5.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-arm-
uclibc-0.9.8.5.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-arm-
gcc3.4.cs-glibc-0.9.8.5.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-arm-
gcc3.4.cs-glibc-sf-0.9.8.5.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-arm-
gcc3.4.cs-uclibc-0.9.8.5.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-i386-
uclibc-0.9.8.5.tar.gz
– wget -b http://www.scratchbox.org/download/files/sbox-releases/0.9.8/tarball/scratchbox-toolchain-i686-
glibc-0.9.8.5.tar.gz

5 Saulo O. D. Luiz
Instalando o scratchbox
• Descompacte-os
– sudo tar zxf scratchbox-core-0.9.8.8.tar.gz -C /
– sudo tar zxf scratchbox-devkit-debian-0.9.8.8.tar.gz -C /
– sudo tar zxf scratchbox-libs-0.9.8.8.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-arm-glibc-0.9.8.5.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-arm-uclibc-0.9.8.5.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-arm-gcc3.4.cs-glibc-0.9.8.5.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-arm-gcc3.4.cs-glibc-sf-0.9.8.5.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-arm-gcc3.4.cs-uclibc-0.9.8.5.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-i386-uclibc-0.9.8.5.tar.gz -C /
– sudo tar zxf scratchbox-toolchain-i686-glibc-0.9.8.5.tar.gz -C /

• Execute
– sudo /scratchbox/run_me_first.sh

6 Saulo O. D. Luiz
Instalando o scratchbox
•Do you want to use sudo mode? [yes/no] (no):
• (pressione Enter para escolher opção default “no”)
•Give the name of the scratchbox group (sbox):
• (pressione Enter para escolher opção default “sbox”)
•Would you like me to create the group 'sbox' for you?
[yes/no] (yes):
• (pressione Enter para escolher opção default “sbox”)

7 Saulo O. D. Luiz
Toolchains – Scratchbox
– Criar um usuário
• sudo /scratchbox/sbin/sbox_adduser userLogin
– Em userLogin coloque seu login ou de outro usuário do Linux
– Add user guest to group 'sbox'? [yes/no] (yes):
• (pressione Enter para escolher opção default “yes”)
– Logar no scratchbox
• /scratchbox/login

8 Saulo O. D. Luiz
Instalando o scratchbox
• Configurar o scratchbox para ARM usando a GLIBC
• sbox-config -ct TUX
• Compiladores disponíveis:
– 0) arm-gcc-3.3.2-uclibc-snapshot-20040229
– 1) arm-linux-gcc-3.3_3.3.4-glibc-2.3.2.ds1
– 2) arm-linux-gcc3.4.cs-glibc2.3-nofpu
– 3) arm-linux-gcc3.4.cs-glibc2.3
– 4) arm-linux-gcc3.4.cs-uclibc0.9.27-nofpu
– 5) arm-linux-gcc3.4.cs-uclibc0.9.27
– 6) cs2005q3.2-glibc-arm
– 7) cs2005q3.2-glibc-i386
– 8) host-gcc
– 9) i386-gcc-3.3.2-uclibc-snapshot-20040229
– 10) i686-linux-gcc-3.3_3.3.4-glibc-2.3.2.ds1
• Escolher o número: 2

9 Saulo O. D. Luiz
Toolchains – Scratchbox

• Usando o scratchbox
– Métodos de transparência de CPU
disponíveis
sbrsh
qemu-arm
qemu-ppc
– Escolher a opção qemu-arm
• Kits de desenvolvimento
– Escolher o do Debian
• sbox-config -st TUX
• sbox-config -cc
10 Saulo O. D. Luiz
Toolchains – Scratchbox
• Testando o Scratchbox
– vi hello.c
• #include <stdio.h>
• int main(){
• printf(“hello arm”);
• return 0;
• }
– gcc hello.c -o hello
– file hello
– ./hello

11 Saulo O. D. Luiz
Toolchains – Scratchbox
• Se o usuário reconectar o linux, experimentará um problema ao
executar /scratchbox/login. Para resolver:
• sudo vim /etc/init.d/rc.local

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
[ -f /etc/default/rcS ] && . /etc/default/rcS
. /lib/lsb/init-functions

do_start() {
if [ -x /etc/rc.local ]; then
log_begin_msg "Running local boot scripts (/etc/rc.local)"
/etc/rc.local
log_end_msg $?
fi
/scratchbox/sbin/sbox_ctl start adicionar essa linha
}

12 Saulo O. D. Luiz
Núcleo do S. O. - Visão Geral

Programa que fornece para os programas de usuário (aplicativos)


uma interface para utilizar os recursos do sistema.

13 Saulo O. D. Luiz
Selecionando o núcleo

• Principal repositório: http://kernel.org/

Arquitetura Localização do fonte/patches

x86 http://kernel.org/
OMAP http://muru.com

ARM http://arm.linux.org.uk/developer/

PowerPC http://penguinppc.org
MIPS http://linux-mips.org/

14 Saulo O. D. Luiz
Compilação do núcleo
• Passos:
– Identificação da arquitetura alvo
• ARM-OMAP H2 1611
– Identificação do hardware disponível na plataforma
• CPU ARM de 192 MHz
• Interface com o DSP via DSPGATEWAY
• Tela de toque
• OMAP keypad
• Chip de áudio TSC2101
– Obtenção dos arquivos fonte
• Núcleo do kernel.org
• Patch para a plataforma do muru.com
– Aplicação do patch e configuração
– Construção

15 Saulo O. D. Luiz
Lab 1: Fontes e Patchs
• Fora do Scratchbox:
Criar uma pasta ~/kernel_linux-2.6.12
mkdir ~/kernel_linux-2.6.12 (fins de padronização)
cd ~/kernel_linux-2.6.12
 Obter as fontes:
• sudo wget -b http://www.kernel.org/pub/linux/kernel/v2.6/linux-
2.6.12.tar.bz2
• sudo wget -b http://muru.com/linux/omap/patches/patch-2.6.12-omap1.bz2
• sudo wget -b http://superb-
west.dl.sourceforge.net/sourceforge/dspgateway/ patch-2.6.12-omap1-
dspgw3.3.bz2
 Descompactar as fontes:
• tar jxvf linux-2.6.12.tar.bz2
• cd linux-2.6.12

16 Saulo O. D. Luiz
Patchs
 Aplicar os patchs:
• bzcat ../patch-2.6.12-omap1.bz2 | patch -p1
• bzcat ../patch-2.6.12-omap1-dspgw3.3.bz2 | patch -p1

17 Saulo O. D. Luiz
3. Configurando o kernel
• A configuração consistirá na seleção das opções do kernel
para a arquitetura alvo;

• Arquivo Makefile;

• make xxxxxx (arch/xxxxx/configs)


– Inicia uma pré-configuração para a arquitetura selecionada.

• Será gerado um arquivo .config, links simbólicos e arquivos de


cabeçalho.

• Existe vários caminhos para configurar o kernel;


make (config | xconfig | gconfig | menuconfig | oldconfig |
allnoconfig)
18 Saulo O. D. Luiz
3. Configurando o kernel
• make config
– Interface linha de comando onde você é perguntando
sobre cada opção.

• make xconfig
– Interface gráfica (QT).

• make gconfig
– Interface gráfica (GTK).

• make menuconfig
– Interface terminal baseada em menu

19 Saulo O. D. Luiz
3. Configurando o kernel

• make oldconfig
– Verifica a existência de um .config, se existir utiliza as
configuração existente e pergunta apenas as opções
que não foram configuradas.

• make allnoconfig
– Selecionar apenas as opções fortemente
recomendadas, todas as outras são retiradas.

20 Saulo O. D. Luiz
Lab 2 – Configurando o Kernel
 Listar as arquiteturas suportadas:
• ls arch/arm/configs/
 Gerar uma configuração padrão para a arquitetura alvo:
• make omap_h2_1610_defconfig
 Alterar configurações padrão:
• make xconfig
 Selecionar as opções para OMAP

21 Saulo O. D. Luiz
Lab 2 – Configurando o Kernel
 Compilando estaticamente ou como módulo
• Compilando DSPGATEWAY como módulo separado

• Compilando DSPGATEWAY estaticamente

22 Saulo O. D. Luiz
Lab 2 – Configurando o Kernel(3)
 Outras opções:

23 Saulo O. D. Luiz
Configurando o núcleo

• Outras opções Se for utilizado o ALSA


como sistema de som, a
– Input devices tela de toque não funciona
(nesta versão do núcleo)
• OMAP Touchscreen
• OMAP keypad
– Sound System
• OSS
– Network Filesystems
• NFS
24 Saulo O. D. Luiz
4. Compilando o Kernel

• É necessário utilizar um cross compilador para ARM (aula 2)

• A compilação envolve: contruir as dependências e a imagem


do kernel.

• Comandos utilizados na compilação:


make
make uImage
• O patch para OMAP habilita a opção make uImage.

• uImage é o formato do arquivo utilizado pelo programa de


inicialização U-Boot

25 Saulo O. D. Luiz
Lab 3 – Compilando o Kernel
 Verifica se o cross compilador está no PATH
• echo $PATH
 Se não tiver, exporta o caminho do cross compilador
para o PATH
– export PATH=$PATH:/scratchbox/compilers/arm-linux-gcc3.4.cs-
glibc2.3-nofpu/bin/
 Inicia a construção das dependências e complilação
• make
 Construção do arquivo imagem do Kernel
• make uImage (só quando o u-boot for compilado)

 Kernel gerado:
Image arch/arm/boot/uImage is ready

26 Saulo O. D. Luiz

Você também pode gostar