Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save derralf/2f250037f08bd24f945d3647b9feced1 to your computer and use it in GitHub Desktop.
Save derralf/2f250037f08bd24f945d3647b9feced1 to your computer and use it in GitHub Desktop.
MacBookPro7,1 + rEFInd + proprietary nVidia drivers without GRUB

Macbook Pro 2010 + rEFInd + Mint/Ubuntu + proprietary nVidia drivers without GRUB

Wir haben ein Macbook Pro 13" Mid 2010 – MacBookPro7,1 – und möchten per rEFInd Mint booten.

Die Nouveau-Treiber sind nicht sehr performant (das MacBook wird heiß und die Akku hält nicht so lange). Deshalb sollen die propietären nVidia-Treiber genutzt werden.

Problem: Black Screen with nVidia Driver

Beim Start des EFI-Bootvorgangs (während der Übergabe an grub) initialisiert Apples Firmware die VGA-Karte nicht als PCI-E-Busmaster aktiviert.

Mit den proprietären Treibern bootet Mint/Ubuntu in einen "Black Screen" – der Bildschirm bleibt schwarz.

Abhilfe mit GRUB-Script und EFI-Boot

Die Lösung ist üblicherweise, ein GRUB-Skript zu erstellen, um die PCI-E-Registers während des Bootens zu setzen:

Aber:

Ich musste Mint häufig im Recovery-Modus booten, um den GRUB-Bootloader zu aktualisieren.
Das funktioniert nicht so gut, weil dann auch im Recovery-Mode auf dem Bildschirm nur Grafik-Müll angezeigt wird und man quasi erahnen/erraten muss, wo im Menü man sich gerade befindet.

Lösung: in Shell Script die PCI-Registers setzen und dann booten

Wir adaptieren die Lösung für aus diesem Arch-Forum-Post:
https://bbs.archlinux.org/viewtopic.php?pid=1833995#p1833995

Also: using rEFInd without GRUB aber mit den propietären nVidia-Treibern.

Zwar noch nicht probiert, aber so ähnlich sollte das auch für andere Linux-Distros funktionieren.

Momentan habe ich diese Lösung tesweise parallel zur o.g. GRUB-Script-Varainte laufen.

Benötigte Software

refind 0.11.5

shell.efi

1. Mint & rEFInd installieren

Wie gewohnt Mint auf eine Freie Partition installieren.
Wie gewohnt rEFInd installieren.

WICHTIG - rEFInd:

  • nicht rEFInd 0.12.0 verwenden (siehe oben)
  • sicherheitshalber alle Treiber von refind/drivers_x64 in den entsprechenden Ordner auf der EFI-Partition kopieren
  • in refind.conf: Uncomment die Zeile "showtools shell, gdisk, memtest,....."
  • shell.efi nnicht vergessen, s.o.

WICHTIG - Linux:

  • In Linux nicht die empfohlenen proprietären nvidia-Treiber installieren!
  • Vorerst den Nouveau-Treiber verwenden!

2. Vorbereitungen

In Schritt 2 werden diverse Vorkehrungen getroffen und Daten ermittelt, die wir für die Einrichting benötigen.

  • fs* ermitteln
  • PSARTUUID ermitteln
  • symlink /vmlinuz.efi anlegen
  • symlink /initrd.img falls benötigt

Nützliche Terminal-Befehle – EFI-Partition mounten:

# Mac OS
diskutil list
# Partition ermitteln, z.B. disk0s1
sudo diskutil mount disk0s1
# Laufwerk kann nun in Finder geöffnet werden

# Mint/Ubuntu
sudo fdisk -l
sudo mount /dev/sda1 /mnt
# Erreichbar in /mnt per Dateimanager oder im Terminel cd /mnt

fs* ermitteln (in rEFInd Shell)

  • in refind booten
  • Shell starten (Terminal-Icon in Refind)
  • Partition/filesystem finden, auf dem /boot liegt:
    • durchprobieren: fs0:, fs1:, fs2:, fs3:
    • mit ls und cd kann navigiert werden
    • fs* notieren

Vorbereitungen unter Linux

Mint booten

PARTUUID ermitteln

# im Terminal Partition finden:
lsblk
# wenn die root-Partition z.B. sda3 ist, weiter mit
sudo blkid -p /dev/sda3

Der benötigte Wert ist PART_ENTRY_UUID - diesen notieren z.B. in einer Textdatei.

symlink vmlinuz.efi (und ggf. initrd.img) erstellen

Die Shell wird keine Datei ausführen, die nicht auf eine .efi-Erweiterung endet. Deshalb erstellen wir einen Symlink "vmlinuz.efi", der im Script verwendet werden kann.

Falls bereits ein Symlink "/vmlinuz" zum default-Kernel existiert:

cd /
sudo ln -s /vmlinuz vmlinuz.efi

Falls nicht (Ziel vmlinuz-5.0.0-53-generic ggf anpassen)

cd /
sudo ln -s /boot/vmlinuz-5.0.0-53-generic vmlinuz.efi

Falls nicht bereits ein Symlink "/initrd.img" zur initrd existiert, erstellen wir auch hierfür einen Symlink:

cd /
sudo ln -s /boot/initrd.img-5.0.0-53-generic /initrd.img

...alternativ kann man im Script auch den Pfad zur Ramdisk angeben:
initrd=/boot/initrd.img-5.0.0-53-generic Für den Kernel geht dies allerdings nicht, da MUSS ein Symlink mit der Endung .efi angelegt werden.

3. EFI Shell Script & refind.conf-Eintrag

Das .nsh Script erstellen und speichern

Das fertige Skript wird gespeichert im Stammverzeichnis der ESP-Partition als `macbook-mint-nvidia-fix.nsh

In der folgenden Vorlage müssen dafür nur die Werte für PARTUUID und fs* angepasst werden. Diese wurden zuvor in Schritt 2 ermittelt.

mm 04000004 1 ;PCI :7
mm 0017003E 1 ;PCI :8
fs5:\vmlinuz.efi root=PARTUUID=ca3af69f-ab47-482c-be16-f2156e1c8dd2 rw initrd=/initrd.img

refind.conf anpassen

Dann wird in //EFI/refind/refind.conf ein Boot-Eintrag wie dieser hinzugefügt (unter der Annahme, dass fs0 die ESP ist):

# custom entry Mint nvidia Fix
menuentry "Mint-nvidia-Fix" {
        icon \EFI\refind\icons\os_linuxmint.png
        loader \EFI\refind\tools_x64\shell.efi
        options "fs0:\macbook-mint-nvidia-fix.nsh"
}

4. Reboot und testen

Mint booten, Terminal öffnen:

Wenn nach dem Neustart die Registerwerte auf 8 (bridge device und 7 (display device) eingestellt wurden, lief alles gut:

sudo setpci -s "00:17.0" 3e.b
# 08

sudo setpci -s "04:00.0" 04.b
# 07

Anm.:
Bei wurde statt "08" der Wert "0a" angezeigt.
Es funktioniert aber trotzdem.

5. nVidia-Treiber installieren

  • Treiberverwaltung starten
  • proprietäre nVidia-Treiber installieren (nvidia-340)
  • neu starten
@crucco37
Copy link

Hallo Ralf,

nachdem ich die Anweisungen befolgt habe und vermute, alles richtig gemacht zu haben, erreiche ich folgenden Punkt.
Es erscheint nach dem Booten diese Meldung:

»'fs1:\macbook-mint-nvidia-fix.nsh' is not recognized as an internal or external command, operable program, or batch file
Press ESC in 1 seconds to skip startup.nsh, any other key to continue
Shell> _«

Der Script Nvidia-Fix wird also nicht ausgeführt und ich boote mit refind nach ESC in die normale LinuxMint-Variante, die mit
Mint 19.3 und dem noveau-Treiber zumindest soweit gut läuft. (MacBook Pro A1260 Typ 4.1 aus 2008)

Falls Du mir helfen willst, kann ich weitere Informationen dazu liefern.
Viele Grüße
Thomas

@derralf
Copy link
Author

derralf commented Sep 12, 2023

Boah, das ist 3 Jahre her und ich hab seitdem nichts mehr damit gemacht. Letzten Endes hab ich mir bei ebay ein altes Lenovo für meine Linux-Spielereien gekauft, weil mir das mit dem Macbook einfach zu hakelig war... D.h. ich bin total aus dem Thema raus und kann gar nicht helfen. Sorry. Ein Tipp ins blaue wär höchstens noch, dass vielleicht doch Pfade nicht stimmen. Bist Du sicher, dass das Script auf fs1 liegt?

@crucco37
Copy link

Schade!
Deine Anweisungen haben mir bisher am meisten geholfen. Inzwischen ist mein MacBook fast komplett so, wie ich es wollte. Andere Tipps halfen, dass sogar WiFi läuft und mit mbpfan wird es auch nicht mehr so warm. Nvidia-Grafik hätte noch gefehlt. Geht aber mit Noveau und refind zusammen durch booten in vmlinuz zumindest so, dass der untere Rand des Bildschirm nicht mehr 8mm angeschnitten ist durch die Verschiebung nach unten.
Viele Grüße
_t (wenn Dir doch noch was einfällt - immer her damit)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment