Microcode (Español)

From ArchWiki
Jump to: navigation, search

El microcódigo del procesador es similar al firmware del procesador. El kernel es capaz de actualizar el firmware del procesador sin necesidad de actualizarlo a través de una actualización de la BIOS.

El archivo de datos del microcódigo contiene las definiciones más recientes de microcódigo para todos los procesadores de Intel. Intel lanza actualizaciones de microcódigo para corregir el comportamiento del procesador como se documenta en las respectivas actualizaciones de las especificaciones del procesador. Mientras que el método ordinario para obtener esta actualización de microcódigo es a través de una actualización de la BIOS, Intel da cuenta de que esto puede ser una molestia administrativa. El sistema operativo Linux y los productos de VMware ESX tienen un mecanismo para actualizar el microcódigo después de arrancar. Por ejemplo, este archivo será utilizado por el mecanismo del sistema operativo si el archivo se coloca en el directorio /etc/firmware del sistema Linux. ~Intel

Actualización del microcódigo

Para los procesadores de Intel, instale intel-ucode.

Para los procesadores de AMD, las actualizaciones del microcódigo están disponibles en linux-firmware, que se instala como parte del sistema base.

Activación de las actualizaciones del microcódigo de Intel

Advertencia: Desde linux 3.17-2, linux-lts 3.14.21-2 y siguientes, las actualizaciones del microcódigo de Intel no están activadas de forma automática. Algunos kernels disponibles en AUR han seguido el camino de los kernels oficiales de ARCH en este sentido: desde linux-ck 3.16.6-3, las actualizaciones del microcódigo de Intel no se activan automáticamente.

Estas actualizaciones deben ser activadas añadiendo /boot/intel-ucode.img como el primer initrd en el archivo de configuración del gestor de arranque. Este se añade además del archivo initrd normal.

Ejemplos específicos

EFI boot stub / EFI handover

Añada dos opciones initrd=:

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

Gummiboot

Utilice la opción initrd dos veces en /boot/loader/entries/*.conf:

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

rEFInd

Edite las opciones de arranque en /boot/refind_linux.conf según se indica arriba para EFI boot stub, ejemplo:

"Boot with standard options" "ro root=UUID=(...) quiet initrd=/intel-ucode.img initrd=/initramfs-linux.img"

Los usuarios que emplean stanza manuales en /boot/refind.conf para definir los kernels, simplemente deben añadir initrd=/intel-ucode.img o /boot/intel-ucode.img, según se requiera, a la línea options, y no en la parte principal de stanza.

Grub

Con el lanzamiento de grub-1:2.02-beta2-5, /usr/bin/grub-mkconfig manejará automáticamente la actualización del microcódigo. Los usuarios son emplazados a regenerar el archivo de configuración de grub ejecutando # grub-mkconfig -o /boot/grub/grub.cfg para activar la carga de la actualización del microcódigo, después de instalar intel-ucode.

Alternativamente, los usuarios que deseen gestionar el archivo de configuración de grub manualmente pueden añadir /intel-ucode.img o /boot/intel-ucode.img a grub.cfg como sigue:

	[...]
	echo	'Loading initial ramdisk ...'
	initrd	/intel-ucode.img /initramfs-linux.img
	[...]
Nota: Repítalo para cada entrada del menú.
Advertencia: Este archivo será automáticamente sobrescrito por /usr/bin/grub-mkconfig durante ciertas actualizaciones negando los cambios.

Syslinux

Múltiples initrd pueden estar separados por comas en /boot/syslinux/syslinux.cfg:

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

Verificar qué microcódigo quedó actualizado en el arranque

Utilice /usr/bin/dmesg para ver si el microcódigo se ha actualizado: dmesg | grep microcode

En los sistemas Intel se debe ver algo similar a lo siguiente, lo que indica que el microcódigo se actualiza tempranamente:

[    0.000000] CPU0 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.221951] CPU1 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.242064] CPU2 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.262349] CPU3 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507335] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

Es completamente posible, en particular con hardware más nuevo, que no haya actualizaciones del microcódigo para la CPU. En esos caso, la salida puede tener este aspecto:

[    0.292893] microcode: CPU0 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292899] microcode: CPU1 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292906] microcode: CPU2 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292912] microcode: CPU3 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292956] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

En los sistemas AMD, el microcódigo se actualiza un poco más adelante en el proceso de arranque, por lo que la salida sería algo como esto:

[    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
Nota: La fecha emitida no se corresponde con la versión del paquete intel-ucode instalado. Lo que muestra es la última vez que Intel actualizó el microcódigo que se corresponde con el hardware específico que es objeto de actualización.

¿Qué CPU aceptan actualizaciones de microcódigo?

Los usuarios pueden consultar, ya sea Intel o AMD, en los siguientes enlaces para ver si es soportado un modelo en particular:

Detectar la actualización del microcódigo disponible

Es posible saber si intel-ucode.img contiene una imagen de microcódigo para la cpu sobre la que corre con iucode-toolAUR.

  • Instale intel-ucode (no es necesario cambiar initrd para la detección)
  • Instale iucode-toolAUR disponible en AUR
  • # modprobe cpuid
  • # bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
    (Extrae la imagen microcode y la busca para su cpuid)
  • Si hay una actualización disponible, debería aparecer debajo de selected microcodes

Activación de la carga de Intel Early Microcode en Kernels personalizados

A fin de que la carga temprana funcione en kernels personalizados, necesita que «CPU microcode loading support» sea compilado en el kernel mismo NO como módulo del kernel. Esto activará el prompt «Early load microcode» que debe ser ajustado a «Y».

CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_INTEL_EARLY=y
CONFIG_MICROCODE_EARLY=y