Introdução Sistemas Embarcados • Bootloader é um componente fundamental • Faz a inicialização do hardware e carrega o sistema operacional • Difere entre sistemas embarcados e desktops • Ainda que sejam os mesmos, são configurados de forma diferente • Uso comum de dispositivos p DOC ((DiskOnChip) p) Bootloaders • Noção de monitor: • Capacidade de auxiliar na depuração, leitura e escrita de memória, reprogramação de flash, configuração etc • É um tipo de bootloader inteligente • Existem bootloaders específicos e universais • e.g.: lilo, milo, syslinux, grub, u-boot, redboot etc... Aula 05 INF01059 - Sistemas Embarcados Tarefas básicas de um bootloader Configurações genéricas de boot • Inicializar elementos do hardware no startup • O boot pode ser feito a partir: • As ações dependem do processador, da placa, do chipset etc... • Primeira tarefa feita por um bootloader • Dispositivos solid state (flash, rom, eprom, e2prom, ...) • Discos • Rede • Processadores iniciam execução em um endereço fixo • Projetistas j mapeiam p flash,, rom,, eprom p nesse endereço ç • Não se pode contar com DRAM, pois é necessário programar sua controladora antes de iniciar a usá-la • Após tornar “vivo” o hardware o bootloader deve localizar, carregar e passar a execução a outro programa • Tipicamente é o sistema operacional INF01059 - Sistemas Embarcados 2 3 • Tipo p de boot escolhido influencia • Bootloader • Hardware e o software no sistema hospedeiro • e.g.: servidores de DHCP, TFTP, NFS etc INF01059 - Sistemas Embarcados 4 Dispositivos de armazenamento solid state Boot a partir de disco • Tipicamente são empregadas memórias flash • O meio de armazenamento contém: • Normalmente utilizado em desktops e servidores • A imagem do núcleo e o sistema de arquivos raiz estão armazenados no disco • Bootloader e os parâmetros para o boot • Imagem do kernel (compactado ou não) • Sistema de arquivos q raiz (root ( file system) y ) • O bootloader carrega um estágio secundário de bootloader ou carrega a imagem do kernel diretamente do disco • Dificuldade adicional: • Como ler os setores de disco com a imagem do kernel? • Opção 1: ler uma área pré-determinada em forma raw • Opção 2: conhecer o sistema de arquivos usado no disco para ler o arquivo “imagem do kernel” Sistema de Arquivos raiz Booloader Parâmetros Imagem do kernel • No startup, o processador inicia a executar no endereço do bootloader INF01059 - Sistemas Embarcados 5 Boot via rede INF01059 - Sistemas Embarcados 6 Visão geral procedimento boot Linux • Duas possibilidades para o sistema embarcado: • Tem apenas o bootloader localmente • Obtém o kernel via transferência de arquivos • Sistema de arquivos é transferido ou montado via rede • Possui o bootloader e a imagem do kernel localmente • Sistema de arquivos é transferido ou montado via rede • Emprega protocolos Internet • TFTP para transferência de arquivos • NFS para montagem de sistemas de arquivos • BOOTP/DHCP para obter parâmetros de rede automaticamente • Bootloader deve prover cliente para bootp, dhcp, tftp, nfs... • Possível usar rede ethernet ou serial • Necessário configurar servidores externos INF01059 - Sistemas Embarcados Fonte.: Almesberger, Werner, Booting Linux: The History and the Future. Proceedings of Ottawa Linux Symposium 2000, July 2000 7 INF01059 - Sistemas Embarcados 8 Bootloaders de dois estágios Exemplos de bootloaders para x86 compatíveis • O hardware inicializa um bootloader a partir de um local fixo • LILO: LInux LOad: • Normalmente possui um espaço muito pequeno • e.g.: setor de boot de um disco rígido • Bootloader original do Linux • http://freshmeat.net/projects/lilo/ • Empregam dois estágios devido a limitação de espaço • GRUB: GRand Unified Bootloader from GNU. • Primeiro estágio: g funcionalidade mínima • Acessa o segundo estágio em uma localização maior, carrega e transfere a execução para ele • Segundo estágio: oferece um programa mais complexo • Sem limites do que pode ser implementado • Pode ser o próprio sistema operacional • Bootloader mais p poderoso usado em distribuições ç linux • http://www.gnu.org/software/grub/ • SYSLINUX • Empregado para boot via rede ou mídias removíveis • http://syslinux.zytor.com 9 Bootloaders genéricos 10 Taxonomia de bootloaders • Das U-Boot (http://www.denx.de/wiki/UBoot/WebHome) • Quatro grandes grupos: • Bootloader universal desenvolvido pela Denx Software • Muito usado em sistema baseados em ARM • Suporta vários outros processadores, mips, x86, m68k, nios... • Redboot ((http://sources.redhat.com/redboot/) p ) • Bootloader desenvolvido pela RedHat para o sistema eCos • Pode ser empregado em outros sistemas • Suporta vários processadores: x86, arm, ppc, mips, sh, m68k • Especializados • Genéricos • Com reconhecimento de sistemas de arquivos • File system y aware loaders • Sem reconhecimento de sistemas de arquivos • File system unware loaders • uMon (http://microcross.com/html/micromonitor.html) • MicroMonitor general purpose, multi-OS bootloader • Suporta: ARM, SH2, m68k, MIPS, PowerPC, Xscale... • Existem muitos outros… 11 INF01059 - Sistemas Embarcados 12 Loaders especializados Loaders genéricos • Reconhecem apenas um dispositivo de armazenamento • Executam sobre um sistema operacional • e.g.: memória flash ou floppy • Empregam serviços desse para carregar a imagem do kernel • e.g.: sistemas de arquivos • Possui uma imagem do kernel em um formato específico • Executam diretamente no firmware • Exemplos: • Pontos positivos e negativos • Não necessitam conhecer estrutura de dispositivos p e de sistemas de arquivos (+) • Cuidados especiais para o kernel que está sendo carregado não sobrescrever áreas de memória do kernel ativo (-) • Necessário executar duas cargas de kernel (-) • LinuxBIOS, Syslinux, Netboot, etc... • Exemplos: • Loadlin, ArLo, etc INF01059 - Sistemas Embarcados 13 File system aware boot loaders File system unaware boot loaders • Podem ser vistos como um mini-sistema operacional • Não reconhece nenhum sistema de arquivo • Reconhecem um ou mais sistemas de arquivos • Acessam dispositivos E/S através de facilidades do firmware • Muitas vezes possuem seus próprios drivers de dispositivo • Exemplos: p Grub, Shoelace, Silo etc • Necessário ler diretamente os blocos de disco • Implica em saber quais blocos (mapeamento) • Exemplo: lilo e programa /sbin/lilo Imagem do Kernel (arquivo) Imagem do Kernel (arquivo) Bootloader (lê blocos) Mapa de blocos Metadados Metadados disco Imagem do Kernel (arquivo) Mapeamento Sistema de arquivos Bootloader (e.g. ext2) Sistema de arquivos 14 INF01059 - Sistemas Embarcados Imagem do kernel Blocos de dados INF01059 - Sistemas Embarcados disco Imagem do kernel 15 Blocos de dados INF01059 - Sistemas Embarcados 16 Trabalho 2 – peso 1 (INDIVIDUAL) Leituras complementares • Instalar o grub em um cdrom é deixá-lo pronto para receber comandos a partir de seu shell • P. Ragavahn, A. Lad, S. Neelakandan. Embedded Linux System Design and Developement. Auerbach, 2006. • C. Hallinan. Embedded Linux Primer: A Practical Real-World Approach. Prentice Hall, 2006. • K. Yaghmour. g Building g Embedded Linux Systems. y Oreilly, y 2003. • Para “uniformizar” os problemas usar a versão 0.97 • Dicas: • usar um CD-RW (sem dúvida, haverá muitas tentativas) • Faz F parte t do d trabalho: t b lh • Descobrir os fontes do grub, baixar, aplicar patches e compilar • Se houverem surpresas, lembrem-se do google e de howtos) • Data de entrega: 10/09/2009 (≈1 semana) • Entregar o CD com a imagem ISO e um relatório (simples) das opções empregadas no configure, problemas e soluções • DESAFIO: vale 01 ponto a mais • Utilizar um carregador diferente do grub e conseguir realizar o boot de um kernel INF01059 - Sistemas Embarcados 17 INF01059 - Sistemas Embarcados 18