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 を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。仮想マシンやコンテナ内では、マイクロコードのアップデートはゲストシステムではなく、ホストに属します。 == マイクロコードをロードする == 通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/arch/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします: # '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、早期ローダ (early loader) を使って適用することができます。 # '''早期ロード''' は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、早期ロードが必須です。 # '''遅延ロード''' ('''危険''') は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。 更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください: * {{Pkg|amd-ucode}} : AMD プロセッサ * {{Pkg|intel-ucode}} : Intel プロセッサ === initramfs に埋め込まれたマイクロコード === [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode マイクロコード cpio を initramfs 内部に前置する]ことができます。[[dracut]] など ({{man|5|dracut.conf|DESCRIPTION}} を参照) の一部の initramfs ジェネレータは、これをデフォルトで行います。これにより、[[#早期ロード]] と [[#遅延ロード]] は不要になります。しかし、Arch Linux はデフォルトで初期 RAM ディスク (initramfs) の生成に [[mkinitcpio]] を使用し、[[mkinitcpio]] はこの方法をサポートしていません。しかし、UEFI スタブを用いたマイクロコードの読み込みはサポートしています: [[#Unified カーネルイメージ]] を見てください。 === 早期ロード === マイクロコードは、カーネルに組み込まない場合、早期ローダ (early loader) を使って読み込まなければなりません。Unified カーネルイメージの一部として、あるいは [[ブートローダー]]を使って初期 RAM ディスクイメージとしてローダに渡すことができます。 ユーザの初期ブート構成は様々なので、マイクロコードのアップデートは Arch のデフォルトの設定では自動的にトリガーされないことに注意してください。 ==== Unified カーネルイメージ ==== [[Unified カーネルイメージ]] の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。 ==== 初期 RAM ディスクイメージ ==== あるいは、マイクロコードのアップデートを有効にするには、{{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルの 一番目の初期 RAM ディスクイメージ''' として追加しなければなりません。これは、通常の初期 RAM ディスクイメージファイルよりも前です。一般的なブートローダの場合における手順は以下を見てください。 以下のセクションでは {{ic|''cpu_manufacturer''}} の部分をあなたの CPU の製造業者名に置き換えてください、例: {{ic|amd}} か {{ic|intel}}。 {{Tip|[[リムーバブルメディアに Arch Linux をインストール|リムーバブルドライブ上の Arch Linux]] をこれらのプロセッサの両方で動かす可能性がある場合、両方のパッケージをインストールし両方のマイクロコードファイルを {{ic|initrd}} としてブートローダの設定に追加してください。initramfs イメージよりも前に指定していればファイルの順番は関係ありません。}} ===== カスタムカーネルでマイクロコードの早期ロードを有効化 ===== カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。 CONFIG_BLK_DEV_INITRD=Y CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=Y CONFIG_MICROCODE_AMD=y ===== 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 ディスクの前に {{ic|initrd}} オプションを使ってマイクロコードをロード: {{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]] などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux.img}} をひとつのイメージにまとめる必要があります。 {{Warning|カーネルをアップデートするたびに毎回イメージをマージして再生成する必要があります。}} {{Note|イメージの順番は重要です。オリジナルのイメージである {{ic|initramfs-linux}} は {{ic|''cpu_manufacturer''-ucode.img}} イメージよりも先に来るように結合する必要があります。}} ふたつのイメージを {{ic|initramfs-merged.img}} という名前のイメージにマージするには、以下のコマンドを使用: # cat /boot/''cpu_manufacturer''-ucode.img /boot/initramfs-linux.img > /boot/initramfs-merged.img マージできたら {{ic|/etc/lilo.conf}} を編集して新しいイメージをロードします: ... initrd=/boot/initramfs-merged.img ... root で {{ic|lilo}} を実行してください: # lilo ===== Limine ===== [[Limine]] においては、[[Limine#設定|limine.cfg]] ファイル内の {{ic|MODULE_PATH}} オプションにマイクロコードへのパスを追加するだけで良いです。以下は例です: {{hc|limine.cfg|2= DEFAULT_ENTRY=1 TIMEOUT=3 :Arch COMMENT=Arch Linux PROTOCOL=linux KERNEL_PATH=boot:///vmlinuz-linux 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/}} 内のファイルが使用されます。Linux 5.19 以降で遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でカーネルをビルドする必要があります。 AMD プロセッサの場合、マイクロコードのアップデートファイルは {{Pkg|linux-firmware}} により提供されます。 Intel プロセッサの場合、マイクロコードのアップデートファイルが含まれるパッケージはありません ({{Bug|59841}})。遅延ロードするには [https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases Intel が提供しているアーカイブ]から手動で {{ic|intel-ucode/}} を抽出する必要があります。 ==== マイクロコードの遅延アップデートを有効化 ==== 早期ロードとは異なり、マイクロコードアップデートの遅延ロードは Arch Linux ではデフォルトで有効になっており {{ic|/usr/lib/tmpfiles.d/linux-firmware.conf}} を使用します。起動後に {{man|8|systemd-tmpfiles-setup.service}} によってファイルが読み込まれて CPU のマイクロコードが更新されます。 実行中のシステムで手動でマイクロコードをアップデートするには(例: {{ic|/usr/lib/firmware/amd-ucode/}} か {{ic|/usr/lib/firmware/intel-ucode/}} 内のマイクロコードファイルをアップデートした後): # echo 1 > /sys/devices/system/cpu/microcode/reload これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。 ==== マイクロコードの遅延アップデートを無効化 ==== AMD 環境では {{Pkg|amd-ucode}} がインストールされてなくても、{{ic|/usr/lib/firmware/amd-ucode/}} 内のファイルが {{Pkg|linux-firmware}} パッケージにより提供されるため、CPU のマイクロコードはアップデートされてしまいます ({{Bug|59840}})。 [[仮想マシン]]と[[Wikipedia:Container (virtualization)|コンテナ]]では({{Bug|46591}})、CPU のマイクロコードをアップできません。なので、マイクロコードのアップデートを無効化したほうが良いでしょう。 マイクロコードの危険な遅延ロードを無効にしたい場合、{{Pkg|linux-firmware}} により提供される {{ic|/usr/lib/tmpfiles.d/linux-firmware.conf}} [[tmpfiles|tmpfile]] を上書きしてください。{{ic|/etc/tmpfiles.d/}} に同名のファイルを作成することで無効化できます: # ln -s /dev/null /etc/tmpfiles.d/linux-firmware.conf == 起動時にマイクロコードのアップデートがされたか確認する == マイクロコードがアップデートされたかどうか確認するには ''journalctl'' でカーネルメッセージを確認してください: # journalctl -k --grep=microcode Intel が載っているシステムでは、起動時に以下のような表示がされます(以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています): microcode: microcode updated early to revision 0xde, date = 2020-05-18 microcode: sig=0x806ec, pf=0x80, revision=0xde microcode: Microcode Update Driver: v2.2. {{Note|表示される日付は {{pkg|intel-ucode}} パッケージのバージョンとは対応しません。Intel がマイクロコードのアップデートを行った最後の日付が表示されます。}} 最新のハードウェアの場合、CPU のマイクロコードアップデートが存在しないという可能性も考えられます。そのときは、以下のような出力がなされます: microcode: sig=0x806ec, pf=0x80, revision=0xde microcode: Microcode Update Driver: v2.2. AMD 環境でマイクロコードを早期ロードしている場合、以下のように出力されます: microcode: microcode updated early to new patch_level=0x0700010f microcode: CPU0: patch_level=0x0700010f microcode: CPU1: patch_level=0x0700010f microcode: CPU2: patch_level=0x0700010f microcode: CPU3: patch_level=0x0700010f microcode: Microcode Update Driver: v2.2. AMD 環境で起動後にマイクロコードをアップデートしている場合、古いマイクロコードのバージョンが表示されてからマイクロコードがリロードされ、新しいマイクロコードのバージョンが表示されます。例: microcode: CPU0: patch_level=0x0700010b microcode: CPU1: patch_level=0x0700010b microcode: CPU2: patch_level=0x0700010b microcode: CPU3: patch_level=0x0700010b microcode: Microcode Update Driver: v2.2. microcode: CPU2: new patch_level=0x0700010f microcode: CPU0: new patch_level=0x0700010f microcode: CPU1: new patch_level=0x0700010f microcode: CPU3: new patch_level=0x0700010f x86/CPU: CPU features have changed after loading microcode, but might not take effect. == マイクロコードのアップデートができる CPU == 特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます: * [[Gentoo:AMD microcode#Specific firmware only]]。 * [https://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=processor%20microcode%20data%20file Intel のダウンロードセンター]。 === マイクロコードのアップデートが必要かどうか確認する === {{Pkg|iucode-tool}} を使って、使用している CPU のマイクロコードイメージが {{ic|intel-ucode.img}} に含まれているかどうか確認できます。 # {{Pkg|intel-ucode}} を[[インストール]] (アップデートがあるかどうか確認するのに initrd の変更は必要ありません) # {{Pkg|iucode-tool}} を[[インストール]] # {{ic|cpuid}} カーネルモジュールをロード: {{bc|# modprobe cpuid}} # マイクロコードイメージを展開して cpuid で検索:<br/>{{bc|# bsdtar -Oxf /boot/intel-ucode.img {{!}} iucode_tool -tb -lS -}} # アップデートが存在する場合は、''selected microcodes'' の下に表示されます。 # メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが ''dmesg'' に表示されていない可能性もあります。{{ic|grep microcode /proc/cpuinfo}} を実行して現在のマイクロコードを比較してください。 == 参照 == * [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|2023-05-28|778539}}
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
マイクロコード
に戻る。
検索
検索
マイクロコードのソースを表示
話題を追加