Microcode (Русский) - ArchWiki

# Microcode (Русский)

Состояние перевода: На этой странице представлен перевод статьи Microcode. Дата последней синхронизации: 2014-12-16. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Микрокод - это что-то наподобие прошивки для процессора. Ядро может обновлять прошивку процессора без необходимости обновлять её с помощью обновления BIOS.

С сайта Intel

  "В файле данных с микрокодом процессора содержатся новейшие определения микрокодов для всех процессоров Intel. Intel выпускает обновления микрокодов, чтобы обеспечить корректный режим работы процессоров, как описано в соответствующих спецификациях по обновлению процессоров. Обычно этот микрокод обновляется вместе с базовой системой ввода-вывода, но разработчики корпорации Intel понимают, что с этим могут быть административные проблемы. В операционной системе Linux и продуктах VMware ESX есть механизм обновления микрокода после загрузки. Например, чтобы ОС смогла использовать этот файл, его необходимо поместить в каталог /etc/firmware ОС Linux."

## Обновление микрокода

Для процессоров Intel установите intel-ucode.

Для процессоров AMD обновления микрокода поставляются в пакете linux-firmware, который был устанавлен как часть базовой системы.

### Применение обновлений микрокода Intel

Важно: Начиная с версии ядер linux 3.17-2 и linux-lts 3.14.21-2, обновления микрокода Intel больше не применяются автоматически. Многие ядра в AUR пошли по пути официальных ARCH ядер в этом вопросе: в linux-ck 3.16.6-3, обновления микрокода Intel больше не применяются автоматически.

Чтобы применить эти обновления, добавьте `/boot/intel-ucode.img` в качестве первого initrd в конфигурационном файле загрузчика. Это в дополнение к обычному initrd файлу.

### Конкретные примеры

#### EFI boot stub / EFI handover

Добавьте две `initrd=` опции:

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

#### Gummiboot

Используйте `initrd` опцию дважды в `/boot/loader/entries/*.conf`:

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

#### rEFInd

Отредактируйте опции загрузки в `/boot/refind_linux.conf` также как в примере EFI boot stub выше:

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

Пользователи, которые создают строфы вручную в `/boot/refind.conf` для определения ядер должны просто добавить `initrd=/intel-ucode.img` или `/boot/intel-ucode.img` как это требуется в строке опций, а не в главной части строфы.

#### Grub

После релиза grub-1:2.02-beta2-5, grub-mkconfig автоматически применит обновление микрокода. Пользователи должны пересоздать конфигурацию grub для активации загрузки обновления микрокода, выполнив команду `# grub-mkconfig -o /boot/grub/grub.cfg` после установки intel-ucode.

Альтернативный вариант: пользователи, желающие вручную управлять файлом конфигурации grub могут добавить `/intel-ucode.img` или `/boot/intel-ucode.img` в `grub.cfg` как показано ниже:

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

Обратите внимание: Проделайте это для всех пунктов меню.
Важно: Этот файл будет автоматически перезаписан `/usr/bin/grub-mkconfig`'ом во время определённых обновлений, затирая ваши изменения.

#### Syslinux

Обратите внимание: Между указаниями файлов initrd (`intel-ucode` и `initramfs-linux`) не должно быть пробелов. Точки здесь вовсе не означают каких-либо сокращений или пропущенного кода: все должно быть указано ровно так, как показано в примере.

Несколько файлов initrd могут быть разделены запятыми в `/boot/syslinux/syslinux.cfg`:

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

## Проверим, обновился ли microcode при загрузке

Чтобы убедиться, что микрокод обновился, воспользуемся `/usr/bin/dmesg`:

    $ dmesg | grep microcode

На системах Intel вы должны увидеть что-то похожее на это, что говорит о том, что микрокод обновился рано:

    [    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

Вполне возможно, особенно с новым аппаратным обеспечением, что для вашего CPU нет обновления микрокода. В этом случае вы можете увидеть примерно следующее:

    [    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

На системах AMD микрокод обновляется несколько позже в процессе загрузки, поэтому вывод выглядит примерно так:

    [    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

Обратите внимание: Отображаемая дата отвечает не за версию установленного пакета intel-ucode. Это дата последнего обновления микрокода от Intel для вашего конкретного процессора.

## Каким CPU нужны обновления микрокода

Пользователи могут проконсультироваться как у Intel, так и у AMD насчёт поддержки конкретной модели процессора, перейдя по следующим ссылкам:

- AMD's Operating System Research Center.
- Центр загрузки Intel.

### Обнаружение доступного обновления микрокода

Вы можете узнать, содержит ли `intel-ucode.img` образ микрокода для вашего процессора с помощью iucode-tool.

- Установите intel-ucode (для обнаружения обновления не требуется менять initrd)
- Установите iucode-tool из AUR
- `# modprobe cpuid`
- `# bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -`

  (Команда извлекает образ микрокода и ищет в нём ваш cpuid)

- Если обновление доступно, оно должно отобразиться под selected microcodes

## Применение ранней загрузки микрокода Intel в кастомных ядрах

Для того, чтобы ранняя загрузка работала в кастомных ядрах, "CPU microcode loading support" должен быть вкомпилирован в ядро, а НЕ скомпилирован как модуль. Это активирует "Early load microcode" промпт, который должен быть установлен в "Y".

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

## Смотрите также

- Updating microcodes
- Notes on Intel Microcode updates

Categories:

- CPU (Русский)
- Русский