150 likes | 243 Views
Laboratório 2. Sistemas embarcados Período 2010.2. Roteiro. Inicialização Sistema de arquivos raiz. Inicialização. Os programas responsáveis pela inicialização do núcleo são os bootloaders. Dentre eles pode-se destacar:
E N D
Laboratório 2 Sistemas embarcados Período 2010.2
Roteiro • Inicialização • Sistema de arquivos raiz
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
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 • tar xjvf gcc-3.3.2.tar.bz2 -C / • Baixar o fonte • 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: • make omap1610inn_config • Alterar o Makefile • Apagar a linha 124 do Makefile • Os exemplos não compilam • Inicia compilação: • export PATH=$PATH:/usr/local/arm/3.3.2/bin • make • Arquivos gerados: • u-boot, uboot.bin • mkimage (programa usado para gerar uma imagem do núcleo entendível pelo o u-boot)
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)
Vantagens • Construir seu próprio sistema de arquivos raiz traz algumas vantagens: • Melhor entendimento • Maior controle • Configurações mais simples
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
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
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, ncurses-hexedit, ncurses-term, libncurses5, libncurses5-dbg, libncurses5-dev, libncursesw5, libncursesw5-dbg, libncursesw5-dev)
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
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/<userLogin>/busybox-1.2.1/_install/ /embedded/targets/tux/
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
/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
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
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