Microcode

Aus wiki.archlinux.de
Version vom 26. Oktober 2014, 19:09 Uhr von ArchChem (Diskussion | Beiträge) (Korrektur der 2. GRUB-Methode)

Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!


Einige Prozessoren erlauben es, den Firmware-Code (oder auch Microcode genannt) beim Systemstart zu überschreiben, so dass ohne ein BIOS-Update eventuelle Firmware-Fehler beseitigt werden können. Das Überschreiben gilt aber nur bis zum Ausschalten des Computers (es ist reversibel), so dass danach wieder der ursprüngliche Code vorhanden ist.

Microcode-Updates aktivieren

Für AMD-Prozessoren befindet sich alles Nötige in dem Paket linux-firmware, welches bereits installiert sein sollte.

Intel-Benutzer müssen das Paket intel-ucode installieren.

Aktivieren von Intel Microcode-Updates

Achtung: Seit der Kernelversion linux 3.17-2 bzw. linux-lts 3.14.21-2 werden Intel Microcode-Updates nicht mehr automatisch angesteuert und müssen manuell aktiviert werden.

Die Updates werden durch Hinzufügen von /boot/intel-ucode.img als ersten initrd-Befehl in der Bootloader-Konfiguration erreicht.

Beispiele

EFI Stub Kernel

Man fügt zwei initrd-Befehle hinzu:

initrd=/intel-ucode.img initrd=/initramfs-linux.img

Gummiboot

Man benutzt die initrd-Option zweimal in dem unter /boot/loader/entries/ für Arch Linux vorgesehenen Eintrag:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options ...

Grub

Bisher hat das Arch Linux Entwickler-Team noch nicht entschieden, wie es mit Microcode-Updates bei Grub verfahren möchte (s. a. im Bug FS#42354. Bis dahin kann man sich mit zwei Notlösungen verhelfen.

Möglichkeit 1: Editieren der grub.conf

Man editiert die Datei /etc/grub.conf und fügt zu jedem dort gelisteten Eintrag entweder /intel-ucode.img, falls man eine extra Boot-Partition besitzt, oder /boot/intel-ucode.img, falls man keine spezielle Boot-Partition verwendet, hinzu.

[...]
echo	'Loading initial ramdisk ...'
initrd	/intel-ucode.img /initramfs-linux.img
[...]

Achtung: Mit jedem Update von GRUB wird diese Datei überschrieben, so dass anschließend die Änderungen erneut vorgenommen werden müssen.

Möglichkeit 2: Editieren der /etc/grub.d/10_linux

Man bearbeitet die Datei /etc/grub.d/10_linux, von der aus die grub.conf erstellt wird, und fügt die mit + beginnenden Zeilen hinzu. Anschließend entfernt man die mit - beginnenden Zeilen:

   if test -n "${initrd}" ; then
+    if test -f "${dirname}/intel-ucode.img"; then
+        ucode="${rel_dirname}/intel-ucode.img"
+    else
+        ucode=
+    fi
     # TRANSLATORS: ramdisk isn't identifier. Should be translated.
     message="$(gettext_printf "Loading initial ramdisk ...")"
     sed "s/^/$submenu_indentation/" << EOF
 	echo	'$(echo "$message" | grub_quote)'
-	initrd	${rel_dirname}/${initrd}
+	initrd	${ucode} ${rel_dirname}/${initrd}
 EOF

Anschließend generiert man die grub.conf neu:

# grub-mkconfig -o /boot/grub/grub.cfg

Hinweis: Bei dieser Methode kann es dazu kommen, das eventuelle GRUB-Updates nicht richtig installiert werden

Syslinux

Man kann hier verschiedene initrd-Einträge durch Kommas trennen. Dazu bearbeitet man die Datei /boot/syslinux/syslinux.cfg:

LABEL arch
    MENU LABEL Arch Linux
    LINUX ../vmlinuz-linux
    INITRD ../intel-ucode.img,../initramfs-linux.img
    APPEND ...