Das U-Boot - Das U-Boot

Das U-Boot
U-Boot Logo.svg
Développeur(s) Génie logiciel DENX
Première version 15 octobre 1999 ; il y a 22 ans ( 1999-10-15 )
Version stable
v2021.01 / 11 janvier 2021 ; il y a 9 mois ( 2021-01-11 )
Version préliminaire
v2021.04-rc4 / 15 mars 2021 ; il y a 7 mois ( 2021-03-15 )
Dépôt
Écrit en C , Assemblage
Disponible en Anglais
Taper Chargeur de démarrage
Licence GPL-2.0 ou version ultérieure
Site Internet www .denx .de /wiki /U-Boot / Modifiez ceci sur Wikidata

Das U-Boot (sous - titré « le chargeur de démarrage universel » et souvent abrégé en U-Boot ; voir l' historique pour plus d'informations sur le nom) est un chargeur de démarrage principal open source utilisé dans les périphériques embarqués pour emballer les instructions pour démarrer le fonctionnement du périphérique noyau du système. Il est disponible pour un certain nombre d' architectures informatiques , notamment 68k , ARM , Blackfin , MicroBlaze , MIPS , Nios , SuperH , PPC , RISC-V et x86 .

Fonctionnalité

U-Boot est à la fois un bootloader de premier et de second étage. Il est chargé par la ROM ou le BIOS du système à partir d'un périphérique de démarrage pris en charge, tel qu'une carte SD, un lecteur SATA, une mémoire flash NOR (par exemple en utilisant SPI ou I²C ) ou une mémoire flash NAND. S'il y a des contraintes de taille, U-Boot peut être divisé en étapes : la plate-forme chargerait un petit SPL (Secondary Program Loader), qui est une version allégée de U-Boot, et le SPL ferait la configuration matérielle initiale et chargerait la version plus grande et complète de U-Boot. Que le SPL soit utilisé ou non, U-Boot effectue à la fois le démarrage de la première étape (par exemple, la configuration des contrôleurs de mémoire et de la SDRAM) et la deuxième étape (exécution de plusieurs étapes pour charger un système d'exploitation moderne à partir d'une variété de périphériques qui doivent être configurés, présentant un menu permettant aux utilisateurs d'interagir et de contrôler le processus de démarrage, etc.).

U-Boot implémente un sous-ensemble de la spécification UEFI telle que définie dans la spécification Embedded Base Boot Requirements (EBBR). Les binaires UEFI comme GRUB ou le noyau Linux peuvent être démarrés via le gestionnaire de démarrage ou à partir de l'interface de ligne de commande.

U-Boot exécute une interface de ligne de commande sur une console ou un port série. À l'aide de la CLI, les utilisateurs peuvent charger et démarrer un noyau, en modifiant éventuellement les paramètres par défaut. Il existe également des commandes pour lire les informations sur les périphériques, lire et écrire la mémoire flash, télécharger des fichiers (noyaux, images de démarrage, etc.) à partir du port série ou du réseau, manipuler les arborescences de périphériques et travailler avec des variables d'environnement (qui peuvent être écrites sur un stockage persistant , et sont utilisés pour contrôler le comportement U-Boot tel que la commande de démarrage par défaut et le délai d'attente avant le démarrage automatique, ainsi que les données matérielles telles que l'adresse MAC Ethernet).

Contrairement aux chargeurs de démarrage PC qui masquent ou choisissent automatiquement les emplacements de mémoire du noyau et d'autres données de démarrage, U-Boot nécessite que ses commandes de démarrage spécifient explicitement les adresses de mémoire physique comme destinations pour la copie des données (noyau, disque virtuel, arborescence de périphériques, etc.) et pour sauter au noyau et comme arguments pour le noyau. Comme les commandes d'U-Boot sont de niveau assez bas, il faut plusieurs étapes pour démarrer un noyau, mais cela rend également U-Boot plus flexible que les autres chargeurs de démarrage, puisque les mêmes commandes peuvent être utilisées pour des tâches plus générales. Il est même possible de mettre à niveau U-Boot à l'aide d'U-Boot, simplement en lisant le nouveau chargeur de démarrage depuis quelque part (stockage local, ou depuis le port série ou le réseau) dans la mémoire, et en écrivant ces données dans le stockage persistant auquel appartient le chargeur de démarrage.

U-Boot prend en charge l'USB, il peut donc utiliser un clavier USB pour faire fonctionner la console (en plus de l'entrée du port série), et il peut accéder et démarrer à partir de périphériques de stockage de masse USB tels que les lecteurs de carte SD.

Stockage des données et sources de démarrage

U-Boot démarre un système d'exploitation en lisant le noyau et toute autre donnée requise (par exemple, l'arborescence des périphériques ou l'image du disque virtuel) dans la mémoire, puis en exécutant le noyau avec les arguments appropriés.

Les commandes de U-Boot sont en fait des commandes généralisées qui peuvent être utilisées pour lire ou écrire des données arbitraires. À l'aide de ces commandes, les données peuvent être lues ou écrites sur n'importe quel système de stockage pris en charge par U-Boot, notamment :

(Remarque : ce sont des sources de démarrage à partir desquelles U-Boot est capable de charger des données (par exemple, un noyau ou une image de disque virtuel) en mémoire. U-Boot lui-même doit être démarré par la plate-forme, et cela doit être fait à partir d'un périphérique que la plate-forme La ROM ou le BIOS est capable de démarrer à partir de, ce qui dépend naturellement de la plate-forme.)

  • Stockage embarqué ou attaché
    • carte SD
    • SATA
    • SCSI
    • I²C (par exemple EEPROM ou flash NOR)
    • SPI (par exemple NOR ou NAND flash)
    • ONFI (flash NAND brut)
    • eMMC (flash NOR ou NAND géré)
    • NVMe
    • périphérique de stockage de masse USB
  • Port série (transfert de fichiers)
  • Démarrage réseau (éventuellement à l'aide de DHCP, BOOTP ou RARP)

Systèmes de fichiers compatibles

U-Boot n'a pas besoin de pouvoir lire un système de fichiers pour que le noyau l'utilise comme système de fichiers racine ou disque virtuel initial ; U-Boot fournit simplement un paramètre approprié au noyau et/ou copie les données en mémoire sans comprendre son contenu.

Cependant, U-Boot peut également lire (et dans certains cas, écrire dans) des systèmes de fichiers. De cette façon, plutôt que d'exiger que les données que U-Boot chargera soient stockées à un emplacement fixe sur le périphérique de stockage, U-Boot peut lire le système de fichiers pour rechercher et charger le noyau, l'arborescence des périphériques, etc., par chemin d'accès.

U-Boot inclut la prise en charge de ces systèmes de fichiers :

Arborescence des appareils

L'arborescence des périphériques est une structure de données pour décrire la disposition du matériel. À l'aide de l'arborescence des périphériques, un fournisseur peut être en mesure d'utiliser un U-Boot principal non modifié sur du matériel par ailleurs spécial. Comme également adopté par le noyau Linux, Device tree est destiné à améliorer la situation dans l' industrie de l' embarqué , où un grand nombre de forks spécifiques aux produits (de U-Boot et Linux) existent. La possibilité d'exécuter un logiciel principal offre pratiquement aux clients une indemnité contre le manque de mises à jour des fournisseurs.

Histoire

U-Boot sur Openmoko Freerunner
U-Boot sur le XPedite5501

L'origine du projet est un chargeur de démarrage PowerPC 8xx appelé 8xxROM écrit par Magnus Damm. En octobre 1999, Wolfgang Denk a déplacé le projet vers SourceForge.net et l'a renommé en PPCBoot , car SF.net n'autorisait pas les noms de projet commençant par des chiffres. La version 0.4.1 de PPCBoot a été publiée pour la première fois le 19 juillet 2000.

En 2002, une version précédente du code source a été brièvement intégrée à un produit appelé ARMBoot , mais a été réintégrée dans le projet PPCBoot peu de temps après. Le 31 octobre 2002, PPCBoot-2.0.0 a été publié. Il s'agissait de la dernière version sous le nom de PPCBoot, car elle a été renommée pour refléter sa capacité à fonctionner sur d'autres architectures que PPC ISA.

PPCBoot-2.0.0 est devenu U-Boot-0.1.0 en novembre 2002, étendu pour fonctionner sur l' architecture de processeur x86 . Des fonctionnalités d'architecture supplémentaires ont été ajoutées au cours des mois suivants : MIPS32 en mars 2003, MIPS64 en avril, Nios II en octobre, ColdFire en décembre et MicroBlaze en avril 2004. La version de mai 2004 de U-Boot-1.1.2 a fonctionné sur les produits. de 216 fabricants de cartes à travers les différentes architectures.

Le nom actuel Das U-Boot ajoute un article défini allemand , pour créer un jeu de mots bilingue sur le film sous-marin allemand classique de 1981 Das Boot , qui se déroule sur un sous-marin allemand de la Seconde Guerre mondiale . Il s'agit d' un logiciel libre publié sous les termes de la licence publique générale GNU . Il peut être construit sur un PC x86 pour n'importe laquelle de ses architectures prévues à l'aide d'une chaîne d'outils GNU de développement croisé , par exemple crosstool, le kit de développement Linux embarqué (ELDK) ou OSELAS.Toolchain.

L'importance de U-Boot dans les systèmes Linux embarqués est assez succinctement énoncée dans le livre Building Embedded Linux Systems , de Karim Yaghmour, dont le texte sur U-Boot commence par "Bien qu'il y ait pas mal d'autres chargeurs de démarrage, 'Das U-Boot' , le bootloader universel, est sans doute le bootloader open source le plus riche, le plus flexible et le plus activement développé disponible."

Coutumes

  • Les Chromebooks basés sur ARM sont livrés avec U-Boot. Les Chromebooks basés sur Celeron et i5 l'utilisent comme charge utile pour coreboot .
  • La série d' ordinateurs AmigaOne basés sur PowerPC exécutant AmigaOS utilise U-Boot, en particulier le Sam440ep et le Sam460ex d' ACube Systems Srl , et l'AmigaOne X5000 d'A-Eon, le successeur de l' AmigaOne X1000 .
  • Les appareils Ubiquiti Networks utilisent U-Boot
  • Les appareils Amazon Kindle utilisent U-Boot comme chargeur de démarrage.
  • TP-Link et plusieurs autres routeurs sans fil MIPS compatibles OpenWRT/LEDE utilisent U-Boot pour le démarrage.
  • Les routeurs cellulaires Teltonika utilisent un bootloader basé sur U-Boot.
  • Le Falcon et le Dragon de SpaceX utilisent tous deux U-Boot

Voir également

Remarques

Les références

Liens externes