EFI / SMC : aidez-moi à comprendre

gibus67

Membre actif
26 Mars 2011
571
101
Bonsoir,
Suite à un test El Capitan 10.11.1 et un retour arrière à Yosemite 10.10.2 (cause petits soucis pour lesquels je suspectais le firmware) je me pose des questions théoriques et pratiques sur EFI et SMC, dont le gestion n'est pas claire pour moi (et d'autres sans doute ...). L'EFI est dans la ROM de démarrage. On a aussi une partition EFI sur chaque disque bootable. Et peut-etre aussi le trouve-t-on dans l'arborescence système ? Tous ces EFI sont-ils synchronisés et comment le vérifier (voir version d'un EFI disque par exemple) ?
Les changements de version peuvent mettre à jour l'EFI. Quid si je reviens en arrière ?
Dans mon cas par exemple (mini late 2012) j'ai pour EFI / SMC : MM61.0106.B0A / 2.8f0
L'EFI correspond d'après mes recherches à la 10.11.1 mais comme je suis revenu à Yosemite par copie clone et non réinstall j'ai un EFI conçu pour EL Capitan qui tourne avec Yosemite.
Est-ce genant (faut-il que je réinstalle) ?
Pour le SMC j'ai vu que certaines personnes ayant le meme modèle que moi sont en 2.8f1 (forums) mais je ne sais pas comment et pourquoi (lié uniquement au matériel ou mise à niveau loupée). Je n'ai trouvé aucune info sur le site Apple à ce sujet (ne propose pas de SMC à télécharger pour ce modèle).
Désolé pour cette avalanche de questions mais c'est confus pour moi. Merci.
 
EFI, Bios, Firmwares, faut pas s'en préoccuper. Ca n'est pas vraiment OS-dépendant ou OS-relatif. L'EFI c'est l'équivalent du bios; en gros c'est le logiciel de la carte mère qui gère périphériques et hardware.
Et tu ne peux généralement pas downgrader ce genre de trucs; ils sont totalement rétro-compatibles avec les anciens OS vu que ç'a n'impacte pas vraiment directement sur Mac OS.

Par contre concernant votre produit, Apple une version de l'UEFI à jour différente de celle que vous avez installée.
Il faut savoir que ces mises à jour ne sont jamais proposée en téléchargement via l'App Store. Elles sont systématiquement (à moins d'être ultra cruciales) à récupérer manuellement sur le site d'Apple.

Le Mac mini late 2012 a son dernier UEFI noté MM61.0106.B09 (EFI 1.8) à récupérer ici
https://support.apple.com/kb/DL1828?locale=fr_FR&viewlocale=fr_FR


OK, en fait il semblerait qu'El Capitan mette à jour le firmware du Mac Mini 2012. Donc le B0A serait le dernier, pas indépendant, donc Apple ne l'a pas listé à part.

Page pour les mises à jour des versions : https://support.apple.com/fr-fr/HT201518
 
Dernière édition:
Oui les EFI sont bien OS-dependants (si je tente d'installer la B09 il refuse car il faut 10.10.5, et le passage à 10.11.1 a entrainé la B0A) et pas à jour sur le site. De plus le site ne propose qu'une version, ce qui entretient la confusion car tout le monde n'est pas au meme niveau OS bien sur. Savoir si une EFI en avance d'un cran sur l'OS est problématique n'est pas évident. Dans le doute je peux toujours ré-installer Yosemite pour voir s'il rétrograde l'EFI ou pas.
C'est la première fois que je suis dans ce cas (downgrade OS avec un upgrade EFI entre-temps ...)
 
Salut gibus [grand_gibus ou tit_gibus ? - voilà ce que je me demande
361608_original.png
]


L'EFI est dans la ROM de démarrage. On a aussi une partition EFI sur chaque disque bootable. Et peut-etre aussi le trouve-t-on dans l'arborescence système ? Tous ces EFI sont-ils synchronisés et comment le vérifier (voir version d'un EFI disque par exemple) ?
Les changements de version peuvent mettre à jour l'EFI. Quid si je reviens en arrière ?
Dans mon cas par exemple (mini late 2012) j'ai pour EFI / SMC : MM61.0106.B0A / 2.8f0
L'EFI correspond d'après mes recherches à la 10.11.1 mais comme je suis revenu à Yosemite par copie clone et non réinstall j'ai un EFI conçu pour EL Capitan qui tourne avec Yosemite.
Est-ce genant (faut-il que je réinstalle) ?

L'EFI (Extensible Firmware Interface) est le Firmware du Mac, encore appelé son Programme Interne : micro-logiciel (ou programme) recelé dans une puce de la Carte-Mère et qui se trouve directement lancé (launched) lorsqu'on presse le bouton d'alimentation du Mac. C'est donc le programme inaugural.

Ce programme exécute 2 tâches successives, la 2è n'étant exécutée qu'en cas de succès de la 1ère :

- 1° une tâche orientée hardware : le POST (Power-On Self-Test). Elle consiste en un scan des composants matériels du Mac qui (d'après ce que j'en conçois) n'est pas "discrète", mais "holistique" : non pas vérifier, pour chaque composant physique isolément, s'il est opérationnel en soi (comment le faire, avant que le kernel n'ait chargé les extensions du noyau qui les pilotent et donc en activent les fonctions ?) ; mais vérifier la cohérence réciproque de ces composants (leur "valeur de synergie" - si je puis dire). En cas de succès du test, l'EFI fait retentir le "Chime" ou carillon de démarrage et enclenche la tâche n°2.

- 2° une tâche orientée software : le PRE-BOOT. Elle consiste à enclencher le démarrage d'un Système Logique résidant sur la partition d'un disque attaché au Mac. Cet enclenchement implique 2 opérations :

- 2a) le chargement des arguments (flags) résidant dans la mémoire statique NVRAM de la Carte-Mère, toujours "visitée" par l'EFI après le POST. Ainsi, sous «El Capitan», à supposer le SIP (System Integrity Protection) activé, 6 kernel_flags se trouvent associés dans la NVRAM à la valeur 1 (= "TRUE") --> l'EFI va donc charger cet argument au passage. Idem, si se trouve mentionné un EFI_path qui est un chemin à un fichier booter résidant sur une partition-disque, chemin renseigné par l'UUID de la partition suivi de l'adresse logique au fichier en question --> l'EFI va charger cet argument comme adresse exécutive.

- 2b) l'exécution du booter. Le "booter" (abrégé pour "boot_loader" : amorceur de démarrage) est un fichier qui peut être considéré comme une "application primaire" de l'EFI. C'est régulièrement pour OS X le fichier : boot.efi localisé dans l'arborescence de l'OS at: /System/Library/CoreStorage (telle est l'adresse mentionnée en NVRAM en cas d'option de démarrage automatique activée) dont le rôle consiste à charger un cache de démarrage-Système composite combinant le code du kernel (micro-noyau) et le bloc des kexts (extensions du noyau ou pilotes des composants matériels du Mac) de telle façon que le kernel lancé, les kexts vont lui être "injectées en bloc" (passons sur les détails). Une fois que l'EFI a exécuté le booter : boot.efi, son programme coupe jusqu'au prochain re-démarrage (l'EFI n'est pas, comme le kernel, un programme qui opère en continu, mais uniquement séquentiel). Pareillement, une fois que le booter : boot.efi exécuté par l'EFI a chargé le cache de démarrage (classiquement : kernelcache jusqu'à «Yosemite 10.10 inclus ; récemment : prelinkedkernel avec l'OS «El Capitan»), ce programme coupe et n'est donc nullement un opérateur continu.

C'est lors de l'exécution du booter que l'EFI passe à ce programme les flags (arguments de boot) chargés lors de la visite de la NVRAM. Flags que le booter : boot.efi passe à son tour au kernel lors du chargement du cache de démarrage. C'est ainsi que le SIP se trouve pris en compte par le kernel : par la séquence EFI => flags en NVRAM => boot.efi => kernel.​

Si donc on laisse de côté le check-up du hardware (POST), on peut considérer que l'EFI a un rôle logiciel de PRE-BOOT (exécution du booter avec passation de flags de la NVRAM), tandis que le BOOT logique commence à proprement parler avec le booter : boot.efi (dont l'activation est signalée à l'écran par le classique logo ).

--------------------​

Les disques des Macs Intel supportent régulièrement une Table de Partition GUID, telle que le secteur n°1 de cette Table est toujours l'ESP : EFI System Partition (intitulée en abrégé : EFI quand on fait un diskutil list dans le «Terminal»). Cette partition de 209 Mo ne doit pas être confondue avec l'EFI vue précédemment : ce n'est pas l'EFI, mais une "partition de l'EFI", càd. un secteur logique de boot pour le Programme Interne du Mac. Bien que tous les disques tablés en GUID comportent cette partition n°1, elle ne joue aucun rôle dans les disques de stockage de données, mais uniquement dans les disques démarrables.

Cette partition ESP1 (si le disque est disk0 => /dev/disk0s1) est toujours au format MS-DOS (FAT-32) et supporte par défaut des exécutables Apple : l'exécutable BOOTLOG et, dans une arborescence collatérale : EFI/APPLE/CACHES, EXTENSIONS, FIRMWARE d'autres exécutables. Avant l'exécution du boot_loader : boot.efi résidant sur la partition en-dessous de l'ESP (= /dev/disk0s2), l'EFI exécute automatiquement ces fichiers Apple en guise d'amorçage logique du disque. Si le format MS-DOS de cette partition ESP inaugurale d'une Table de Partition GUID peut sembler déconcertant, c'est que l'ESP est un secteur susceptible d'être utilisé par des applications de tierce partie qui y logeraient des exécutables. C'est le cas du gestionnaire de boot : «rEFInd», qui loge dans le dossier EFI de l'ESP 2 dossiers spécifiques : refind & tools, le dossier refind recélant un boot_loader alternatif : le refind_x64.efi. En cas de mention en NVRAM d'un EFI_path (via l'UUID de l'ESP et son adresse) au boot_loader alternatif refind_x64.efi, c'est ce booter que l'EFI va exécuter au lieu du boot.efi réglementaire et c'est ainsi que l'écran de boot de «rEFInd» se trouve intercalé. En cas d'exécution sur l'ESP du booter alternatif : refind_x64.efi, l'EFI coupe après son exécution, et c'est donc le booter de «rEFInd» qui exécute ensuite le boot.efi réglementaire qu'on lui a désigné comme cible (un point intéressant est le suivant : le booter de «rEFInd» est absolument "imperméable" aux flags de la NVRAM chargés par l'EFI, à la différence du booter : boot.efi => qui me comprend, en prenne acte...).

L'ESP pourrait donc être considéré comme le secteur d'amorçage logique, ou le secteur gestionnaire de disque, pour l'EFI : un intercalaire logique dans la séquence du PRE-BOOT qui se décrirait alors plus complètement ainsi : EFI => flags en NVRAM => ESP => booter.

--------------------
Les versions successives d'OS X embarquent très régulièrement des mises-à-jour du Programme Interne du Mac (MÀJ de l'EFI). Absolument irréversibles logiciellement par des moyens ordinaires (mais des "flashes de l'EFI" sont exécutés par des bidouilleurs intrépides et les équipes techniques d'Apple possèdent les moyens de restaurer l'EFI). Ce qui revient à dire qu'installer sur un Mac un OS très décalé temporellement de son OS d'usine impacte automatiquement l'EFI (le firmware de la Carte-Mère) comme tu l'as bien compris.

Cette évolution logique de l'EFI de la Carte-Mère crée-t-elle une situation de non-retour en ce qui concerne la possibilité de booter le Mac sur son OS d'usine, ou des OS intermédiaires entre ce dernier et le plus récent solidaire de la dernière MÀJ de l'EFI ? La réponse foncière est : NON. Et la preuve en est donnée par la fonctionnalité inscrite dans l'EFI des modèles de Macs non antérieurs à 2010, qui est le "démarrage par internet" permettant de télécharger et de ré-installer l'OS d'usine du Mac. Et forcément pour l'EFI majorée d'exécuter son fichier démarreur boot.efi. Cette fonctionnalité ne serait pas implémentée dans l'EFI si elle correspondait à une perspective impossible : faire exécuter par une EFI majorée un booter : boot.efi rétrograde.

Cette réponse foncière est-elle susceptible d'exceptions sur les machines supportant l'OS le plus récent («El Capitan») mais antérieures à la date critique (2010) permettant l'implémentation dans l'EFI de la fonctionnalité capable de restaurer l'OS d'usine du Mac (forcément supporté) ? L'OS d'usine que permet de restaurer cette fonctionnalité ne pouvant être qu'un OS téléchargeable, le plus ancien ne peut alors être que «Lion 10.7.0», auquel des Macs de 2010-2011 fournis à l'origine avec «Snow Léopard» et DVD d'install se trouvent admissibles expostfacto. Cela signifie-t-il que leur véritable OS d'usine : «Snow Léopard» pourrait, en cas de trop grand écart entre une EFI majorée depuis le dernier OS et le booter de 10.6, devenir impossible à charger ? Je ne l'ai pas personnellement constaté, mais rien n'empêche de penser que cette impossibilité puisse se produire. Mon MacBook Pro_ Early 2011, récemment mis-à-niveau à «El Capitan», démarre toujours sur «Snow Léopard 10.6.7/8». De même, un plus ancien : MacBook Pro Mid_2010 démarre toujours tous les OS de «Snow Léopard 10.6.3» à «El Capitan» sans que l'EFI majorée à la suite de l'installation d'«El Capitan» rejette l'exécution du boot_loader : boot.efi 10.6.3. Mais ils sont tous les 2 éligibles au "démarrage par internet".

En résumé : c'est uniquement un problème de compatibilité exécutive : EFI x boot.efi, avec implication éventuelle de l'ESP intercalaire du disque support [ai-je mentionné antérieurement qu'en cas d'installation de «rEFInd» comme gestionnaire de boot, c'est le booter refind_x64.efi de «rEFInd» qui prend le relai, pour exécuter le boot.efi de l'OS désigné ? booter refind_x64.efi dont le moins qu'on puisse dire est qu'il est est doté du même esprit d'« absence de discrimination » que son créateur Roderick Smith... Il est donc envisageable de faire exécuter par l'EFI le plus récent booter refind_x64.efi de «rEFInd» et de lui donner comme cible le boot.efi de l'OS d'usine.]

--------------------
 
Dernière édition par un modérateur:
Salut Macomaniac ,
(Je préfère tit Gibus à grand Gibus s'il faut choisir ;) )
Merci pour cet exposé magistral. Si j'ai bien compris je peux fonctionner avec un EFI Capitan sous Yosemite sans trop d'angoisse...
Après la complexe phase de démarrage, peut-etre peux-tu nous dire deux mots sur le role de l'EFI lors de l'arret du serveur puisque c'est pendant cette phase que j'avais un petit souci (évoqué dans un post parallele) : lors de l'arret (ou redémarrage) j'ai une latence de 20 secondes environ après l'arret d'OSX et UNIX (en mode Verbose je vois passer le message "CPU Halted" qui normalement précède immédiatement l'arret effectif alors que sous El Capitan j'ai cette latence inexpliquable). A priori ce serait donc le firmware en cause.
Curieusement le meme firmware (EFI) fonctionne normalement sous Yosemite et avec ce "bug" sous El Capitan.
Cette contradiction apparente s'explique peut-etre par les kernel-flags de la NVRAM, s'il y en a qui sont significatifs pour l'arret ?
Sinon le SMC joue-t-il un role à ce niveau ?
 
Salut encore gibus.

Question "serveurs", je n'y connais strictement rien.

Tout ce que je peux dire est que l'EFI (aka Programme Interne du Mac, ou Firmware : ce sont des synonymes) ne joue strictement aucun rôle lors de l'extinction du Mac. Le rôle de l'EFI ne concerne que le démarrage du Mac (ou son re-démarrage, qui re-sollicite le Programme Interne), mais après la complétion de ces fonctions (= a) POST => b) exécution du boot.efi), l'EFI quitte purement et simplement.

Lors de l'extinction du Mac, une fois que la session graphique d'utilisateur a été fermée, tout se passe au niveau du kernel (micro-noyau) : c'est à lui qu'incombe la suspension des processus-Système et de quitter. Et qui dit kernel, dit un programme qui réside uniquement sur le disque du Mac. D'un OS à l'autre, voire d'une MÀJ d'un OS à une autre, j'ai constaté des différences notables de délai temporel demandé par la suspension d'activité du kernel : parfois pas plus de 2-3", parfois plus de 30". Avec des variations par rapport à la routine dépendant des "événements-Système" que l'activité de session a pu déclencher. Il n'y a pas grand chose à faire concernant ces délais plus ou moins longs pris par le kernel pour quitter.

Sachant cela, personnellement je laisse faire en considérant qu'il y a là une "fatalité logique" sur laquelle je n'ai pas de prise. Il suffit de se réciter la formule de Spinoza : « la nécessité comprise est liberté » (en tirant le sens de "comprise" vers "admise"- ce qui abuse un tantinet de la sémantique, je le reconnais) et hop ! on s'épargne des "passions" inutiles...
361608_original.png
 
OK donc EFI hors de cause, éventuellement le SMC qui s'occupe de la mise hors tension si j'ai bien compris.
Ce qui m'étonne c'est qu'il y a (au moins) deux version de SMC pour ce modèle mais Apple n'en propose aucune au téléchargement, et que personne d'autre que moi n'aie constaté le phénomène.
Sinon comme tu dis il faut s'en remettre à la "fatalité logique" pour apaiser l'esprit ...