UEFI : le nouveau BIOS
Transcription
UEFI : le nouveau BIOS
Technologie UEFI, à la découverte du nouveau BIOS Table des matières Technologie UEFI, à la découverte du nouveau BIOS ............................ 1 Plongeons nous dans les entrailles de nos machines .............................. 2 Naissance d’EFI .......................................................................... 2 Voyons un peu comment est construit un EFI ....................................... 3 Concrètement, comment identifier un EFI ? ......................................... 3 Bootons en EFI (sur Linux) ............................................................. 4 Le shell EFI ........................................................................................................................................ 5 efilinux ................................................................................................................................................ 6 Installation de Windows sur un ordinateur EFI ...................................... 7 Pour installer Windows sur un ordinateur EFI .............................................................................. 7 Une compilation d’un texte posté par Pinaraf le 25/10/11 à 17:55. Modéré par baud123 sur http://linuxfr.org et d’un article publié en octobre 2009 sur Technet Microsoft : http://technet.microsoft.com/fr-fr/library/dd744321(v=ws.10).aspx Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 1 UEFI : le nouveau BIOS Qu’il semble loin le temps, béni pour certains, maudits pour d’autres, où il était nécessaire de connaître les IRQ et DMA de sa machine pour l’utiliser, où, loin du plug’n’play, le matériel se contentait de laisser l’humain configurer… Puis vint le plug’n’play, son compagnon l’ACPI permettant de lister le matériel et de le configurer magiquement. Mais toujours, au sein de la machine, un petit logiciel, le BIOS. Plongeons nous dans les entrailles de nos machines Le BIOS est, de manière assez surprenante, l’élément probablement à l’origine du succès de l’IBM PC. En effet, le BIOS, l’élément primitif indispensable au démarrage de la machine, a été mis, non pas sur les disques de boot, mais en ROM sur la carte mère. Quelques années plus tard, après un peu de rétro ingénierie, des fabricants ont pu commencer à vendre des clones de PC compatibles, basés sur une ré‐implémentation du BIOS. Le BIOS est moche, clairement ; très basique, très crade. Mais il faisait son travail, il fournit une abstraction très primitive du matériel. On pouvait presque écrire un OS uniquement en faisant des appels au BIOS, comme DOS. Les appels au BIOS sont très simples : il s’agit tout bêtement d’une série d’interruptions matérielles. À travers l’IRQ 0x10, on peut donner différentes instructions à la carte graphique, via le registre AH : défilement (scrolling), changement de mode et des couleurs. L’IRQ 0x13 permet de contrôler les disques. Naissance d’EFI Mais avec l’évolution du matériel, les limites sont apparues : le BIOS utilise un mode 16 bits, ne lui permettant pas d’adresser toute la RAM, l’amorçage par le réseau ou par CD est apparu, l’USB est arrivé. Récemment toutefois, nous avons atteint une limite très difficile à surmonter : la table des partitions gérée par le BIOS ne permet pas d’exploiter des disques de plus de 2 Téra bytes. En parallèle, depuis la fin des années 90, Intel avait développé, en partenariat avec HP, l’architecture Itanium, pour laquelle l’utilisation du BIOS n’était pas envisageable. Ainsi, Intel développa un outil moderne, puissant, flexible, simple et unanimement repris : l’EFI. Bon, OK, en vrai c’est plus compliqué : en 1994, l’IEEE avait déjà standardisé Open Firmware, une solution multiplateforme et acceptée pour accomplir une tâche similaire au BIOS. Utilisé sur les machines Sun, Apple, IBM, c’est un outil qui a fait ses preuves et continue à les faire. Mais pour Intel, Open Firmware n’est pas acceptable. Officiellement, c’est parce que l’Open Firmware duplique l’ACPI en fournissant son propre arbre de périphériques. Mais, depuis, le projet OLPC a prouvé qu’en fait, c’est possible. Par contre dans EFI, il y a un arbre de périphériques potentiellement différent de celui de l’ACPI (et vous êtes loin de la fin de ce journal, hein). Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 2 UEFI : le nouveau BIOS EFI est décrit dans une spécification, contrairement au BIOS, qui n’a jamais eu de telle documentation : 2 210 pages, plus les 800 pages d’ACPI. Mangez la spécification, c’est du bon. Bien sûr, EFI a évolué lui aussi : la norme EFI a cessé d’évoluer et l’UEFI fut créé à partir d’EFI 1.10. UEFI est une évolution d’EFI contrôlée par le Forum UEFI et non plus par Intel. En 2007, la version 2.1 d’UEFI a apporté la cryptographie, l’authentification réseau, la possibilité de construire une interface graphique. Ouais, on parle toujours de « firmware ». Voyons un peu comment est construit un EFI On a en fait trois couches dans EFI. Au cœur, se trouve le PEI, Pre‐EFI Initialization. Responsable de l’initialisation très bas niveau, comme le contrôleur mémoire (truc super tordu mine de rien, cf. les présentations des auteurs de coreboot), il gère à la fois le tout début de l’allumage de la machine, mais aussi la sortie de veille. Une fois qu’il a fait son travail, il laisse la main à la deuxième couche et disparaît. La deuxième couche se nomme DXE, Driver eXecution Environment. C’est ce que l’on voit finalement du firmware. C’est un élément indépendant du matériel, capable de charger des pilotes et fournissant des interfaces génériques et normalisées aux applications souhaitant l’utiliser. Enfin, la troisième couche, les applications EFI, en majeure partie les bootloaders donc… Alors, si vous trouvez que ça ressemble à BIOS + OS + applications, difficile d’argumenter tellement ça semble exact ! Au passage, a priori, une application EFI dépend de l’architecture : elle sera x86, x86-64, ia64. Concrètement, comment identifier un EFI ? Hum, c’est une bonne question. Je dispose depuis quelques jours d’un ordinateur portable ASUS utilisant un magnifique UEFI. Mais, par défaut, une émulation du BIOS est présente, permettant de lancer un GRUB sans soucis. Pire encore, par défaut, le boot EFI n’est même pas activé sur les clés USB, par exemple. J’avoue ne pas avoir trouvé de solution depuis GNU/Linux pour le savoir. À vrai dire, c’est le but de l’émulation du BIOS, non ? Et le Windows n’a pas vécu assez longtemps (0 seconde) pour vérifier. Seul un passage par l’interface de configuration du firmware (ce que, par abus de langage, on appelait BIOS) prouve que l’on est face à une machine EFI. Heureusement, ici, pas d’interface graphique qui bouge dans tous les sens. Nous avons une interface sobre, classique, contrôlée au clavier, avec des options comme « UEFI Boot », pour nous mettre sur la voie. Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 3 UEFI : le nouveau BIOS Bootons en EFI (sur Linux) Dans mon ignorance, j’ai installé ma Debian classiquement, sans réfléchir : 256 Mio pour un « /boot » en ext3, le reste en volume physique LVM, un GRUB, et ça roule ! Et je ne peux donc pas profiter d’un boot EFI : le chargeur d’amorçage (boot loader) pour EFI doit être stocké sur une partition pour laquelle un pilote est chargé. Ne pouvant ajouter de pilote ext3 dans mon firmware, je me vois contraint d’avoir une partition FAT pour le chargeur d’amorçage ! Mon premier objectif n’étant pas la destruction de mon amour propre et de ma distribution, j’opte donc pour une solution plus sage : booter en EFI sur une clé USB. Le boot EFI 100 % natif top moumoute viendra plus tard. Préparons donc une clé USB à booter en EFI. Mais que mettre dessus ? Mettre un GRUB classique pour un BIOS, je sais faire. Mais un EFI ne mange pas de ce pain. Ma clé USB était une clé USB classique, partitionnée avec une table de partitions DOS et une seule partition FAT32. Je décidai, pour l’expérience, de la maltraiter un peu. Mais, normalement, vous n’avez pas à la maltraiter à ce point. Donc maltraitons‐la : passons‐la en GPT, nouveau format de table de partitions, permettant de passer outre la limite des 2 Tio (indispensable sur une clé de 8 Gio). Pour ce faire, parted est notre ami, avec la commande « mklabel gpt » (ce journal ne visant pas à faire de vous un expert de parted, je n’irai pas plus loin). Il suffit donc d’avoir une table des partitions valide, comprise du BIOS, et d’y glisser subtilement une partition FAT. Faisons donc. Mais que mettre sur cette partition FAT, et où ? C’est là où j’ai perdu le plus de temps finalement. J’avais expliqué tantôt que l’EFI charge une application, la plupart du temps un chargeur d’amorçage. Mais je ne suis pas fou, je ne vais pas directement tenter GRUB. Tentons plus simple, plus utile aussi, pour une clé USB : l’EFI shell (explications dans un paragraphe, j’ai pas trouvé mieux comme organisation). Le projet tiano-core, une implémentation libre du cœur d’UEFI, nous fournit ce shell à l’adresse suivante : http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell. Mettons ce shell sur la clé USB. Pour cela, je crée un dossier EFI, et je mets dedans le fichier « shell.efi ». Mais ça ne marche pas (n’essayez pas). En effet, il faut mettre un bon nom au fichier. Le fichier d’amorçage, dans le cas d’une clé USB en x86-64, doit être à l’emplacement suivant : « \EFI\boot\bootx64.efi ». Notez l’utilisation de la notation x64 pour parler d’x86-64, que l’on nomme amd64, x64 est la notation de Sun et Microsoft. Et la contre‐oblique (anti‐slash) est de mise en EFI. Une fois le fichier mis sur la clé et la machine démarrée, on se retrouve dans le grandiose EFI shell ! Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 4 UEFI : le nouveau BIOS Le shell EFI Le premier qui dit que ça ressemble à DOS, gagne un cadeau Bonux. Notons tout d’abord la liste des périphériques bloc détectés, affichée en haut de l’écran au lancement du shell. Un conseil : ajoutez immédiatement ce logiciel dans votre trousse à outils pour dépanner des machines. Je ne plaisante pas : il me semble être tout simplement indispensable, pour les futurs EFI bogués, de disposer de cet outil et des quelques utilitaires qu’il propose. Vous voici maintenant devant un shell à l’invite fort engageante, couleur jaune sur un fond noir : Shell> Voici les commandes qui m’ont semblé intéressantes (je ne m’amuserai plus à recopier tout le résultat des commandes) : help : l’indispensable ; drivers : liste l’ensemble des pilotes chargés dans l’UEFI. Comme ça, quand votre clé USB 4 ne fonctionnera pas, vous pourrez charger un pilote USE 4 depuis votre clé USB 3 ; devices : liste les périphériques connus, mais c’est moins joli que devtree. Sur mon PC portable, j’ai 8 périphériques : fs0 alias hd22b0d0b (après plusieurs reboots : cet identifiant est dynamique) alias blk0 : Acpi(PNP0A03,0)/Pci(1D|0)/Usb(1,0)/Usb(3,0)/HD(Part1,Sig64ED66ECD248-412A-AEEB-B0ECA830E264) blk1 : Acpi(PNP0A03,0)/Pci(1F|2)/Sata(0,0)/HD(Part1,Sig0003AC8C) blk2 : Acpi(PNP0A03,0)/Pci(1F|2)/Sata(0,0)/HD(Part2,Sig0003AC8C) blk3 : Acpi(PNP0A03,0)/Pci(1F|2)/Sata(0,0) blk4 : Acpi(PNP0A03,0)/Pci(1F|2)/Sata(2,0) blk5 : Acpi(PNP0A03,0)/Pci(1D|0)/Usb(1,0)/Usb(3,0) OK, facile de deviner : fs0 est la partition 1 de la clé USB. Mais que faire d’autre maintenant ? Mouais… Pas super fun. Au passage, vous verrez des commandes pour le support de DHCP, d’IPv4. Rien pour IPv6 par contre. Ça c’est l’avenir. Explorons donc plutôt le système de fichiers. Vous vous souvenez bien de DOS ? Si oui, c’est facile : fs0: Et voilà, vous êtes dans le disque fs0… Puis, vous pouvez utiliser les bonnes vieilles commandes DOS du type « cd », « dir » (ou « ls », ouf !), type (et pas « cat »)… Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 5 UEFI : le nouveau BIOS Mais passons à plus rigolo : bootons un Linux depuis EFI ! efilinux efilinux est une solution très récente et très simple pour amorcer un Linux depuis EFI. C’est le LILO d’EFI, en quelque sorte. Il est disponible en paquet Debian, et contient principalement le fichier suivant : « /usr/lib/efilinux/efilinux.efi ». On va donc mettre « efilinux.efi » sur la clé USB et l’accompagner d’un vmlinuz et de l’initrd correspondant. On se retrouve donc avec dans `« fs0:/EFI » les fichiers suivants : « « « « boot\bootx64.efi », le shell ; vmlinuz-3.1.0-rc7-amd64 » ; initrd-3.1.0-rc7-amd64 » ; efilinux.efi ». La méthode d’amorçage est très très simple : fs0: cd EFI efilinux.efi -f 0:\EFI\vmlinuz-3.1.0-rc7-amd64 root=/dev/mapper/asus--laptop-root ro initrd=0:\EFI\initrd-3.1.0-rc7-amd64 Et voilà ! Vous avez amorcé votre premier noyau avec un système EFI « pur ». Et vous verrez la différence : $ dmesg | grep -c -i efi 308 Contre 0 ou 1 auparavant… Devant la longueur de ce journal, il est urgent d’attendre avant de continuer. Prochain épisode : je remplace GRUB par un gestionnaire d’amorçage UEFI… Puis, je code une appli UEFI ! P.‐S. : je ne peux garantir que tout ceci fonctionne sur une machine Apple, tout simplement parce qu’elles utilisent une solution bâtarde entre EFI et UEFI, avec un comportement souvent différent de ce que l’on voit sur les machines des autres constructeurs. Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 6 UEFI : le nouveau BIOS Installation de Windows sur un ordinateur EFI Publication: octobre 2009 http://technet.microsoft.com/fr-fr/library/dd744321(v=ws.10).aspx S'applique à: Windows 7, Windows Server 2008 R2 Si vous installez Windows® sur un ordinateur EFI, vous devez activer le mode EFI dans le microprogramme de l’ordinateur, qu’il s’agisse d’installations assistées ou sans assistance. Vous devez également démarrer sur le support de préinstallation 64 bits en mode EFI (Windows PE 64 bits en mode EFI ou Installation de Windows 64 bits en mode EFI). Vous ne pouvez pas installer Windows sur les ordinateurs UEFI en mode BIOS. (Pour plus d’informations sur le basculement des modes, voir votre documentation sur le microprogramme EFI.) Les étapes décrites dans cette rubrique sont données à titre de référence seulement et peuvent ne pas correspondre aux commandes propres à votre type de microprogramme EFI. Une fois Windows installé, vous pouvez apporter des modifications de configuration supplémentaires à votre image. Cette image système Windows devient l’image maître utilisée pour le déploiement sur d’autres ordinateurs. Pour installer Windows sur un ordinateur EFI 1. Installez Windows en exécutant l’installation de Windows à partir d’une entrée de démarrage EFI sur l’ordinateur principal. Utilisez l’interpréteur de commandes EFI ou le menu Démarrer à partir d’un fichier du microprogramme pour lancer le chargeur de démarrage EFI Windows sur le disque d’installation. Pour plus d’informations, voir la documentation de votre microprogramme. 2. À partir de l’interpréteur de commandes EFI, sélectionnez le périphérique à l’aide du support d’installation de Windows, puis démarrez l’application de démarrage EFI. En partant du principe que le périphérique DVD est fs0, utilisez les commandes suivantes pour les ordinateurs à processeur x64 : Copier Shell> Fs0: fs0:> \EFI\BOOT\BOOTX64.EFI Pour les ordinateurs d’architecture Itanium, utilisez la commande suivante : Copier Fs0:\EFI\BOOT\BOOTIA64.EFI Si le gestionnaire de démarrage EFI prend en charge le démarrage à partir d’un DVD, la commande de l’interpréteur de commandes EFI n’est pas nécessaire. Vous pouvez démarrer le DVD directement à partir du gestionnaire de démarrage EFI. 3. Lorsque le système vous le demande, appuyez sur n’importe quelle touche pour démarrer à partir du DVD Windows. Windows s’installe sur l’ordinateur. Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 7 UEFI : le nouveau BIOS Remarque En cas de démarrage de l’environnement de préinstallation Windows (Windows PE) à partir d’un CD-ROM ou d’un DVD, vous pouvez ignorer l'invite « Appuyez sur n’importe quelle touche pour démarrer à partir du CD ou du DVD » et démarrer directement dans Windows PE. En cas de processeur x86 ou AMD64, supprimez le fichier Bootfix.bin de votre image système Windows PE personnalisée. Pour les systèmes Itanium, utilisez le fichier Efisys_noprompt.bin au lieu du fichier Efisys.bin lors de la création de votre image système Windows PE personnalisée. 4. Si vous effectuez une installation assistée, suivez les invites de l’interface utilisateur pour réaliser l’installation de Windows. En option, vous pouvez effectuer une installation sans assistance en utilisant un fichier Autounattend.xml stocké sur un disque mémoire flash USB (UFD) ou sur tout autre périphérique. Pour connaître les conditions requises pour un fichier de réponses d’ordinateur EFI, voir Créer des partitions de disque dur UEFI à l’aide de l’Assistant Gestion d’installation. Remarque Certaines plateformes EFI prennent à la fois en charge les microprogrammes UEFI et BIOS. Sur certains de ces systèmes, il n’est pas toujours évident de déterminer si l’option de démarrage du DVD par défaut est une option de type EFI ou BIOS. Dans ce cas, l’utilisation de la commande de l’interpréteur de commandes EFI peut s’avérer nécessaire. Si vous ne démarrez pas spécifiquement l’installation de Windows en utilisant l’entrée de démarrage EFI, l’entrée de démarrage du microprogramme par défaut pour BIOS peut être utilisée. Si l’installation de Windows démarre en mode BIOS sur un système EFI/BIOS combiné, les partitions ESP et MSR ne sont pas créées. Lorsque l’installation de Windows est terminée, utilisez la commande Diskpart pour vérifier que les partitions ESP et MSR ont été créées. 5. Après l’installation de Windows sur l’ordinateur, effectuez toutes les autres tâches de personnalisation. 6. À partir d’une invite de commandes où vous disposez de droits élevés, exécutez sysprep pour préparer l’image système Windows à l’acquisition des images et au déploiement. Exemple : Copier %WINDIR%\system32\sysprep\sysprep.exe /generalize /oobe /shutdown À la fin de l’exécution de la commande Sysprep, l’ordinateur s’éteint. Le Coach du PC 4 septembre 2012 www.lecoachdupc.com 8