Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
マイクロコードのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
マイクロコード
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:CPU]] [[Category:セキュリティ]] [[de:Microcode]] [[en:Microcode]] [[es:Microcode]] [[ru:Microcode]] [[zh-hans:Microcode]] プロセッサの製造者はプロセッサ[[Wikipedia:ja:マイクロプログラム方式|マイクロコード]]に安定性とセキュリティのアップデートをリリースしています。そのようなアップデートには、システムの安定性に深く関わるバグフィックスが含まれています。これがないと、追跡困難な疑わしいクラッシュや予期しないシステム停止を引き起こす場合があります。 AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。仮想マシンやコンテナ内では、マイクロコードのアップデートはゲストシステムではなく、ホストに属します。 == インストール == 更新されたマイクロコードを入手するには、プロセッサに応じて以下のパッケージのどれかを[[インストール]]してください: * {{Pkg|amd-ucode}}: AMD プロセッサ。 * {{Pkg|intel-ucode}}: Intel プロセッサ。 [[mkinitcpio]] と [[dracut]] はデフォルトで、[[#マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする|(メインの initramfs とマイクロコードを) 混合した initramfs ファイル]]を生成します。マイクロコードはブート時に自動的にロードされます。[[Booster]] は混合 initramfs の生成を[https://github.com/anatol/booster/issues/40 サポートしていません]。[[#別個のマイクロコード initramfs ファイルを使う]] で説明されている、必要なブートローダー設定を参照してください。 == マイクロコードをロードする == 通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/arch/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします: # '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、早期ローダ (early loader) を使って適用することができます。 # '''早期ロード''' は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。 # '''遅延ロード''' ([https://github.com/torvalds/linux/commit/9407bda845dd19756e276d4f3abc15a20777ba45 場合によって]は[https://docs.kernel.org/arch/x86/microcode.html#why-is-late-loading-dangerous 危険]) は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。 === 早期ロード === マイクロコードは、カーネルに組み込まない場合、早期ローダ (early loader) によって読み込む必要があります。 早期ローダは、マイクロコードのアップデートファイルが未圧縮 CPIO アーカイブ (initramfs イメージ) 内の {{ic|/kernel/x86/microcode/GenuineIntel.bin}} または {{ic|/kernel/x86/microcode/AuthenticAMD.bin}} として存在していることを期待します。 早期 initramfs イメージ (マイクロコードのアップデートファイル) は、メインの initramfs イメージと合体して1つのファイルにし、(ブートローダーで {{ic|1=initrd=}} カーネルコマンドラインオプションを使うか、ユニファイドカーネルイメージ内にパックして) 単一の initramfs ファイルとしてカーネルに渡すこともできますし、個別のファイルとして使用することもできます (この場合、{{ic|1=initrd=}} カーネルコマンドラインオプションを複数回使用する必要があります)。いずれにせよ、マイクロコードを含んでいる未圧縮 CPIO アーカイブはメインの initramfs より前に配置'''しなければなりません'''。 注意点として、ユーザーの初期ブート構成は多様なので、Arch のデフォルトの設定ではマイクロコードのアップデートは自動的にトリガーされません。 ==== カスタムビルドされたカーネル ==== 早期ローダーを[[カーネル/Arch build system|カスタムカーネル]]で動作させるには、"CPU microcode loading support" を、モジュールとしてコンパイルせずに、カーネルに組み込む必要があります。これにより "Early load microcode" プロンプトが有効化され、これを {{ic|Y}} に設定する必要があります。 CONFIG_BLK_DEV_INITRD=Y CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=Y CONFIG_MICROCODE_AMD=y ==== マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする ==== 未圧縮のマイクロコード CPIO は [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode initramfs の先頭に追加する]ことが可能であり、単一の initramfs ファイルとして利用できるようになります。この方法は、追加のブートパラメータの設定が必要ないため、[[#別個のマイクロコード initramfs ファイルを使う]] の方法よりも推奨されます。 {{Tip|{{ic|/etc/pacman.conf}} の [[NoExtract]] オプションに {{ic|boot/*-ucode.img}} を追加することもできます。マイクロコードのファイルは {{ic|/usr/lib/firmware/*-ucode/}} のものが直接使用されるからです。}} ===== mkinitcpio ===== [[mkinitcpio]] でマイクロコードを含んでいる initramfs ファイルを生成するには、{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列に {{ic|microcode}} フックが含まれていることを確認してください。 {{ic|autodetect}} フックが {{ic|microcode}} フックよりも前にある場合、現在使用している CPU のマイクロコードのみが追加されます。システム上に存在する全ての CPU マイクロコードファイルを追加するには、{{ic|microcode}} フックを {{ic|autodetect}} フックより前に移動するか、{{ic|autodetect}} フックを削除してください。 Initramfs の生成時に ''mkinitcpio'' は以下のようなメッセージを表示します: -> Early uncompressed CPIO image generation successful {{man|1|lsinitcpio}} コマンドを使えば、マイクロコードのアップデートファイルが initramfs 内に存在していることを確認できます。例えば: {{hc|# lsinitcpio --early /boot/initramfs-linux.img {{!}} grep microcode | kernel/x86/microcode/ kernel/x86/microcode/AuthenticAMD.bin }} ===== dracut ===== [[dracut]] に関しては {{man|5|dracut.conf|DESCRIPTION}} を見てください。 ==== 別個のマイクロコード initramfs ファイルを使う ==== 先の方法を用いない場合、マイクロコードの早期アップデートは {{ic|/boot/amd-ucode.img}} や {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルで最初の initrd''' として追加することで有効化する必要があります。マイクロコードの initrd は通常の initrd ファイルよりも前に来る必要があります。一般的なブートローダーにおける手順は以下を参照してください。 以下の章では、{{ic|''cpu_manufacturer''}} という記述はあなたの CPU の製造業者名 (つまり、{{ic|amd}} か {{ic|intel}}) に置き換えてください。 ===== GRUB ===== ''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください: # grub-mkconfig -o /boot/grub/grub.cfg あるいは、GRUB 設定ファイルを手動で管理しているユーザは、以下のように {{ic|/boot/''cpu_manufacturer''-ucode.img}} を追加できます(別のパーティションに {{ic|/boot}} がある場合は {{ic|/''cpu_manufacturer''-ucode.img}}): {{hc|/boot/grub/grub.cfg| ... echo 'Loading initial ramdisk' initrd '''/boot/''cpu_manufacturer''-ucode.img''' /boot/initramfs-linux.img ... }} それぞれのメニュエントリに対してこれを行ってください。 ===== systemd-boot ===== 以下のように、マイクロコードを読み込むオプションを初期 RAM ディスクより前に使用してください: {{hc|/boot/loader/entries/''entry''.conf| title Arch Linux linux /vmlinuz-linux '''initrd /''cpu_manufacturer''-ucode.img''' initrd /initramfs-linux.img ... }} 最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。 ===== EFISTUB ===== 2つの {{ic|1=initrd=}} オプションを末尾に追加してください: '''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img ===== rEFInd ===== {{Tip|以前に {{ic|initrd}} カーネルパラメータを指定しなかったユーザは、複数の {{ic|initrd}} パラメータを渡せるようにするために [[rEFInd#設定]] で説明されている手順に従う必要があります。}} {{ic|/boot/refind_linux.conf}} のブートオプションを編集し、マイクロコードイメージをロードするための {{ic|1=initrd=}} オプションを最初の {{ic|initrd}} 引数として追加してください。{{ic|/boot}} 内のファイルが別のパーティションの直下にあるかどうかに応じて、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} か {{ic|1=initrd=''cpu_manufacturer''-ucode.img}} のどちらかを使ってください。 マイクロコードは、ブートオプションのリストの中で最初に宣言された initramfs でなければなりません。例えば: "Boot using default options" "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap initrd=boot\''cpu_manufacturer''-ucode.img initrd=boot\initramfs-%v.img" ====== 手動でブートオプションを記述する ====== [[rEFInd#手動でブートエントリを記述する|手動]]で {{ic|''esp''/EFI/refind/refind.conf}} にカーネルを定義している場合は、{{ic|1=initrd=}} パラメータを追加して、ブートパーティション内の適切なパスに設定する必要があります。このパラメータは options 行の一部である必要があり、設定のメインの部分ではありません。例: options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''" ===== Syslinux ===== {{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}} {{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます: LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux INITRD '''../''cpu_manufacturer''-ucode.img''',../initramfs-linux.img ... ===== LILO ===== [[LILO]] は複数の初期 RAM ディスクイメージの読み込みをサポートしておらず、他の古いブートローダーも同じくサポートしていない可能性があります。代わりに [[#マイクロコード initramfs とメインの initramfs を1つのファイルに一緒にパックする]] で説明されている方法に従ってください。 ===== Limine ===== [[Limine]] においては、[[Limine#設定|limine.conf]] ファイル内の {{ic|MODULE_PATH}} オプションにマイクロコードへのパスを追加するだけで良いです。以下は例です: {{hc|limine.conf|2= default_entry: 1 timeout: 3 /Arch comment: Arch Linux protocol: linux kernel_path: boot():/vmlinuz-linux kernel_cmdline: root=UUID=c0748521-eca9-4f38-989c-43811b6e39a1 rw loglevel=3 '''module_path: boot():/''cpu_manufacturer-ucode''.img''' module_path: boot():/initramfs-linux.img }} === 遅延ロード === {{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 以降で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}} マイクロコードアップデートの遅延ロードは、システムが起動し終わった後に行われます。その時、{{ic|/usr/lib/firmware/amd-ucode/}} と {{ic|/usr/lib/firmware/intel-ucode/}} にあるファイルが使用されます。AMD CPU と Intel CPU のマイクロコードのアップデートファイルは、それぞれ {{Pkg|amd-ucode}} と {{Pkg|intel-ucode}} によって提供されています。 遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でビルドされたカーネルが必要です。現時点では、Arch の[[カーネル#公式サポートカーネル|公式サポートカーネル]]はこのフラグが有効化されていません。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/8d50b29ca6b927096ecf678cec193fc230b447cd/config#L462] ==== マイクロコードのアップデートの遅延ロード ==== 実行中のシステムで手動でマイクロコードをアップデートするには (例: {{ic|/usr/lib/firmware/amd-ucode/}} か {{ic|/usr/lib/firmware/intel-ucode/}} 内のマイクロコードファイルをアップデートした後に): # echo 1 > /sys/devices/system/cpu/microcode/reload これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。 == 起動時にマイクロコードのアップデートがされたか確認する == マイクロコードがアップデートされたかどうか確認するには ''journalctl'' でカーネルメッセージを確認してください: # journalctl -k --grep='microcode:' ブート時に毎回以下のような出力がなされるはずです (以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています): kernel: microcode: Current revision: 0x00000012 kernel: microcode: Updated early from: 0x0000000e 場合によっては (特に最新のハードウェアの場合)、対象 CPU に対するマイクロコードのアップデートが無い場合もあります。 AMD システムで遅延ロードを使用すると、新しいマイクロコードが再読み込みされる前の古い方のバージョンが表示されます。 == マイクロコードのアップデートができる CPU == 特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます: * [[Gentoo:AMD microcode#Microcode firmware files]]。 * [https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=processor%20microcode%20data%20file Intel のダウンロードセンター]。 === マイクロコードのアップデートが必要かどうか確認する === Intel CPU の場合は、{{man|8|iucode_tool}} コマンドを使うことで、現在使用中の CPU 向けのマイクロコードが {{ic|/usr/lib/firmware/intel-ucode/}} に含まれているかどうかを確認することができます。 # {{Pkg|intel-ucode}} と {{Pkg|iucode-tool}} を[[インストール]]してください。 # {{ic|cpuid}} カーネルモジュールをロード: {{bc|# modprobe cpuid}} # 該当する cpuid を検索: {{bc|$ iucode_tool -lS /usr/lib/firmware/intel-ucode/}} # アップデートが存在する場合は、''selected microcodes'' の下に表示されます。 # メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが ''dmesg'' に表示されていない可能性もあります。{{ic|grep microcode /proc/cpuinfo}} を実行して現在のマイクロコードを比較してください。 AMD CPU の場合、手動により確認することができます。 # CPU のファミリ、モデル、ステッピングを調べてください。例えば、{{bc|1=# journalctl -k --grep='CPU0:'}} の出力を見ると {{ic|(family: 0x15, model: 0x10, stepping: 0x1)}} といった部分があります。 # これらの値を [https://gitlab.com/kernel-firmware/linux-firmware/-/blob/main/amd-ucode/README amd-ucode README] から見つけてください。 # 合うものが見つかったら、実行中のマイクロコードの[[#起動時にマイクロコードのアップデートがされたか確認する|現在のリビジョン]]と README に載っている {{ic|Patch}} の値とを比べてください。 {{Note|ファミリ、モデル、ステッピングは {{man|1|lscpu}} や {{ic|/proc/cpuinfo}} の出力でも確認できます。ただし、出力された値を16進数に変換する必要があります。}} == マイクロコードローダーを無効化する == 更新後の CPU マイクロコードが問題を引き起こす場合、一時的にマイクロコードローダーを無効化してブートできるようにし、パッケージをダウングレードする必要がある場合があります。カーネルのマイクロコードローダーを無効化するには、{{ic|dis_ucode_ldr}} [[カーネルパラメータ]]を指定してください。 == 参照 == * [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes – Experiences in the community] * [http://inertiawar.com/microcode/ Intel マイクロコードアップデートのノート – Ben Hawkes] * [https://docs.kernel.org/arch/x86/microcode.html カーネルマイクロコードローダ – カーネルドキュメント] * [https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Haswell/Broadwell で見つかったエラッタ – AnandTech] * [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト] {{TranslationStatus|Microcode|2024-11-04|819837}}
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
マイクロコード
に戻る。
検索
検索
マイクロコードのソースを表示
話題を追加