Microcode: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Greg (Diskussion | Beiträge)
→‎Grub: grub.conf automatisch generieren lassen als Möglichkeit1 geändert. Möglichkeit2 händisch ändern.
Rennradler (Diskussion | Beiträge)
Zeile 52: Zeile 52:


== Feststellen, ob Microcode-Updates vorgenommen wurden ==
== Feststellen, ob Microcode-Updates vorgenommen wurden ==
Möchte man nun überprüfen, ob beim Booten des Systems ein Microcode-Update stattgefunden hat, so kann man dies durch Eingabe von {{ic|dmesg | grep microcode}} tun.
Möchte man nun überprüfen, ob beim Booten des Systems ein Microcode-Update stattgefunden hat, so kann einen ersten Test mittels
Ein positives Ergebnis bei einem Intel-Prozessor sollte wie folgt aussehen:
journalctl -k --grep microcode
[    0.000000] CPU0 microcode updated early to revision 0x1b, date = 2014-05-29
durchführen.  
  [    0.221951] CPU1 microcode updated early to revision 0x1b, date = 2014-05-29
Im Falle von Intelprozessoren mit erfolgreichem Early Loading erhält man etwa folgendes (hier ein Lenovo Thinkpad T480s):
  [    0.242064] CPU2 microcode updated early to revision 0x1b, date = 2014-05-29
  Sep 04 15:31:40 darkstar kernel: microcode: microcode updated early to revision 0xb4, date = 2019-04-01
[    0.262349] CPU3 microcode updated early to revision 0x1b, date = 2014-05-29
  Sep 04 15:31:40 darkstar kernel: microcode: sig=0x806ea, pf=0x80, revision=0xb4
  [    0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b
  Sep 04 15:31:40 darkstar kernel: microcode: Microcode Update Driver: v2.2.
  [    0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b
Findet kein Microcode-Update statt, sieht die Ausgaben wir folgt aus (hier das selbe Lenovo Thinkpad T480s):
  [    0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b
  Jul 30 10:21:06 darkstar kernel: SRBDS: Mitigation: Microcode
  [    0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b
  Jul 30 10:21:06 darkstar kernel: microcode: sig=0x806ea, pf=0x80, revision=0xd6
[    0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b
  Jul 30 10:21:06 darkstar kernel: microcode: Microcode Update Driver: v2.2.
  [    0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b
Ein negatives Ergebnis muß nicht auf eine Fehlkonfiguration zurückzuführen sein. Es kann auch bedeuten, daß das BIOS bereits die neueste Firmware enthält. Im Falle des exemplarisch verwendeten T480s war dies nach einem BIOS-Update der Fall.
[    0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b
Möchte man sichergehen, daß die neueste Firmwareversion geladen ist, geht man wie folgt vor:
[    0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b
Installation von iucode-tool
[    0.507335] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
  # pacman -S iucode-tool
Verwendet man neuere Hardware, kann es vorkommen, dass trotz richtiger Konfiguration kein Microcode-Update vorgenommen wurde, da der Prozessor bereits auf dem neusten Stand ist. In diesem Fall erhält man eine solche Ausgabe:
Laden des cpuid Kernelmoduls:
  [    0.292893] microcode: CPU0 sig=0x306c3, pf=0x2, revision=0x1c
  # modprobe cpuid
  [    0.292899] microcode: CPU1 sig=0x306c3, pf=0x2, revision=0x1c
Bestimmung der neuesten Firmware-Revision für die vorhandene CPU:
  [    0.292906] microcode: CPU2 sig=0x306c3, pf=0x2, revision=0x1c
  # bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
  [    0.292912] microcode: CPU3 sig=0x306c3, pf=0x2, revision=0x1c
Prüfen, ob diese tatsächlich verwendet wird:  
[    0.292956] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
  grep microcode /proc/cpuinfo
 
Bei AMD-Prozessoren findet das Microcode-Update erst etwas später im Bootprozess statt. Deshalb erhält man ein Ergebnis wie dieses:
Bei AMD-Prozessoren findet das Microcode-Update erst etwas später im Bootprozess statt. Deshalb erhält man ein Ergebnis wie dieses:
  [    0.807879] microcode: CPU0: patch_level=0x01000098
  [    0.807879] microcode: CPU0: patch_level=0x01000098

Version vom 30. Juli 2020, 18:24 Uhr

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.

Unterstützte Prozessoren

Eine Liste mit unterstützten Modellen gibt es sowohl von Intel als auch von AMD.

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

systemd-boot (ehemals 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

Möglichkeit 1: grub.conf automatisch

grub.conf automatisch generieren lassen:

#grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image(s) in /boot: intel-ucode.img initramfs-linux.img
Found fallback initrd image(s) in /boot: intel-ucode.img initramfs-linux-fallback.img
done
# 
Möglichkeit 2: 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.


Syslinux

Man kann hier verschiedene initrd-Einträge durch Kommata 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 ...

Feststellen, ob Microcode-Updates vorgenommen wurden

Möchte man nun überprüfen, ob beim Booten des Systems ein Microcode-Update stattgefunden hat, so kann einen ersten Test mittels

journalctl -k --grep microcode

durchführen. Im Falle von Intelprozessoren mit erfolgreichem Early Loading erhält man etwa folgendes (hier ein Lenovo Thinkpad T480s):

Sep 04 15:31:40 darkstar kernel: microcode: microcode updated early to revision 0xb4, date = 2019-04-01
Sep 04 15:31:40 darkstar kernel: microcode: sig=0x806ea, pf=0x80, revision=0xb4
Sep 04 15:31:40 darkstar kernel: microcode: Microcode Update Driver: v2.2.

Findet kein Microcode-Update statt, sieht die Ausgaben wir folgt aus (hier das selbe Lenovo Thinkpad T480s):

Jul 30 10:21:06 darkstar kernel: SRBDS: Mitigation: Microcode
Jul 30 10:21:06 darkstar kernel: microcode: sig=0x806ea, pf=0x80, revision=0xd6
Jul 30 10:21:06 darkstar kernel: microcode: Microcode Update Driver: v2.2.

Ein negatives Ergebnis muß nicht auf eine Fehlkonfiguration zurückzuführen sein. Es kann auch bedeuten, daß das BIOS bereits die neueste Firmware enthält. Im Falle des exemplarisch verwendeten T480s war dies nach einem BIOS-Update der Fall. Möchte man sichergehen, daß die neueste Firmwareversion geladen ist, geht man wie folgt vor: Installation von iucode-tool

# pacman -S iucode-tool

Laden des cpuid Kernelmoduls:

# modprobe cpuid

Bestimmung der neuesten Firmware-Revision für die vorhandene CPU:

# bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -

Prüfen, ob diese tatsächlich verwendet wird:

grep microcode /proc/cpuinfo

Bei AMD-Prozessoren findet das Microcode-Update erst etwas später im Bootprozess statt. Deshalb erhält man ein Ergebnis wie dieses:

[    0.807879] microcode: CPU0: patch_level=0x01000098
[    0.807888] microcode: CPU1: patch_level=0x01000098
[    0.807983] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[   16.150642] microcode: CPU0: new patch_level=0x010000c7
[   16.150682] microcode: CPU1: new patch_level=0x010000c7