「マイクロコード」の版間の差分
細 (文字列「[[zh-CN:」を「[[zh-hans:」に置換) |
(同期) |
||
31行目: | 31行目: | ||
{{bc|1=initrd=/intel-ucode.img initrd=/initramfs-linux.img}} |
{{bc|1=initrd=/intel-ucode.img initrd=/initramfs-linux.img}} |
||
− | ==== |
+ | ==== systemd-boot ==== |
− | {{ic|/boot/loader/entries/ |
+ | {{ic|/boot/loader/entries/''entry''.conf}} で {{ic|initrd}} オプションを二回使用: |
title Arch Linux |
title Arch Linux |
||
40行目: | 40行目: | ||
initrd /initramfs-linux.img |
initrd /initramfs-linux.img |
||
options ... |
options ... |
||
+ | |||
+ | [[EFI システムパーティション]]を {{ic|/boot}} にマウントしていない場合、{{ic|/boot/intel-ucode.img}} を EFI システムパーティションにコピーしてください。 |
||
==== rEFInd ==== |
==== rEFInd ==== |
||
45行目: | 47行目: | ||
上記の EFI ブートスタブと同じように {{ic|/boot/refind_linux.conf}} のブートオプションを編集する、例: |
上記の EFI ブートスタブと同じように {{ic|/boot/refind_linux.conf}} のブートオプションを編集する、例: |
||
− | "Boot with standard options" " |
+ | "Boot with standard options" "rw root=UUID=(...) quiet initrd=/boot/intel-ucode.img initrd=/boot/initramfs-linux.img" |
− | 手動で {{ic|/boot/refind.conf}} にカーネルを定義している場合はメインの部分ではなく options 行に {{ic|1=initrd=/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を追加してください。 |
+ | [[rEFInd#手動でブートエントリを記述|手動]]で {{ic|/boot/refind.conf}} にカーネルを定義している場合はメインの部分ではなく options 行に {{ic|1=initrd=/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を追加してください。 |
==== Grub ==== |
==== Grub ==== |
||
grub-1:2.02-beta2-5 から、''grub-mkconfig'' が自動的にマイクロコードのアップデートを処理します。{{Pkg|intel-ucode}} をインストールした後に {{ic|# grub-mkconfig -o /boot/grub/grub.cfg}} を実行して、grub の設定を再生成し、マイクロコードのアップデートのロードを有効にしてください。 |
grub-1:2.02-beta2-5 から、''grub-mkconfig'' が自動的にマイクロコードのアップデートを処理します。{{Pkg|intel-ucode}} をインストールした後に {{ic|# grub-mkconfig -o /boot/grub/grub.cfg}} を実行して、grub の設定を再生成し、マイクロコードのアップデートのロードを有効にしてください。 |
||
− | もしくは、 |
+ | もしくは、[[GRUB]] の設定ファイルを手動で管理したい場合、以下のように {{ic|grub.cfg}} に {{ic|/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を追加します: |
[...] |
[...] |
||
73行目: | 75行目: | ||
LINUX ../vmlinuz-linux |
LINUX ../vmlinuz-linux |
||
INITRD ../intel-ucode.img,../initramfs-linux.img |
INITRD ../intel-ucode.img,../initramfs-linux.img |
||
− | APPEND |
+ | APPEND ''<your kernel parameters>'' |
+ | |||
+ | === LILO === |
||
+ | |||
+ | LILO などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 {{ic|intel-ucode}} と {{ic|initramfs-linux}} をひとつのイメージにまとめる必要があります。 |
||
+ | {{Warning|カーネルをアップデートするたびに毎回イメージをマージして再生成する必要があります。}} |
||
+ | {{Note|{{ic|intel-ucode}} などの追加イメージは圧縮してはいけません。圧縮すると未圧縮イメージのごみしか認識されずカーネルがエラーを吐いて起動に失敗してしまいます。}} |
||
+ | {{ic|intel-ucode.img}} は cpio アーカイブになっています。マイクロコードのアップデートがあるたびにアーカイブが圧縮されているかどうか確認することを推奨します。今後もイメージが同じフォーマットである保証はありません。{{ic|intel-ucode}} が圧縮されているかどうか確認するには {{ic|file}} コマンドを使います: |
||
+ | $ file /boot/intel-ucode.img |
||
+ | /boot/intel-ucode.img: ASCII cpio archive (SVR4 with no CRC) |
||
+ | {{Note|イメージの順番は重要です。オリジナルのイメージである {{ic|initramfs-linux}} は {{ic|intel-ucode}} イメージよりも先に来るように結合する必要があります。}} |
||
+ | ふたつのイメージを {{ic|initramfs-merged.img}} という名前のイメージにマージするには、以下のコマンドを使用: |
||
+ | |||
+ | # cat /boot/intel-ucode.img /boot/initramfs-linux.img > /boot/initramfs-merged.img |
||
+ | |||
+ | マージできたら {{ic|/etc/lilo.conf}} を編集して新しいイメージをロードします: |
||
+ | |||
+ | [...] |
||
+ | initrd=/boot/initramfs-merged.img |
||
+ | [...] |
||
+ | |||
+ | root で {{ic|lilo}} を実行してください: |
||
+ | |||
+ | # lilo |
||
== 起動時にマイクロコードのアップデートがされたか確認する == |
== 起動時にマイクロコードのアップデートがされたか確認する == |
||
119行目: | 144行目: | ||
* [http://www.amd64.org/microcode.html AMD の Operating System Research Center]。 |
* [http://www.amd64.org/microcode.html AMD の Operating System Research Center]。 |
||
− | * [https://downloadcenter.intel.com/download/ |
+ | * [https://downloadcenter.intel.com/download/26798/Linux-Processor-Microcode-Data-File Intel のダウンロードセンター]。 |
=== マイクロコードのアップデートが必要かどうか確認する === |
=== マイクロコードのアップデートが必要かどうか確認する === |
||
136行目: | 161行目: | ||
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。 |
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。 |
||
+ | CONFIG_BLK_DEV_INITRD=Y |
||
CONFIG_MICROCODE=y |
CONFIG_MICROCODE=y |
||
− | CONFIG_MICROCODE_INTEL= |
+ | CONFIG_MICROCODE_INTEL=Y |
− | CONFIG_MICROCODE_INTEL_EARLY=y |
||
− | CONFIG_MICROCODE_EARLY=y |
||
== 参照 == |
== 参照 == |
||
* [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes] |
* [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes] |
||
− | * [http://inertiawar.com/microcode/ |
+ | * [http://inertiawar.com/microcode/ Intel によるマイクロコードアップデートのノート] |
− | * [https://www.kernel.org/doc/Documentation/x86/early-microcode.txt |
+ | * [https://www.kernel.org/doc/Documentation/x86/early-microcode.txt マイクロコードのカーネルドキュメント] |
− | * [http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly |
+ | * [http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Haswell/Broadwell で見つかったエラッタ] |
+ | * [https://gitlab.com/iucode-tool/iucode-tool 技術的な詳細] |
2017年8月7日 (月) 02:04時点における版
プロセッサのマイクロコードはプロセッサのファームウェアと同種のものです。カーネルは BIOS のアップデートをすることなくプロセッサのファームウェアをアップデートすることができます。Intel のウェブサイトより:
- マイクロコードのデータファイルには全ての Intel プロセッサのための最新のマイクロコードが定義されています。Intel はマイクロコードのアップデートをリリースすることで、それぞれのプロセッサの仕様のアプリケーションに文書化されているようにプロセッサの挙動を修正します。一般的に、このマイクロコードの更新を行うのは BIOS のアップデートによりますが、これは管理者を困らせるような羽目になることがあるのを Intel は了解しています。Linux オペレーティングシステムや VMware ESX プロダクトには起動後にマイクロコードを更新する仕組みが備わっています。例えば、Linux システムの
/etc/firmware
ディレクトリにファイルが配置されると、オペレーティングシステムの仕組みがこのファイルを使用します。
目次
マイクロコードのアップデート
Intel のプロセッサの場合、intel-ucode をインストールしてください。
AMD のプロセッサの場合、マイクロコードのアップデートは linux-firmware で利用することができ、このパッケージはベースシステムの一部としてインストールされます。
Intel のマイクロコードのアップデートを有効にする
アップデートを有効にするにはブートローダーの設定ファイルに /boot/intel-ucode.img
を一番目の initrd として追加する必要があります。通常の initrd ファイルとは別に追加します。
サンプル
EFI ブートスタブ / EFI ハンドオーバー
2つの initrd=
オプションを追加:
initrd=/intel-ucode.img initrd=/initramfs-linux.img
systemd-boot
/boot/loader/entries/entry.conf
で initrd
オプションを二回使用:
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options ...
EFI システムパーティションを /boot
にマウントしていない場合、/boot/intel-ucode.img
を EFI システムパーティションにコピーしてください。
rEFInd
上記の EFI ブートスタブと同じように /boot/refind_linux.conf
のブートオプションを編集する、例:
"Boot with standard options" "rw root=UUID=(...) quiet initrd=/boot/intel-ucode.img initrd=/boot/initramfs-linux.img"
手動で /boot/refind.conf
にカーネルを定義している場合はメインの部分ではなく options 行に initrd=/intel-ucode.img
や /boot/intel-ucode.img
を追加してください。
Grub
grub-1:2.02-beta2-5 から、grub-mkconfig が自動的にマイクロコードのアップデートを処理します。intel-ucode をインストールした後に # grub-mkconfig -o /boot/grub/grub.cfg
を実行して、grub の設定を再生成し、マイクロコードのアップデートのロードを有効にしてください。
もしくは、GRUB の設定ファイルを手動で管理したい場合、以下のように grub.cfg
に /intel-ucode.img
や /boot/intel-ucode.img
を追加します:
[...] echo 'Loading initial ramdisk ...' initrd /intel-ucode.img /initramfs-linux.img [...]
Syslinux
/boot/syslinux/syslinux.cfg
で複数の initrd をカンマで区切って指定できます:
LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux INITRD ../intel-ucode.img,../initramfs-linux.img APPEND <your kernel parameters>
LILO
LILO などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 intel-ucode
と initramfs-linux
をひとつのイメージにまとめる必要があります。
intel-ucode.img
は cpio アーカイブになっています。マイクロコードのアップデートがあるたびにアーカイブが圧縮されているかどうか確認することを推奨します。今後もイメージが同じフォーマットである保証はありません。intel-ucode
が圧縮されているかどうか確認するには file
コマンドを使います:
$ file /boot/intel-ucode.img /boot/intel-ucode.img: ASCII cpio archive (SVR4 with no CRC)
ふたつのイメージを initramfs-merged.img
という名前のイメージにマージするには、以下のコマンドを使用:
# cat /boot/intel-ucode.img /boot/initramfs-linux.img > /boot/initramfs-merged.img
マージできたら /etc/lilo.conf
を編集して新しいイメージをロードします:
[...] initrd=/boot/initramfs-merged.img [...]
root で lilo
を実行してください:
# lilo
起動時にマイクロコードのアップデートがされたか確認する
マイクロコードがアップデートされたかどうか確認するには /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
マイクロコードのアップデートができる CPU
特定のモデルがサポートされているのかどうかは以下のリンクから Intel や AMD のサイトで確認することができます:
マイクロコードのアップデートが必要かどうか確認する
iucode-toolAUR を使って、使用している cpu のマイクロコードイメージが intel-ucode.img
に含まれているかどうか確認できます:
- intel-ucode をインストール (アップデートがあるかどうか確認するのに initrd の変更は必要ありません)
- AUR から iucode-toolAUR をインストール
# modprobe cpuid
# bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
(マイクロコードイメージを展開して cpuid を検索します)- アップデートが存在する場合は、selected microcodes の下に表示されます。
- メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが dmesg に表示されていない可能性もあります。
grep microcode /proc/cpuinfo
を実行して現在のマイクロコードを比較してください。
カスタムカーネルで Intel のマイクロコードのロードを有効にする
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。
CONFIG_BLK_DEV_INITRD=Y CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=Y