Dans mon labo, j’ai un MacBook de première génération qui traîne, une machine avec un CPU Core Duo et 2 Go de RAM. Et je me suis dit « Pourquoi ne pas passer à 3 Go de RAM ? ». Petit problème, ce modèle n’accepte que 2 Go. Mais comme il est possible de faire évoluer officieusement certains Mac mini, je me suis dit que ce serait possible avec le MacBook. Mais en fait… non.
La première génération de Mac Intel chez Apple utilise un processeur Core Duo (Yonah, 32 bits) et limite généralement la capacité de la mémoire à 2 Go (MacBook, iMac, MacBook Pro, Mac mini). Mais comme la seconde génération, à base de Core 2 Duo, utilise le même design interne, certains ont essayé de flasher le firmware. Dans la pratique, la modification permet de gérer plus de mémoire (4 Go physiquement, 3 Go en pratique) et – avec un processeur adapté – d’installer Mac OS X Lion. Elle a donc surtout de l’intérêt sur un Mac mini ou un iMac, deux machines dont le processeur peut être remplacé par un Core 2 Duo. La manipulation existe aussi pour le premier Mac Pro, avec la possibilité d’installer Lion et d’utiliser certains CPU Xeon. Sur un MacBook, changer la version de l’EFI ne transforme pas le Core Duo en Core 2 Duo, mais elle permet la gestion de plus de mémoire.
Sur un MacBook, je n’ai pas trouvé beaucoup d’informations, parce que le changement de firmware ne permet pas d’installer Lion, faute de CPU compatible. J’ai commencé par ce sujet sur les forums de MacBidouille, qui donne la marche à suivre. Je vous mets dans le bain direct : la marche à suivre n’est pas complète, je vais résumer. Pour suivre, petit rappel : Apple donne des noms de code à ses machines et le MacBook en Core Duo est le MacBook1,1
, la version en Core 2 Duo (identique ou presque) est le MacBook2,1
.
Premièrement, il faut la mise à jour d’EFI du MacBook1,1
. Le lien dans la liste d’Apple n’est pas le bon, sinon ce n’est pas drôle, la bonne page est ici. Ensuite, il faut aussi la mise à jour EFI du MacBook2,1
. Le flash fonctionne parce qu’Apple propose les fichiers pour le faire (enfin, en tout ça simplifie les choses).
Ensuite, il faut extraire quatre fichiers. Vous pouvez passer par Pacifist, ou sinon une suite de clic secondaires avec « Afficher le contenu du paquet » marche aussi. Vous devez garder EfiUpdaterApp2.efi
(le programme de flash du MacBook2,1), EfiUpdaterApp.efi
(la même chose pour le 1,1), LOCKED_MB21_00A5_07B.fd
et LOCKED_MB11_0061_03B.fd
(les firmware). L’idée va donc être d’utiliser le programme de flash du MacBook1,1
pour appliquer le firmware du 2,1 et le programme de flash du 2,1 pour appliquer le firmware du 1,1 (pour le retour en arrière).
Première étape, flasher. Il faut modifier le programme de flash, qui attend deux choses : un fichier dont il connaît la somme de vérification (CRC) et un firmware. Par défaut, et c’est ce qui manque dans le tutorial sur MacBidouille, le programme n’acceptera de flasher une machine que si elle a un firmware précis, celui d’origine. Sur une machine déjà à jour, il ne se lance donc pas.
Pour le CRC, il faut calculer le CRC des deux firmware (avec la commande crc32 nomdufirmware
) et changer les valeurs dans le fichiers. Attention, la commande donne une valeur en little endian, le programme attend du big endian. Le firmware du 1,1 a normalement un CRC de d51cc825
, qui – une fois converti – donne 25c81cd5
. Le firmware du 2,1, lui, a un CRC de 321cdb73
, soit 73db1c32
. Il faut donc ouvrir le fichier EfiUpdaterApp.efi
et remplacer le 25c81cd5
par un 73db1c32
avec un éditeur hexadécimal.
Ensuite, la vérification du firmware. Le programme contient une chaîne de caractère et effectue une comparaison entre le firmware de la machine et ce qu’il attend. Par défaut, il cherche donc le firmware précédent. Si votre machine n’a jamais été mise à jour, ce n’est pas nécessaire mais dans le cas contraire (si elle possède la version MB11.0061.B03
), il faut effectuer une modification. Le fichier EfiUpdaterApp.efi
contient les références de pas mal de machines, et il faut donc mettre la bonne en utilisant un éditeur de texte. Attention, les chiffres et les lettres sont séparés par des .. Il faut bien indiquer la chaîne d’identification complète (MB11.88Z.0061.B03.0610121324
pour un MacBook à jour). Le plus simple consiste à passer par les résultats de Geekbench, qui contiennent les données.
Enfin, avant de flasher, il faut déplacer les fichiers au bon endroit. Première étape, renommer LOCKED_MB21_00A5_07B.fd
en LOCKED_MB11_0061_03B.fd
(nous allons remplacer le fichier du 1,1 par celui du 2,1). Le EfiUpdaterApp.efi
et le firmware doivent ensuite être copié dans /System/Library/CoreServices/Firmware Updates
. Enfin, une ligne de commande doit être lancée dans le terminal.
sudo bless -mount / -firmware /System/Library/CoreServices/Firmware\ Updates/EFIUpdaterApp.efi -payload /System/Library/CoreServices/Firmware\ Updates/LOCKED_MB11_0061_03B.fd -options "-x efi-apple-payload0-data" --verbose
Le flash proprement dit nécessite d’éteindre le Mac et de presser quelques secondes le bouton d’allumage. Pensez à bien charger la batterie avant et ne pas tenter ça pendant un orage. La LED à l’avant devrait clignoter et le Mac devrait émettre un bruit aigu. Ensuite, il va essayer de flasher le firmware. Si une barre de progression apparaît quelques secondes et que le Mac redémarre… vous avez fait une erreur. Si tout se passe bien, la barre va avancer (compter quelques minutes) et le Mac va redémarrer avec le nouveau firmware.
Là, c’est mon #FAIL.
Maintenant, vous allez comprendre le (presque) dans le titre. L’écran ne fonctionne pas. Je me suis senti idiot devant une machine avec un écran noir. Après quelques essais, je me suis rendu compte (notamment en branchant un écran) que la machine n’était pas morte mais que l’écran ne fonctionnait pas. Avec un externe, le Mac affiche la … et c’est tout. Je me suis connecté via le partage d’écran (j’expliquais hier comment l’activer quand on n’a pas accès à l’interface…) et j’ai donc fait les tests. La bonne nouvelle, c’est que le flash a fonctionné et que le MacBook accepte bien 4 Go de RAM. La mauvaise, donc, c’est que la batterie ne charge pas et que l’écran n’est pas reconnu. C’est visiblement des soucis liés au SMC et (malheureusement) Apple ne propose pas de mise à jour du contenu de la mémoire du SMC pour les MacBook2,1
.
Une fois quelques captures effectuées, j’ai donc effectué le chemin inverse. Flasher le MacBook2,1
en MacBook1,1
(downgrade).
Le fichier EfiUpdaterApp2.efi
contient plusieurs références au CRC, il faut remplacer les 73db1c32
par 25c81cd5
en hexadécimal. Même chose pour l’identification du firmware, mais cette fois à deux endroits avec la valeur MB21.88Z.00A5.B07.0706270922
. Enfin, il faut renommer LOCKED_MB11_0061_03B.fd
en LOCKED_MB21_00A5_07B.fd
(attention à bien utiliser l’original) et placer le tout dans /System/Library/CoreServices/Firmware Updates
. La commande qui permet de préparer le flash n’est pas exactement la même, mais les étapes suivantes, si. Pensez à remettre 2 Go de RAM au maximum (sous peine de ne pas démarrer).
sudo bless -mount / -firmware /System/Library/CoreServices/Firmware\ Updates/EFIUpdaterApp2.efi -payload /System/Library/CoreServices/Firmware\ Updates/LOCKED_MB21_00A5_07B.fd -options "-x efi-apple-payload0-data" --verbose
Bonne nouvelle, le downgrade fonctionne. La machine récupère son écran et fonctionne comme au premier jour. Mais avec seulement 2 Go de RAM, dommage.
A noter quand même qu’une mise à jour du SMC doit sûrement exister : une partie des MacBook en Core 2 Duo dispose d’un SMC en version 1.13f3 et d’autres utilisent une version 1.17f0.
Super merci pour les explications ! :)
Peut-on de la même manière mettre un firmware 64 bits au lieu du 32 bits d’origine dans un MacBook Core 2 Duo ?
Très clairement, non, ça n’existe pas pour ce modèle.
On peut changer le firmware quand les machines sont très proches physiquement (et encore, ici, ça ne fonctionne pas).
Ca passe pour :
Les Mac mini (Core Duo en Core 2 Duo)
Les iMac (Core Duo en Core 2 Duo)
Les Mac Pro (1,1 en 2,1 et 4,1 en 5,1)
Eventuellement les premiers MBP.
Mais ça reste des exceptions.
Ok, merci pour la réponse !