Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
13 Saulo O. D. Luiz
Selecionando o núcleo
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 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
22 Saulo O. D. Luiz
Lab 2 – Configurando o Kernel(3)
Outras opções:
23 Saulo O. D. Luiz
Configurando o núcleo
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