EFI et Boot.efi: le Bootloader OS X
Comme vous devez sans doutes le savoir, les Mac Intel sont des machines qui ne fonctionnent pas avec un BIOS, mais l'EFI.
l'EFI (Extensible Firmware Interface) a été développé par Intel dans les années 2000 comme successeur du bios. En effet, son potentiel est très intéressant puisqu'il est capable de prendre en charge de nombreux périphériques, offrir une interface graphique haute résolution, lancer différents systèmes d'exploitation.
Chez Apple, l'EFI est apparu avec les Mac Intel. Il semblerait que la société utilise l'Intel Platform Innovation Framework comme environnement de programmation pour le firmware de leurs machines.
Les différents modèles Mac Intel possèdent différentes version de l'EFI. Par exemple, les premiers modèles possèdent un firmware EFI 32 bits en version 1.1, alors que les derniers modèles possèdent un firmaware EFI compatible 64 bit mixant les versions 1.1 et 2.0 de l'EFI.
Le processus de boot sur un Mac Intel
Dans un premier temps, la machine est initialisée par le firmware EFI, qui teste les différents composants hardware (POST).
Le Firmware initialise les drivers EFI pour les divers composants de la machine, comme par exemple les pilotes graphiques, firewire, ethernet.. etc, mais aussi de quoi lire les systèmes de fichiers (comme le HFS+) et les partitions afin d'amorcer le lancement du système d'exploitation.
Cette partie du Firmware est placée dans la "BootROM" (dont la version est visible dans Informations système -> Matériel).
Ensuite la bootROM, qui connait le dernier système d'exploitation démarré (stocké dans la NVRAM), choisi donc la bonne partition à amorcer et passe la main à boot.efi qui va lancer OS X.
boot.efi est le bootloader pour les Mac Intel (bootX pour power PC), et se trouve dans /System/Library/CoreServices. Une copie est également présente dans /usr/standalone/i386/
Par souci de rapidité, Boot.efi tente alors de charger une version "pré-linkée" du Kernel contenant les Extensions nécessaires au boot (se trouve dans /System/Library/Caches/com.apple.kext.caches/Startup/ (Snow Leopard)), puis le fichier Extensions.mkext si le kernel pré-linké n'est pas utilisable, et enfin le dossier System/Library/Extensions/ si le mkext n'est pas utilisable à son tour (ce qui revient à un boot -f).
Une fois le kernel et les extensions lus, le kernel est initialisé et le chargement du système s'effectue.
Enfin lors du chargement du système d'exploitation, les Mac Intel vont communiquer avec la puce SMC (System Management Controller), un autre firmware uniquement présent sur les Mac Intel, qui contrôle la gestion de l'énergie, mais est également utilisée comme mesure de protection via l'extension Don't Steal Mac OS X.kext.
Les Bootloaders pour Hackintosh: bios et fichier boot
La grande majorité des PC standards utilisent encore le BIOS en lieu et place de l'EFI.
Pour résumer, l'utilisation du BIOS rend caduque toute tentative de démarrer OS X depuis autre chose qu'un Mac.
En effet, nous avons vu dans le précédent chapitre que les processus d'initialisation et de boot sont entièrement liés à non seulement l'EFI de manière général, mais surtout au firmware spécifique des Mac via la BootROM. Sans cette BootROM, boot.efi est incapable d'être appelé et de charger OS X..
C'est pourquoi on utilise des bootloaders complètement différents: tous basés sur le Boot-132, ils sont des alternatives processus de boot fourni par Apple. (pour plus de détails, Et ça continue: APSL, Boot-132...)
Avec des bootloaders tels que Chameleon ou PC_EFI, le processus de boot est donc sensiblement différent.
En effet, une machine BIOS cherche typiquement l'amorçage d'un système d'exploitation dans la table de partition des disques dur après son initialisation. (plus de détails sur le processus ici)
Ainsi, le bootloader doit répondre à plusieurs exigences: être présent dans le MBR du disque (premier secteur de boot), doit posséder des pilotes HFS+ afin de lire la partition système et trouver le fichier de boot, être capable de faire l'intermédiaire entre le bios et le système d'exploitation, lire et initialiser le kernel et les extensions... etc.
Lorsque vous installez Chameleon (cf. Chameleon v2 Acte I : l'installation), vous installez entre autres un fichier boot0, qui écrit un secteur de boot sur votre partition, et un fichier boot qui va à la racine de votre partition, et qui est en fait le remplaçant de boot.efi.
Une fois amorcé, boot0 part à la recherche de ce fichier boot, et une fois ce dernier chargé (interface graphique...etc) il pourra alors lancer le système.
Chameleion possède quelques spécificités: il ne se contente pas d'aller chercher le fichier Extensions.mkext ou les Extensions dans leurs emplacements habituels, il est également capable de charger ces fichiers depuis un emplacement qui lui est propre: Le dossier Extra
Ainsi, il est possible de spécifier en premier lieu des extensions spécifiques au hackintoshs.
Il peut également injecter dans le registre des périphériques de votre machine, via les devices-properties (pour les courageux: Driver and Device Matching), lire un un fichier DSDT qui corrige certaines tables du bios pour rendre votre machine plus "compatible" en envoyant ces corrections à OSX... etc.
En effet, certains kexts, tel le tant redouté AppleIntelCPUPowerManagement.kext qui a besoin de certaines tables ACPI généralement non présentes (HPET), ou pas sous la bonne forme dans la plupart des BIOS classiques, et provoque un "kernel panic".
De même, du fait de la non présence de la puce SMC, le système empêchera l'accès à l'interface graphique du système.
Dans ce cas, vous aurez besoin d'une Extensions "tierce" pour outre-passer ce système de protection.
La transition des PC vers l'EFI: que peut-on en espérer?
Actuellement, même si cela est d'actualité depuis des années, les constructeurs de cartes mères semblent entamer la transistion du BIOS ver l'EFI.
Une réaction un peu optimiste consisterait à se dire: "chouette, on va pouvoir lancer OSX sans Hack". Mais si vous avez bien suivit ce que l'on a vu dans les précédent chapitres, la question est largement plus compliquée.
En effet, l'EFI est l'une des nombreuses conditions afin de lancer Mac OSX. Au delà de l'environnement que représente l'EFI, Apple embarque des bootROM spécifiquement programmées et qui ne sont pas open-source. Ces bootROM contiennent des pilotes pour des périphériques spécifiques, et flasher sa carte mère avec une bootROM Apple reviendrait, par exemple, à flasher sa carte mère Intel avec un bios Asus...
Il faudrait donc isoler le code spécifique à l'amorçage du système, et l'intégrer à l'EFI de la carte mère.
Un projet, mais qui semble abandonné, essayait d'aller dans ce sens.
Autre problème à résoudre, la puce SMC. Au delà du fait que contourner cette protection illégal, et que vraisemblablement un ou des développeurs prendrait de gros risques à l'intégrer à un bootloader, il faudrait trouver moyen de l'émuler à même la BootROM, ce qui semble plus simple à dire qu'à faire.
Enfin, EFI ou non, les table ACPI devrons également être corrigées à même la bootROM, sinon AppleIntelCPUPowerManagement.kext provoquera un kernel panic.
Tout ceci, bien entendu, devrait être "généralisable" à de nombreuses cartes mère différentes des unes des autres, sans quoi cette technique de "flash" n'aurait aucun intérêt pour la plupart des utilisateurs.
Ainsi, même si cela est techniquement possible, il serait plutôt compliqué de sortir un tel projet du cadre expérimental pour le généraliser et en faire une solution viable.
Bref, non verrons sans doutes dans les prochains mois de nouvelles tentatives dans ce sens, qui pourrons peut-être aboutir, tout cela étant lié au talent du ou des développeurs qui travaillerons dans ce sens, de l'intérêt que cela peut représenter, et bien entendu de la vitesse à laquelle l'EFI sera adopté par les fabricants de cartes mères.
http://refit.sourceforge.net/info/boot_process.html
http://developer.apple.com/mac/library/DOCUMENTATION/...
| L'erreur Still Waiting For Root Device | Chipset audio et AppleHDA |
|---|



Commentaires
Je bootais sur la partition ou est installé Leopard (10.5.8) et lorsque je choisissait la partition ou est installé Snow Leopard, j'avais droit à un kernel panic à cause d'un kext nécessaire à Leopard incompatible avec Snow Leopard.
Chameleon passe donc par le dossier Extra de la partition sur laquelle on boote et passe ensuite par le dossier Extra de la partition sélectionné.