Γιατί τα MacBook και τα MacMini δε φορτώνουν 64bit πυρήνα και extensions?

64bit_icon_20090824.png
Σε ένα προηγούμενο post αναλύσαμε πως θα μπορούσαμε να ξεκινήσουμε ένα μηχάνημα που έχει 64bit επεξεργαστή και 64bit EFI με πυρήνα και kernel extensions 64bit. Αρκετοί ήταν αυτοί που παρατήρησαν λοιπόν ότι τα MacBook τους, ή τα MacMini, παρόλο που άλλαζαν τις ρυθμίσεις στο SystemSetup, δε φόρτωσαν ποτέ τον 64μπιτο πυρήνα. Ο λόγος που γίνεται αυτό είναι επειδή :
1) Το chipset της Intel δεν υποστηρίζει 64bit αρα ούτε και ο memory controller, οπότε δεν υπάρχει κανένας λόγος...
2) Δεν υπάρχουν 64bit kernel extensions για τα chip γραφικών GMA 950 και x3100, δηλαδή με απλά λόγια, δεν υπάρχουν 64bit drivers για αυτά τα chip.
Αυτό δεν ισχύει για τα μηχανήματα με το nVidia 9400, το οποίο έχει υποστήριξη 64bit.
Το ερώτημα είναι μπορούμε να κάνουμε boot με 64bit πυρήνα σε τέτοια μηχανήματα ? Η απάντηση είναι ναι, μπορούμε, αλλά θα δούμε δραματική μείωση της απόδοσης του μηχανήματος.
Δείτε παρακάτω, αναλυτικά, και με screenshots, τι θα γίνει αν κάνουμε κάτι τέτοιο σε ένα MacBook με το x3100.
Screen-shot-2010-05-22-profiler.png

Καταρχήν πρέπει να πούμε οτι το boot.efi έχει μια blacklist των μηχανημάτων που δε πρέπει να φορτώσουν 64bit Kernel και extensions. Το πρώτο πράγμα λοιπόν, είναι να πειράξουμε αυτή τη λίστα. Κατεβάζουμε ένα hex editor, μερικά καλά τέτοια προγράμματα είναι τα 0xED και HexEditor, εμένα προσωπικά με βόλεψε πολύ το 0xED. Βρίσκουμε το boot.efi που βρίσκεται στο "/System/Library/CoreServices/" και το ανοίγουμε με τον hex editor της επιλογής μας. Η διεύθυνση της blacklist για το MacBook είναι η "0x266E0" ενω για το MacMini "0x266D0". Ρυθμίζουμε το write mode σε overwrite.
Screen-shot-2010-05-22-hexmenu.png

Έπειτα αλλάζουμε τα bit στην τρίτη τετράδα, απο "00 00 00 00" σε "04 00 00 00" όπως στη παρακάτω εικόνα.
Screen-shot-2010-05-22-hex2.png

Έπειτα αποθηκεύουμε το αρχείο με ένα άλλο όνομα όπως boot64.efi
Screen-shot-2010-05-22-hexsave.png
Δε θα αφήσει όμως να κάνουμε κάτι τέτοιο στο φάκελο CoreServices οπότε πρέπει να το σώσουμε κάπου αλλού, όπως στο Desktop, και το αντιγράφουμε αργότερα στο CoreServices χρησιμοποιώντας το Finder ώστε να μας ζητήσει authentication.
Screen-shot-2010-05-22-finder.png

Στη συνέχεια θα πρέπει να φτιάξουμε τα permissions, τα flags, καθώς και να το κάνουμε bootable δίνοντας στο Terminal τις παρακάτω εντολές.
Για να μπούμε στο φάκελο CoreServices δίνουμε:
cd /System/Library/CoreServices/
Για να ρυθμίσουμε τα permissions δίνουμε:
sudo chown root:wheel boot64.efi
Για να ρυθμίσουμε τα flags δίνουμε:
sudo chflags uchg boot64.efi
Και τέλος για να το κάνουμε bootable δίνουμε:
sudo bless --folder "/System/Library/CoreServices" --file "/Volumes/BrokenMac/System/Library/CoreServices/boot64.efi"

Στο screenshot για να μη γράφω κάθε φορά sudo έδωσα την πρώτη φορά su και συνδέθηκα ως root. Στην ουσία είναι το ίδιο πράγμα.
Screen-shot-2010-05-22-terminal.png

Μετά απο αυτό ακολουθούμε τις οδηγίες από το προηγούμενο post, και πιο συγκεκριμένα δίνουμε την εντολή:
sudo systemsetup -setkernelbootarchitecture x86_64
Κάνοντας restart θα δούμε ότι το μηχάνημα αργεί πάρα πολύ να κάνει boot. Τέλος όταν θα κάνει boot θα δούμε ότι :
1) Έχει φορτώσει 64bit πυρήνα και τα περισσότερα extensions.
2) Οτιδήποτε χρησιμοποιεί quartz extreme πάει πάρα πολύ αργά, αυτό συμβαίνει επειδή δεν υπάρχει hardware acceleration για τα γραφικά, και αν δούμε στα logs θα προσέξουμε ότι προσπάθησε μερικές φορές να φορτώσει το kext του chip γραφικών αλλά δε τα κατάφερε...
Screen-shot-2010-05-22-console.png

Για να επαναφέρουμε το σύστημα στην αρχική του κατάσταση απλά αλλάζουμε το bless, σβήνουμε το boot64.efi και λέμε στο SystemSetup να φορτώσει 32bit kernel & extensions, δίνοντας τις εντολές:
sudo bless --folder "/System/Library/CoreServices" --file /Volumes/BrokenMac/System/Library/CoreServices/boot.efi
sudo rm /System/Library/CoreServices/boot64.efi
sudo systemsetup -setkernelbootarchitecture i386