5.1. Démarrer l'installateur sur ARM

5.1.1. Formats des images d'amorçage

Dans la plupart des cas, un ou deux types d'image d'amorçage sont utilisés sur les systèmes ARM : a) un noyau Linux standard au format zImage (« vmlinuz ») associé à un initrd Linux standard (« initrd.gz ») ou b) un noyau au format uImage (« uImage ») associé à un initrd correspondant (« uInitrd »).

uImage/uInitrd are image formats designed for the U-Boot firmware that is used on many ARM-based systems (mostly 32-bit ones). Older U-Boot versions can only boot files in uImage/uInitrd format, so these are often used on older armel systems. Newer U-Boot versions can - besides booting uImages/uInitrds - also boot standard Linux kernels and ramdisk images, but the command syntax to do that is slightly different from that for booting uImages.

For systems using a multiplatform kernel, besides kernel and initial ramdisk a so-called device-tree file (or device-tree blob, « dtb ») is needed. It is specific to each supported system and contains a description of the particular hardware. The dtb should be supplied on the device by the firmware, but in practice a newer one often needs to be loaded.

5.1.2. Configuration de la console

The netboot tarball (Section 5.1.3.2, « Archive netboot précompilée »), and the installer SD-card images (Section 5.1.5, « Utiliser les images précompilées de l'installateur pour cartes SD ») use the (platform-specific) default console that is defined by U-Boot in the « console » variable. In most cases that is a serial console, so on those platforms you by default need a serial console cable to use the installer.

Sur les plates-formes qui prennent en charge aussi une console vidéo, vous pouvez modifier la variable « console » de U-Boot pour que l'installateur démarre sur la console vidéo.

5.1.3. Amorcer à partir de TFTP

Pour amorcer depuis le réseau, il vous faut une connexion au réseau et un serveur TFTP (et aussi, sûrement, un serveur DHCP, RARP ou BOOTP pour la configuration automatique du réseau).

L'installation côté serveur pour l'amorçage depuis le réseau est décrite dans la Section 4.3, « Préparer les fichiers pour amorcer depuis le réseau avec TFTP ».

5.1.3.1. Amorcer à partir de TFTP avec U-Boot

Sur les systèmes utilisant le microprogramme U-Boot, l'amorçage depuis le réseau est effectué en trois étapes : a) configurer le réseau, b) charger les images (noyau/initrd/dtb) en mémoire et c) exécuter le code chargé.

Premièrement, il faut configurer le réseau automatiquement avec DHCP en exécutant :

setenv autoload no
dhcp

ou manuellement en positionnant plusieurs variables d'environnement :

setenv ipaddr <adresse ip du client>
setenv netmask <masque réseau>
setenv serverip <adresse ip du serveur tftp>
setenv dnsip <adresse ip du serveur de noms>
setenv gatewayip <adresse ip de la passerelle par défaut>

Si vous préférez, vous pouvez rendre ces réglages permanents en exécutant :

saveenv

Une fois cette étape exécutée, vous devez charger les images (noyau/initrd/dtb) en mémoire avec la commande tftpboot qui doit être appelée avec l'adresse à laquelle charger l'image. Malheureusement, l'adressage de la mémoire varie d'un système à l'autre et il n'y a donc pas de règle générale à appliquer.

Sur 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 si elles sont définies en exécutant :

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Si elles ne sont pas définies, vous devez consulter la documentation de votre système et les positionner manuellement. Pour les systèmes basés sur les puces Allwinner SunXi (par exemple, les Allwinner A10 ou A20, noms d'architecture sun4i et sun7i), vous pouvez utiliser les valeurs suivantes :

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

Lorsque les adresses de chargement sont définies, vous pouvez charger les images depuis le serveur tftp défini précédemment avec :

tftpboot ${kernel_addr_r} <fichier de l'image du noyau>
tftpboot ${fdt_addr_r} <fichier du dtb>
tftpboot ${ramdisk_addr_r} <fichier de l'image initrd>

La troisième étape consiste à positionner la ligne de commande du noyau et exécuter le code chargé. U-boot envoie le contenu de la variable d'environnement « bootargs » au noyau. Tous les paramètres pour le noyau et l'installateur — comme le périphérique d'interface (consultez la Section 5.3.1, « Console d'amorçage ») ou les options de préconfiguration (consultez la Section 5.3.2, « Paramètres pour l'installateur Debian » et l'Annexe B, Automatisation de l'installation par préconfiguration) — peuvent être positionnés avec une commande comme celle-ci

setenv bootargs console=ttyS0,115200 rootwait panic=10

La commande exacte pour exécuter le code chargé dépend du format d'image utilisé. Pour le format uImage/uInitrd, la commande sera :

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

et avec une image Linux native, elle sera :

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

Note : dans le cas de l'amorçage avec une image Linux standard, il est important de charger l'initrd après le noyau et le dtb, car U-Boot positionne la variable filesize à la taille du dernier fichier chargé, et la commande bootz a besoin de la taille de cet initrd pour fonctionner correctement. Dans le cas de l'amorçage d'un noyau spécifique (c'est-à-dire sans arbre de périphériques), il suffit d'omettre le paramètre ${fdt_addr_r}.

5.1.3.2. Archive netboot précompilée

Debian fournit une archive précompilée ( .../images/netboot/netboot.tar.gz ) qui peut être simplement décompressée sur un serveur TFTP et qui contient tous les fichiers nécessaires à l'amorçage par le réseau (netboot). Elle contient aussi un script qui automatise toutes les étapes pour lancer l'installateur. Les versions récentes de U-Boot contiennent une fonctionnalité d'amorçage automatique par TFTP. Celle-ci s'active s'il n'y a aucun périphérique local amorçable (MMC/SD, USB, IDE/SATA/SCSI) en chargeant ce script d'amorçage depuis le serveur TFTP. Pour utiliser cette fonctionnalité, vous devez avoir un serveur DHCP dans le réseau qui fournit au client l'adresse du serveur TFTP.

Pour démarrer la fonctionnalité d'amorçage automatique par TFTP depuis l'invite de commande de U-Boot, entrez la commande suivante :

run bootcmd_dhcp

Pour charger manuellement le script d'amorçage fourni par l'archive, entrez la commande suivante à l'invite de U-Boot :

setenv autoload no
dhcp
tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr
source ${scriptaddr}

5.1.4. Amorcer sur une clé USB avec U-Boot

De nombreuses versions récentes de U-Boot ont une prise en charge de l'USB et permettent d'amorcer depuis un périphérique de stockage USB comme une clef USB. Malheureusement, la procédure exacte peut varier d'un périphérique à l'autre.

La version 2014.10 de U-Boot a introduit un cadre applicatif pour une gestion commune de la ligne de commande et l'autoboot. Cela permet de construire des images d'amorçage génériques qui fonctionnent sur tous les systèmes qui implémentent ce cadre applicatif. L'installateur Debian prend en charge l'installation depuis une clef USB sur ces systèmes, mais malheureusement tous n'ont pas encore adopté ce cadre applicatif.

Pour construire une clef USB amorçable pour installer Debian, décompressez l'archive tar hd-media (consultez la Section 4.2.1, « Où trouver les fichiers d'installation ? ») sur une clef USB formatée avec un système de fichiers pris en charge par la version de U-Boot de votre périphérique. Pour les versions modernes de U-Boot, FAT16, FAT32, ext2, ext3 et ext4 fonctionnent généralement. Ensuite, copiez l'image ISO du premier CD ou DVD Debian sur cette clef.

Le cadre applicatif autoboot des versions récentes de U-Boot fonctionne de la même façon que l'option d'ordre d'amorçage du BIOS dans un PC, c'est-à-dire qu'il cherche, sur une liste des périphériques, une image d'amorçage valide et démarre la première qu'il trouve. S'il n'y a aucun système d'exploitation installé, brancher la clef USB et démarrer le système devrait amorcer l'installateur. Vous pouvez aussi engager l'amorçage USB à n'importe quel moment en entrant la commande « run bootcmd_usb0 » à l'invite de U-Boot.

Un des problèmes qui peut apparaître en amorçant depuis une clef USB tout en utilisant une console série est une erreur de vitesse de transmission (baudrate). Si une variable console est définie dans U-Boot, le script d'amorçage de l'installateur Debian la passera automatiquement au noyau pour définir la première console et, si besoin, la fréquence de cette console. Malheureusement, la gestion de la variable console peut varier d'une plate-forme à l'autre : sur certaines elle contient la fréquence (comme dans « console=ttyS0,115200 »), tandis que sur d'autres elle ne contient que le périphérique (« console=ttyS0 »). Le dernier cas peut mener à une sortie confuse lorsque la fréquence par défaut diffère entre U-Boot et le noyau. Les versions modernes de U-Boot utilisent souvent 115200 bauds alors que le noyau est toujours configuré par défaut à 9600 bauds. Si cela arrivait, vous devriez définir la variable console manuellement pour qu'elle contienne la fréquence correcte pour votre système, et ensuite démarrer l'installateur avec la commande « run bootcmd_usb0 ».

5.1.5. Utiliser les images précompilées de l'installateur pour cartes SD

Pour de nombreux systèmes, Debian fournit des images de cartes SD qui contiennent à la fois U-Boot et l'installateur Debian. Ces images sont disponibles en deux variantes : une qui télécharge les paquets sur le réseau ( .../images/netboot/SD-card-images/ ) et une autre pour des installations sans réseau qui utilise un CD ou DVD Debian ( .../images/hd-media/SD-card-images/ ). Pour économiser l'espace disque et la bande passante, les images sont construites en deux parties : une partie dépendante du système appelée « firmware.<type_de_système>.img.gz » et une indépendante appelée « partition.img.gz ».

Pour créer une image complète à partir des deux fichiers, sur un système Linux vous pouvez utiliser la commande zcat :

zcat firmware.<type_de_système>.img.gz partition.img.gz 
> complete_image.img

Sur les systèmes Windows, vous devrez d'abord décompresser les deux parties séparément, par exemple avec 7-Zip, et ensuite les concaténer en exécutant la commande suivante dans une fenêtre de commande CMD.exe :

copy /b firmware.<type_de_système>.img + partition.img complete_image.img

Écrivez l'image résultante sur une carte SD en exécutant la commande suivante sur un système Linux :

cat complete_image.img 
> /dev/PÉRIPHÉRIQUE_DE_LA_CARTE_SD

Après avoir branché la carte SD dans le système cible, mettez-le sous tension et l'installateur se chargera depuis la carte SD. Si vous utilisez la variante hd-media pour les installations sans le réseau, vous devrez fournir à l'installateur un accès au premier CD ou DVD Debian sur un medium distinct (qui peut être aussi une image ISO de CD ou DVD sur une clef USB).

Arrivé à l'étape de partitionnement (voyez la Section 6.3.3, « Partitionnement et points de montage »), vous pourrez supprimer ou remplacer toutes les partitions existantes sur la carte. Une fois l'installateur démarré, il s'exécute entièrement depuis la mémoire principale du système et n'a plus besoin d'accéder à la carte SD. Vous pouvez donc utiliser cette même carte pour installer Debian. La façon la plus facile de créer une table de partition sur la carte SD est de laisser l'installateur le faire automatiquement (voyez la Section 6.3.3.2, « Le partitionnement assisté »).