2 votes

Comment démarrer Ubuntu pour arm à travers U-boot ?

Comment démarrer Ubuntu pour ARM à travers U-boot ? J'ai un firmware qui supporte uniquement U-boot.

3voto

Rinzwind Points 270388

Il n'existe pas de guide universel pour l'installation d'ARM avec U-boot car les fabricants de matériel en général veulent garder leur matériel fermé. Donc la difficulté de cette tâche dépend totalement du matériel et du fabricant de ce matériel.

Consultez la documentation officielle section 5.1 qui propose une méthode générique pour identifier et ajuster les paramètres lorsque vous devez utiliser u-boot, mais lisez aussi la section 3.7 :

1ère partie de 3.7 :

3.7.1. Systèmes avec un firmware U-Boot

Comme mentionné précédemment, il n'existe malheureusement pas de norme pour le firmware système sur les systèmes ARM. Même le comportement de différents systèmes utilisant nominalement le même firmware peut être assez différent. Cela est dû au fait qu'une grande partie des appareils utilisant l'architecture ARM sont des systèmes embarqués, pour lesquels les fabricants construisent généralement des versions de firmware fortement personnalisées et incluent des correctifs spécifiques au périphérique. Malheureusement, les fabricants soumettent souvent leurs modifications et extensions aux développeurs de firmware principaux, donc leurs modifications ne sont pas intégrées dans les versions plus récentes du firmware d'origine.

Par conséquent, même les systèmes récemment vendus utilisent souvent un firmware basé sur une version modifiée par le fabricant il y a des années, dont le code source principal a évolué depuis lors et offre des fonctionnalités supplémentaires ou montre un comportement différent dans certains aspects. En plus de cela, la désignation des périphériques intégrés n'est pas cohérente entre différentes versions modifiées par le fabricant du même firmware, il est donc presque impossible de fournir des instructions product-indépendantes utilisables pour les systèmes basés sur ARM.

Si vous avez un système connu, la section 5.1.3.1 détaille comment le faire. Il y a cependant des directives générales et vous devrez probablement les ajuster pour votre cas spécifique.

5.1.3.1. Amorçage TFTP dans U-Boot

L'initialisation réseau sur les systèmes utilisant le firmware U-Boot se compose de trois étapes :

  • a) configuration du réseau,
  • b) chargement des images (noyau/ramdisk initial/dtb) en mémoire
  • c) exécution du code précédemment chargé.

Tout d'abord, vous devez configurer le réseau, soit automatiquement via DHCP en exécutant

setenv autoload no
dhcp

ou manuellement en définissant plusieurs variables d'environnement

setenv ipaddr 
setenv netmask 
setenv serverip 
setenv dnsip 
setenv gatewayip 

Si vous le préférez, vous pouvez rendre ces paramètres permanents en exécutant

saveenv

Ensuite, vous devez charger les images (noyau/ramdisk initial/dtb) en mémoire. Cela se fait avec la commande tftpboot, à laquelle il faut fournir l'adresse à laquelle l'image doit être stockée en mémoire. Malheureusement, la carte mémoire peut varier d'un système à l'autre, il n'y a donc pas de règle générale concernant les adresses pouvant être utilisées pour cela.

Dans certains systèmes, U-Boot pré-définit un ensemble de variables d'environnement avec des adresses de chargement adaptées : kernel_addr_r, ramdisk_addr_r et fdt_addr_r. Vous pouvez vérifier s'ils sont définis en exécutant

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

S'ils ne sont pas définis, vous devez consulter la documentation de votre système pour des valeurs appropriées et les définir manuellement. Pour les systèmes basés sur les SOC Allwinner SunXi (par exemple, l'Allwinner A10, nom d'architecture “sun4i” ou l'Allwinner A20, nom d'architecture

“sun7i”), vous pouvez par exemple utiliser les valeurs suivantes :

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

Une fois les adresses de chargement définies, vous pouvez charger les images en mémoire depuis le serveur TFTP précédemment défini avec

tftpboot ${kernel_addr_r} 
tftpboot ${fdt_addr_r} 
tftpboot ${ramdisk_addr_r} 

La troisième partie consiste à définir la ligne de commande du noyau et à exécuter le code chargé. U-Boot transmet le contenu de la variable d'environnement “bootargs” comme ligne de commande au noyau, donc tous les paramètres pour le noyau et l'installateur - tels que le périphérique de console (voir la section 5.3.1, “Console de démarrage”) ou les options de préconfiguration (voir la section 5.3.2, “Paramètres de l'installateur Ubuntu” et l'annexe B, Automatisation de l'installation en utilisant la préconfiguration) - peuvent être définis avec une commande comme

setenv bootargs console=ttyS0,115200 rootwait panic=10

La commande exacte pour exécuter le code chargé dépend du format de l'image utilisé. Avec uImage/uInitrd, la commande est

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

et avec des images Linux natives, c'est

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

Remarque : Lors du démarrage des images Linux standards, il est important de charger l'image du ramdisk initial après le noyau et le dtb car U-Boot définit la variable filesize sur la taille du dernier fichier chargé et la commande bootz nécessite la taille de l'image du ramdisk pour fonctionner correctement. En cas de démarrage d'un noyau spécifique à la plate-forme, c'est-à-dire un noyau sans arborescence de périphériques, il suffit d'omettre le paramètre ${fdt_addr_r}.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X