Das U-Boot - Das U-Boot

Das U-Boot
U-Boot Logo.svg
Desenvolvedor (s) Engenharia de Software DENX
lançamento inicial 15 de outubro de 1999 ; 22 anos atras ( 15/10/1999 )
Versão estável
v2021.01 / 11 de janeiro de 2021 ; 9 meses atrás ( 2021-01-11 )
Versão de visualização
v2021.04-rc4 / 15 de março de 2021 ; 7 meses atrás ( 2021-03-15 )
Repositório
Escrito em C , montagem
Disponível em inglês
Modelo Carregador de inicialização
Licença GPL-2.0 ou posterior
Local na rede Internet www .denx .de / wiki / U-Boot / Edite isso no Wikidata

Das U-Boot (com o subtítulo "o carregador de inicialização universal" e frequentemente abreviado para U-Boot ; consulte o histórico para mais informações sobre o nome) é um carregador de boot primário de código aberto usado em dispositivos incorporados para empacotar as instruções para inicializar o funcionamento do dispositivo kernel do sistema. Ele está disponível para várias arquiteturas de computador , incluindo 68k , ARM , Blackfin , MicroBlaze , MIPS , Nios , SuperH , PPC , RISC-V e x86 .

Funcionalidade

U-Boot é um carregador de inicialização de primeiro e segundo estágio. Ele é carregado pela ROM ou BIOS do sistema a partir de um dispositivo de inicialização compatível, como um cartão SD, unidade SATA, flash NOR (por exemplo, usando SPI ou I²C ) ou flash NAND. Se houver restrições de tamanho, o U-Boot pode ser dividido em estágios: a plataforma carregaria um pequeno SPL (carregador de programa secundário), que é uma versão simplificada do U-Boot, e o SPL faria a configuração inicial do hardware e carregaria a versão maior e completa do U-Boot. Independentemente de se o SPL é usado, o U-Boot executa o primeiro estágio (por exemplo, configurar controladores de memória e SDRAM) e o segundo estágio (executando várias etapas para carregar um sistema operacional moderno a partir de uma variedade de dispositivos que devem ser configurados, apresentar um menu para os usuários interagirem e controlar o processo de inicialização, etc.).

U-Boot implementa um subconjunto da especificação UEFI conforme definido na especificação Embedded Base Boot Requirements (EBBR). Binários UEFI, como GRUB ou kernel do Linux , podem ser inicializados por meio do gerenciador de boot ou da interface de linha de comando.

O U-Boot executa uma interface de linha de comando em um console ou porta serial. Usando a CLI, os usuários podem carregar e inicializar um kernel, possivelmente alterando os parâmetros padrão. Também existem comandos para ler informações de dispositivos, ler e gravar memória flash, baixar arquivos (kernels, imagens de inicialização, etc.) da porta serial ou rede, manipular árvores de dispositivos e trabalhar com variáveis ​​de ambiente (que podem ser gravadas em armazenamento persistente , e são usados ​​para controlar o comportamento do U-Boot, como o comando de inicialização padrão e o tempo limite antes da inicialização automática, bem como dados de hardware, como o endereço MAC Ethernet.

Ao contrário dos carregadores de inicialização do PC que obscurecem ou escolhem automaticamente os locais de memória do kernel e outros dados de inicialização, U-Boot requer seus comandos de inicialização para especificar explicitamente os endereços de memória física como destinos para copiar dados (kernel, ramdisk, árvore de dispositivo, etc.) e para pular para o kernel e como argumentos para o kernel. Como os comandos do U-Boot são de baixo nível, são necessários vários passos para inicializar um kernel, mas isso também torna o U-Boot mais flexível do que outros gerenciadores de inicialização, já que os mesmos comandos podem ser usados ​​para tarefas mais gerais. É ainda possível atualizar o U-Boot usando U-Boot, simplesmente lendo o novo bootloader de algum lugar (armazenamento local, ou da porta serial ou rede) na memória e gravando esses dados no armazenamento persistente onde o bootloader pertence.

O U-Boot tem suporte para USB, portanto, pode usar um teclado USB para operar o console (além da entrada da porta serial) e pode acessar e inicializar a partir de dispositivos de armazenamento em massa USB, como leitores de cartão SD.

Armazenamento de dados e fontes de inicialização

O U-Boot inicializa um sistema operacional lendo o kernel e quaisquer outros dados necessários (por exemplo, árvore de dispositivo ou imagem ramdisk) na memória, e então executando o kernel com os argumentos apropriados.

Os comandos do U-Boot são na verdade comandos generalizados que podem ser usados ​​para ler ou escrever quaisquer dados arbitrários. Usando esses comandos, os dados podem ser lidos ou gravados em qualquer sistema de armazenamento compatível com o U-Boot, que inclui:

(Nota: Estas são fontes de inicialização a partir das quais o U-Boot é capaz de carregar dados (por exemplo, um kernel ou imagem ramdisk) na memória. O próprio U-Boot deve ser inicializado pela plataforma, e isso deve ser feito a partir de um dispositivo da plataforma A ROM ou BIOS é capaz de inicializar, o que naturalmente depende da plataforma.)

  • Armazenamento a bordo ou conectado
    • cartão SD
    • SATA
    • SCSI
    • I²C (por exemplo, EEPROMs ou flash NOR)
    • SPI (por exemplo, flash NOR ou NAND)
    • ONFI (flash NAND bruto)
    • eMMC (gerenciado NOR ou flash NAND)
    • NVMe
    • Dispositivo de armazenamento USB
  • Porta serial (transferência de arquivo)
  • Inicialização de rede (opcionalmente usando DHCP, BOOTP ou RARP)

Sistemas de arquivos compatíveis

O U-Boot não precisa ser capaz de ler um sistema de arquivos para que o kernel o use como sistema de arquivos raiz ou disco em memória inicial; O U-Boot simplesmente fornece um parâmetro apropriado para o kernel e / ou copia os dados para a memória sem entender seu conteúdo.

No entanto, o U-Boot também pode ler (e em alguns casos, gravar) sistemas de arquivos. Desta forma, em vez de exigir que os dados que o U-Boot carregará sejam armazenados em um local fixo no dispositivo de armazenamento, o U-Boot pode ler o sistema de arquivos para procurar e carregar o kernel, árvore de dispositivo, etc., por nome de caminho.

U-Boot inclui suporte para estes sistemas de arquivos:

Árvore de dispositivos

A árvore de dispositivos é uma estrutura de dados para descrever o layout do hardware. Usando a árvore de dispositivos, um fornecedor pode ser capaz de usar um U-Boot de linha principal não modificado em hardware de outra forma especial. Como também adotado pelo kernel do Linux, a árvore de dispositivos tem como objetivo melhorar a situação na indústria de embarcados , onde existe um grande número de garfos específicos de produtos (de U-Boot e Linux). A capacidade de executar o software principal praticamente dá aos clientes uma indenização contra a falta de atualizações do fornecedor.

História

U-Boot no XPedite5501

A origem do projeto é um bootloader 8xx PowerPC chamado 8xxROM escrito por Magnus Damm. Em outubro de 1999, Wolfgang Denk mudou o projeto para SourceForge.net e o renomeou para PPCBoot , porque o SF.net não permitia nomes de projetos que começassem com dígitos. A versão 0.4.1 do PPCBoot foi lançada publicamente pela primeira vez em 19 de julho de 2000.

Em 2002, uma versão anterior do código-fonte foi brevemente bifurcada em um produto chamado ARMBoot , mas foi incorporada de volta ao projeto PPCBoot logo em seguida. Em 31 de outubro de 2002, o PPCBoot − 2.0.0 foi lançado. Isso marcou o último lançamento com o nome PPCBoot, pois foi renomeado para refletir sua capacidade de trabalhar em outras arquiteturas além do ISA PPC.

PPCBoot − 2.0.0 tornou-se U − Boot − 0.1.0 em novembro de 2002, expandido para funcionar na arquitetura do processador x86 . Recursos adicionais de arquitetura foram adicionados nos meses seguintes: MIPS32 em março de 2003, MIPS64 em abril, Nios II em outubro, ColdFire em dezembro e MicroBlaze em abril de 2004. A versão de maio de 2004 do U-Boot-1.1.2 funcionou nos produtos de 216 fabricantes de placas nas várias arquiteturas.

O nome atual Das U-Boot acrescenta um artigo definido alemão , para criar um bilíngüe pun no clássico 1,981 filme submarino alemão Das Boot , que acontece em uma Segunda Guerra Mundial alemão U-boat . É um software livre lançado sob os termos da GNU General Public License . Ele pode ser construído em um PC x86 para qualquer uma de suas arquiteturas pretendidas usando uma cadeia de ferramentas GNU de desenvolvimento cruzado , por exemplo crosstool, o Embedded Linux Development Kit (ELDK) ou OSELAS.Toolchain.

A importância do U-Boot em sistemas Linux embarcados é afirmada de forma bastante sucinta no livro Building Embedded Linux Systems , de Karim Yaghmour, cujo texto sobre o U-Boot começa, "Embora existam alguns outros bootloaders, 'Das U-Boot' , o bootloader universal, é indiscutivelmente o bootloader de código aberto mais rico, mais flexível e mais ativamente desenvolvido disponível. "

Usos

  • Os Chromebooks baseados em ARM são fornecidos com U-Boot. Os Chromebooks baseados em Celeron e i5 o usam como carga útil para o coreboot .
  • A série baseada em PowerPC de computadores AmigaOne executando AmigaOS usa U-Boot, em particular o Sam440ep e Sam460ex da ACube Systems Srl , e o AmigaOne X5000 da A-Eon, o sucessor do AmigaOne X1000 .
  • Dispositivos Ubiquiti Networks usam U-Boot
  • Os dispositivos Amazon Kindle usam U-Boot como carregador de inicialização.
  • TP-Link e vários outros roteadores sem fio baseados em MIPS compatíveis com OpenWRT / LEDE usam U-Boot para inicialização.
  • Os roteadores celulares Teltonika usam bootloader baseado em U-Boot.
  • O Falcon e o Dragon da SpaceX usam U-Boot

Veja também

Notas

Referências

links externos