Introdução Sistemas Embarcados Bootloaders 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 DOC (DiskOnChip) 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 2 Tarefas básicas de um bootloader Configurações genéricas de boot Inicializar elementos do hardware no startup As ações dependem do processador, da placa, do chipset etc... Primeira tarefa feita por um bootloader Processadores iniciam execução em um endereço fixo Projetistas mapeiam flash, rom, eprom 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 O boot pode ser feito a partir: Dispositivos solid state (flash, rom, eprom, e2prom,...) Discos Rede Tipo de boot escolhido influencia Bootloader Hardware e o software no sistema hospedeiro e.g.: servidores de DHCP, TFTP, NFS etc 3 4
Dispositivos de armazenamento solid state Boot a partir de disco Tipicamente são empregadas memórias flash O meio de armazenamento contém: Bootloader e os parâmetros para o boot kernel (compactado ou não) Sistema de arquivos raiz (root file system) ) Booloader Parâmetros kernel Sistema de Arquivos raiz Normalmente utilizado em desktops e servidores A imagem do núcleo e o sistema de arquivos raiz estão armazenados no disco 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 No startup, o processador inicia a executar no endereço do bootloader 5 6 Boot via rede 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 Fonte.: Almesberger, Werner, Booting Linux: The History and the Future. Proceedings of Ottawa Linux Symposium 2000, July 2000 7 8
Bootloaders de dois estágios Exemplos de bootloaders para x86 compatíveis O hardware inicializa um bootloader a partir de um local fixo Normalmente possui um espaço muito pequeno e.g.: setor de boot de um disco rígido Empregam dois estágios devido a limitação de espaço Primeiro estágio: 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 LILO: LInux LOad: Bootloader original do Linux http://freshmeat.net/projects/lilo/ GRUB: GRand Unified Bootloader from GNU. Bootloader mais 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 10 Bootloaders genéricos Taxonomia de bootloaders Das U-Boot (http://www.denx.de/wiki/uboot/webhome) 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/) Bootloader desenvolvido pela RedHat para o sistema ecos Pode ser empregado em outros sistemas Suporta vários processadores: x86, arm, ppc, mips, sh, m68k umon (http://microcross.com/html/micromonitor.html) MicroMonitor general purpose, multi-os bootloader Suporta: ARM, SH2, m68k, MIPS, PowerPC, Xscale... Existem muitos outros Quatro grandes grupos: Especializados Genéricos Com reconhecimento de sistemas de arquivos File system aware loaders Sem reconhecimento de sistemas de arquivos File system unware loaders 11 12
Loaders especializados Loaders genéricos Reconhecem apenas um dispositivo de armazenamento e.g.: memória flash ou floppy Possui uma imagem do kernel em um formato específico Executam diretamente no firmware Exemplos: LinuxBIOS, Syslinux, Netboot, etc... Executam sobre um sistema operacional Empregam serviços desse para carregar a imagem do kernel e.g.: sistemas de arquivos Pontos positivos e negativos Não necessitam conhecer estrutura de dispositivos 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 (-) Exemplos: Loadlin, ArLo, etc 13 14 File system aware boot loaders File system unaware boot loaders Podem ser vistos como um mini-sistema operacional 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: Grub, Shoelace, Silo etc Não reconhece nenhum sistema de arquivo Necessário ler diretamente os blocos de disco Implica em saber quais blocos (mapeamento) Exemplo: lilo e programa /sbin/lilo Mapeamento Metadados disco Sistema de arquivos kernel Blocos de dados Bootloader (e.g. ext2) Metadados disco Sistema de arquivos kernel Mapa de blocos Blocos de dados Bootloader (lê blocos) 15 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 Para uniformizar os problemas usar a versão 0.97 Dicas: usar um CD-RW (sem dúvida, haverá muitas tentativas) Faz parte do trabalho: 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 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. Building Embedded Linux Systems. Oreilly, 2003. 17 18