Você está na página 1de 5

Montando o quebra-cabeças...

Sistemas Embarcados Power-on

• Power-on dispara bootloader kernel


• Bootloader Bootloader
• Inicialização do hardware
• Carrega kernel na memória, Modo
init
descompacta e passa controle usuário

Busybox e buildroot • Kernel inicializa estruturas de dados


• Executa função init
• Montagem de um root file system
• ramdisk (kernel 2.4)
• initramfs (kernel 2.6)
• Cria o processo init busybox Root fs Sistema
de arquivos
• Processo init
• Scripts de inicialização
Aula 07 • Disparo de deamons, aplicação ou shell

INF01059 - Sistemas Embarcados 2

O primeiro programa em espaço de usuário linuxrc

• Especificado pelo parâmetro init do comando kernel • Programa executado por default quando o boot é feito através
• ex.: kernel /boot/vmlinuz-2.6.30.img init=/sbin/init de um ramdisk e não é fornecido um argumento para init
• Executado no final do procedimento de boot do kernel • Normalmente é um shell script
• Responsável por iniciar outros programas em espaço de usuário • Baseado em um shell simples como o nash ou busybox sh
• Serviços (daemons) e demais programas de usuário • Tarefas típicas:
p
• Recebe o pid 1 • Detecção de drivers a carregar, inicializar rede, montar
partições, “chavear” para um novo FS (se for o caso)...
• É o processo pai de todos os demais processos
• Processo “imortal” (não se pode usar o comando kill nele)

INF01059 - Sistemas Embarcados 3 INF01059 - Sistemas Embarcados 4


O programa init Busybox

• /sbin/init é a segunda opção de programa default • Busybox é um conjunto simplificado de comandos Unix
• Responsável por: • Não possui todas as opções, mas o suficiente para a maioria
• Inicializar serviços (daemons) e interfaces gráficas (X server) dos casos de sistemas embarcados
• Executado também na parada do sistema (scripts K) • Comandos são denominados de applets
• Existe uma versão light no busybox • Busybox é um binário único com múltiplos pontos de entrada
• Possível executar comandos como argumento ou diretamente
• % busybox ls –la
• % ls –la [necessário ter ls apontando para busybox]
• A forma de apontar é usando links
• Fontes disponíveis em: http://www.busybox.net

INF01059 - Sistemas Embarcados 5 INF01059 - Sistemas Embarcados 6

Características do busybox Comandos disponíveis no BusyBox

• Licença GPL • addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2,
bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cp, cpio,
• Modularidade crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, devfsd, df,
dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap, dumpleases,
• Permite usuários definirem seus próprios applets echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk, fgrep, find, fold,
free, freeramdisk, fsck.minix, ftpget, ftpput, getopt, getty, grep, gunzip, gzip,
• Procedimento para criação e integração de applets halt, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id,
• CUIDADO: licença GPL ifconfig, ifdown, ifup, inetd, init, insmod, install, ip, ipaddr, ipcalc, iplink,
i
iproute,
t iiptunnel,
t l kill
kill, killall,
kill ll klogd,
kl d llash,
h llast,
t llength,
th lilinuxrc, lln, lloadfont,
df t
• Qualquer trabalho derivado deve disponibilizar fontes! loadkmap, logger, login, logname, logread, losetup, ls, lsmod, makedevs,
md5sum, mesg, mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp,
• Configuração bastante simples modprobe, more, mount, msh, mt, mv, nameif, nc, netstat, nslookup, od,
openvt, passwd, patch, pidof, ping, ping6, pipe_progress, pivot_root,
• Facilita o procedimento de cross-compilação poweroff, printf, ps, pwd, rdate, readlink, realpath, reboot, renice, reset, rm,
rmdir, rmmod, route, rpm, rpm2cpio, run-parts, rx, sed, seq, setkeycodes,
• Tamanho reduzido sha1sum, sleep, sort, start-stop-daemon, strings, stty, su, sulogin, swapoff,
• Dependendo das opções selecionadas varia de 4 kB a 1 MB swapon, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time,
top, touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname,
• Ligação estática ou dinâmica uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode,
vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs,
yes, zcat

INF01059 - Sistemas Embarcados 7 INF01059 - Sistemas Embarcados 8


Configuração do BusyBox BusyBox make xconfig

• Obter os fontes em http://busybox.net


• Geração é similar ao do kernel (configure-make-install)
• Várias formas de configurar
• Interface texto ou interface gráfica (ncurses ou x)
• Opções geradas automaticamente por make (defconfig,
allnoconfig, etc)
• Resultado é um arquivo .config a ser usado na compilação
• Opção interessante (---> Build Options)
• Informações para cross compilar o BusyBox
• Criação do binário com ligação estática ou dinâmica (default)
• Suporte a arquivos grandes (> 2 M) Permite escolher:
• Os comandos a serem compilados
• Opções e características dos comandos
INF01059 - Sistemas Embarcados 9 INF01059 - Sistemas Embarcados 10

Compilando e instalando o BusyBox Comando init BusyBox

• Uma vez criado o arquivo .config basta usar make • BusyBox provê capacidades equivalentes ao init System V
• Resultado é um binário busybox • Mais simples, não possui suporte a runlevels
• Após compilação correta, executar make install • Se necessário runlevel, não se pode usar o init do busybox
• Cria um diretório _install com a hierarquia bin, linuxrc, sbin e usr • Apropriado para maioria de sistemas embarcados
• “Povoa” a hierarquia com uma série de links (soft ou hard) • Seqüência de passos:
para o executável busybox 1.
1 C fi
Configura os signal
i lhhandlers
dl necessários
á i ao init
i it
• Cria entrada linuxrc (link para busybox) 2. Inicializa console
• Instalação: 3. Parsing no arquivo /etc/inittab
• Copiar para um diretório de destino OU 4. Executa arquivo /etc/init.d/rc.S
• Realizar a montagem da imagem do rootfs e copiar _install 5. Executa comandos inittab marcados com action = wait
• e.g.: 6. Executa comandos inittab marcados com action = once
• /mnt/rootfs 7. Fica em laço realizando
• rsync –a _install/ /mnt/rootfs/ 1. Comandos com action = respawn
2. Comandos com action = askfirst
INF01059 - Sistemas Embarcados 11 INF01059 - Sistemas Embarcados 12
Ações executadas pelo init BusyBox Alternativa para BusyBox: embutils

• Não existe /etc/inittab • http://www.fefe.de/embutils/


• Executa ações default para reboot, halt e restart • Do mesmo desenvolvedor da diet libc
• Tenta criar shell em /dev/tty1 a /dev/tty2 • Conjunto de utilitários Unix apropriados para embarcados
• Existe /etc/inittab • Versão 0.18 possui 75 comandos implementados
• Parsing
g e armazena comandos p
para execução
ç p posterior • Só pode ser gerada estaticamente usando a diet libc
id:runlevel: action: process • Embutils versus BusyBox
• Base de desenvolvimento e de usuários menor que BusyBox
ignora
Console que controlará sysinit Path completo do programa
o processo
• Faltam comandos úteis para sistemas um pouco maiores
respawn a ser executado
askfirst • Mais compacta que a BusyBox
wait
once
ctrl-alt-del
shutdown
rrestart

INF01059 - Sistemas Embarcados 13 INF01059 - Sistemas Embarcados 14

Buildroot Características

• http://buildroot.net • É apenas a “casca”


• Conjunto de makefiles e patches que facilitam a criação de • Pacotes são “baixados” da Internet
cross toolchain e do root file system • Patches são aplicados automaticamente
• Toolchain: compilador, assembler, linker, bibliotecas • Geração de makefiles e de arquivos de configuração
• Root FS: arquivos
q necessários a inicialização
ç do sistema, o q
que • Seleção de componentes
p
inclui init, comandos shell e scripts • Via make xconfig ou make menuconfig
• Possui suportes para algumas placas (boards) “clássicas” • Processo de geração é automatizado
• `Permite customização para sistemas (boards) específicos • Gera compilador, assembler, linker (e seus utilitários)
• Suporte a várias arquiteturas • Kernel, biblioteca padrão e aplicações requiridas
• Avr32, Power PC, MIPS, ARM, i386, blackfin, sparc, alpha • Construção do sistema de arquivos
• Carregador
Processo demorado: depende da velocidade da rede e opções selecionadas,
pode facilmente chegar a horas
INF01059 - Sistemas Embarcados 15 INF01059 - Sistemas Embarcados 16
Características Requisitos e operação

• Cross toolchain • Software adicional • Necessário ter instalado • Executar make menuconfi ou
• Gcc + GNU binutils + gdb • Busybox • gcc e g++ make xconfig
• Kernel • POSIX, Linux, GNU tolls • GNU make • Ainda há uma tarefa criteriosa
• Databases (mysql) • sed (trabalhosa) de escolha
• Linux (várias versões) e Hurd
• Editores • bison • make
• Carregadores
• U-boot, grub, syslinux, • Suporte a áudio
áudio, vídeo e • flex • Geração de “project”
project
pxelinux placas gráficas • autoconf • Onde são armazenados os
• Rede e serviços de rede • ncurses resultados do build
• Biblioteca
• uClibC • Scritps (lua, python, perl, ruby, • zlib
php) • libaci
• Sistemas de arquivos
• X-Windows • lzo
• Cramfs, ext2, isso, jffs, romfs,
• etc • gettext
squasfs, ubifs

INF01059 - Sistemas Embarcados 17 INF01059 - Sistemas Embarcados 18

Como fazer patches Leituras complementares

• Comando patch (pacote a ser instalado) • P. Ragavahn, A. Lad, S. Neelakandan. Embedded Linux
• Faz modificações em arquivos a partir do diretório corrente System Design and Developement. Auerbach, 2006.
• Baseado em um arquivo (diff_file) que descreve: • C. Hallinan. Embedded Linux Primer: A Practical Real-World
• Alteração do conteúdo de arquivos Approach. Prentice Hall, 2006.
• Criação
ç e remoçãoç de arquivos
q e diretórios • K. Yaghmour.
g Building
g Embedded Linux Systems.
y Oreilly,
y
• Exemplo: 2003.
• patch –p<n> < diff_file
• n é o parâmetro que indica quantos diretórios devem ser
“saltados” em relação ao que é dado no diff_file
• /usr/local/home/asc/fonte/exemplo.c (-p0)
• usr/local/home/asc/fonte/exemplo.c (-p1)

INF01059 - Sistemas Embarcados 19 INF01059 - Sistemas Embarcados 20

Você também pode gostar