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/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします: # '''早期ロード''' は、起動中の非常に早い段階(initramfs ステージよりも前)でマイクロコードをアップデートします。なので、これは推奨される方法です。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、これは必須です。 # '''遅延ロード'''('''危険''') は、起動後にマイクロコードをアップデートします。CPU がバグのある命令セットの使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。 # '''組み込みマイクロコード''' はカーネルにコンパイルされます。早期ローダ(early loader)により適用されます。 == 早期ロード == === インストール === プロセッサに応じて以下のパッケージを[[インストール]]してください: * {{Pkg|amd-ucode}} AMD プロセッサ向け * {{Pkg|intel-ucode}} Intel プロセッサ向け マイクロコードは[[ブートローダー]]によって読み込まれなければなりません。初期ブート設定はユーザによって様々なので、マイクロコードのアップデートは Arch のデフォルト設定では自動的にトリガーされない場合があります。この点について AUR カーネルの多くは Arch の公式[[カーネル]]と同じようになっています。 アップデートを有効にするには、{{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルの 一番目の initrd''' として追加しなければなりません。これは、通常の initrd ファイルよりも前です。一般的なブートローダの場合における手順は以下を見てください。 以下のセクションでは {{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}} をコピーしてください。 ==== Unified カーネルイメージ ==== [[Unified カーネルイメージ#手動で]] を見てください。 ==== EFISTUB ==== 2つの {{ic|1=initrd=}} オプションを末尾に追加してください: '''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img ==== rEFInd ==== {{ic|/boot/refind_linux.conf}} のブートオプションを編集し、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} を最初の initramfs として追加してください( {{ic|/boot}} が別のパーティションに存在する場合は {{ic|1=initrd=''cpu_manufacturer''-ucode.img}})。例えば: "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" {{Tip|以前に {{ic|initrd}} カーネルパラメータを指定しなかったユーザは、複数の {{ic|initrd}} パラメータを渡すために [[rEFInd#設定]] で説明されている手順に従う必要があります。}} [[rEFInd#手動でブートエントリを記述|手動]]で {{ic|''esp''/EFI/refind/refind.conf}} にカーネルを定義している場合はメインの部分ではなく options 行に {{ic|/boot/''cpu_manufacturer''-ucode.img}} ({{ic|/boot}} パーティションを分けている場合は {{ic|/''cpu_manufacturer''-ucode.img}}) を追加してください。例: 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 == 遅延ロード == {{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 == initramfs に埋め込まれたマイクロコード == 使用中の initramfs ジェネレータがすでに [https://docs.kernel.org/x86/microcode.html#early-load-microcode マイクロコード cpio を initramfs に付加しているのであれば]、[[#早期ロード]]と[[#遅延ロード]]は必要ありません。例えば、[[dracut]] はデフォルトでこれを行います。{{man|5|dracut.conf|DESCRIPTION}} を見てください。 {{Expansion|What about mkinitcpio and Booster?}} {{Accuracy|[[#カスタムカーネルでマイクロコードの早期ロードを有効化]] の場合は?}} {{Expansion|The [[#top|introduction]] does not cover this section.}} == 起動時にマイクロコードのアップデートがされたか確認する == マイクロコードがアップデートされたかどうか確認するには ''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/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 プロジェクト]
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
マイクロコード
に戻る。
検索
検索
マイクロコードのソースを表示
話題を追加