Laboratório 2
Sistemas embarcados
Período 2010.2
1
Saulo O. D. Luiz
Roteiro
• Inicialização
• Sistema de arquivos raiz
2
Saulo O. D. Luiz
Inicialização
• Os programas responsáveis pela inicialização do núcleo
são os bootloaders.
• Dentre eles pode-se destacar:
– GRUB(x86), LILO(x86), RedBoot(x86, ARM, PowerPC, MIPS e
m68k) e U-Boot(x86, ARM e PowerPC).
• U-Boot
– É o melhor bootloader para ARM(suporte a um maior número de
plataformas baseadas no ARM).
– Projeto U-boot: http://sourceforge.net/projects/uboot
3
Saulo O. D. Luiz
Compilando o U-Boot


Instalar dependências build-essential, autoconf, autotools
Tem que ser compilado usando o toolchain da Texas para OMAP


Baixar no site de recursos
E descompactar como root


Baixar o fonte






export PATH=$PATH:/usr/local/arm/3.3.2/bin
make
Arquivos gerados:


4
Apagar a linha 124 do Makefile
Os exemplos não compilam
Inicia compilação:


make omap1610inn_config
Alterar o Makefile


wget -b http://linux.omap.com/pub/bootloader/h2/source/u-boot.tar.gz
tar zxvf u-boot.tar.gz
cd u-boot
Configura o U-Boot para omap:


tar xjvf gcc-3.3.2.tar.bz2 -C /
u-boot, uboot.bin
mkimage
(programa usado para gerar uma imagem do núcleo entendível pelo o uboot)
Saulo O. D. Luiz
Sistema de arquivos raiz
• Estrutura de como os arquivos são organizados
• Os principais comandos GNU são providos pelo
busybox
• O busybox é um arquivo executável
• Os comandos são links simbólicos para o
busybox
• O busybox os identifica pelo link chamado
• Provê desde o processo init, até servidores mais
sofisticados (http)
5
Saulo O. D. Luiz
Vantagens
• Construir seu próprio sistema de
arquivos raiz traz algumas vantagens:
– Melhor entendimento
– Maior controle
– Configurações mais simples
6
Saulo O. D. Luiz
Sistema de arquivos raiz
• Os dispositivos (/dev) podem ser criados a partir do mdev (mini
udev) provido pelo busybox
• Só são necessários dois devices
– /dev/null
– /dev/console
• Em versões mais antigas do núcleo (2.6.12) os dispositivos eram
montados como um sistema de arquivos
– devfs
• Em distribuições mais completas, pode-se usar um initrd para
carregar módulos que variam de acordo com as configurações
das máquinas
– Maior compatibilidade
– Maior tamanho de distribuição
7
Saulo O. D. Luiz
Criando um sistema de arquivos raiz
• Baixar da página o script que instala as dependências
pra compilar o busybox
• sh dependencias_busybox.sh
• Baixando o Busybox:
– wget http://busybox.net/downloads/busybox-1.2.1.tar.gz
– tar zxvf busybox-1.2.1.tar.gz
– cd busybox-1.2.1
• Configura o Busybox:
– Habilita todas as opções do Busybox
• make defconfig
8
Saulo O. D. Luiz
• Altera algumas opções:
• make menuconfig
• (Caso apareça o erro /usr/bin/ld: cannot find -lncurses
checar as dependências ncurses-base, ncurses-bin, ncurseshexedit, ncurses-term, libncurses5, libncurses5-dbg,
libncurses5-dev, libncursesw5, libncursesw5-dbg,
libncursesw5-dev)
9
Saulo O. D. Luiz
 Busybox settings
– Build options
• Marcar: Build BusyBox as a static binary (no shared libs)
• Desmarcar: Build with Large File Support (for accessing files > 2 GB)
 Shells
– Choose your default shell: ash
 cd ..
 mv busybox-1.2.1 /scratchbox/users/userLogin/home/userLogin/
 /scratchbox/login
 cd busybox-1.2.1
 Compila
• make install
10
Saulo O. D. Luiz
Povoando o sistema de arquivos raiz
• Pasta raiz
– sudo mkdir -p /embedded/targets/tux
• Copiando a estrutura dos arquivos do
Busybox para dentro da imagem montada:
– (Fora do scratchbox)
– sudo rsync -a
/scratchbox/users/<userLogin>/home/<userLo
gin>/busybox-1.2.1/_install/
/embedded/targets/tux/
11
Saulo O. D. Luiz
Criando os principais devices
• Criar a pasta de dispositivos:
– sudo mkdir /embedded/targets/tux/dev
– cd /embedded/targets/tux/dev
• Criando o device “console”:
– sudo mknod console c 5 1
• Criando o device “null”:
– sudo mknod null c 1 3
12
Saulo O. D. Luiz
/etc/inittab do rootfs
 Criar arquivo /etc/inittab:
– sudo mkdir -p /embedded/targets/tux/etc
• sudo vi /embedded/targets/tux/etc/inittab
• Arquivo inittab:
# This is run first script
::sysinit:/etc/init.d/rcS
# Start an "askfirst" shell on the console
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
13
Saulo O. D. Luiz
Script /etc/init.d/rcS
 Criar o script /etc/init.d/rcS:

sudo mkdir -p /embedded/targets/tux/etc/init.d
• sudo vi /embedded/targets/tux/etc/init.d/rcS
• sudo chmod 777 /embedded/targets/tux/etc/init.d/rcS
#!/bin/sh
/bin/busybox mkdir -p /proc
/bin/busybox mkdir -p /sys
/bin/busybox mount -t proc none /proc
/bin/busybox mount -t sysfs none /sys
/bin/busybox mkdir -p /dev/pts
/bin/busybox mount -t devpts devpts /dev/pts
# /bin/busybox echo /sbin/mdev > /proc/sys/kernel/hotplug
/bin/busybox mdev -s
/bin/busybox ifconfig lo 127.0.0.1 up
exec /etc/profile
rcS
14
Saulo O. D. Luiz
 Criar o script /etc/profile:
• sudo vi /embedded/targets/tux/etc/profile
• sudo chmod 777 /embedded/targets/tux/etc/profile
#!/bin/sh
TSLIB_TSDEVICE=/dev/event1
TSLIB_CONFFILE=/etc/ts.conf
PATH=$PATH:/usr/X11R6/bin:/sbin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
DISPLAY=:0
export TSLIB_TSDEVICE TSLIB_CONFFILE PATH LD_LIBRARY_PATH DISPLAY
profile
15
Saulo O. D. Luiz
Download

Lab 2 - Inicialização e Sistema de arquivos raiz