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 に深刻なハードウェアバグが存在する場合、早期ロードが必須です。 # '''遅延ロード''' ([https://docs.kernel.org/arch/x86/microcode.html#why-is-late-loading-dangerous 危険]) は、起動後にマイクロコードをアップデートします。CPU が欠陥のある命令の使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。 更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください: * {{Pkg|amd-ucode}} : AMD プロセッサ * {{Pkg|intel-ucode}} : Intel プロセッサ === initramfs に埋め込まれたマイクロコード === マイクロコード CPIO は [https://docs.kernel.org/arch/x86/microcode.html#early-load-microcode initramfs の先頭に埋め込むことができます]。Arch Linux の [[mkinitcpio]] は、({{ic|microcode}} フックが [[mkinitcpio#設定|mkinitcpio の設定]]の {{ic|HOOKS}} 配列に含まれている場合) デフォルトで initramfs にマイクロコードを埋め込みます。また、[[dracut]] も initramfs にマイクロコードを埋め込みます ({{man|5|dracut.conf|DESCRIPTION}} を参照)。この場合、[[#早期ロード]] と [[#遅延ロード]] は必要ありません。 === 早期ロード === マイクロコードは、カーネルに組み込まない場合、早期ローダ (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 ディスクより前に使用してください: {{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/}} にあるファイルが使用されます。 遅延ロードを行うには、{{ic|1=CONFIG_MICROCODE_LATE_LOADING=y}} でビルドされたカーネルが必要です。現時点では、Arch の[[カーネル#公式サポートカーネル|公式サポートカーネル]]はこのフラグが有効化されていません。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/8d50b29ca6b927096ecf678cec193fc230b447cd/config#L462] AMD プロセッサの場合、マイクロコードのアップデートファイルは {{Pkg|amd-ucode}} により提供されます。 Intel プロセッサの場合、マイクロコードのアップデートファイルが含まれるパッケージはありません ({{Bug|59841}})。遅延ロードするには [https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases Intel が提供しているアーカイブ]から手動で {{ic|intel-ucode/}} を抽出する必要があります。 ==== マイクロコードのアップデートの遅延ロード ==== 実行中のシステムで手動でマイクロコードをアップデートするには (例: {{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 Intel が載っているシステムでは、起動時に以下のような表示がされます (以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています): kernel: microcode: Current revision: 0x00000012 kernel: microcode: Updated early from: 0x0000000e 場合によっては (特に最新のハードウェアの場合)、対象 CPU に対するマイクロコードのアップデートが無い場合もあります。 AMD 環境でマイクロコードを早期ロードしている場合、以下のように出力されます: kernel: microcode: CPU3: patch_level=0x0a20102b kernel: microcode: CPU10: patch_level=0x0a20102b ... kernel: microcode: Microcode Update Driver: v2.2. AMD システムで遅延ロードを使用すると、新しいマイクロコードが再読み込みされる前の古い方のバージョンが表示されます。 == マイクロコードのアップデートができる 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|2024-03-13|802818}}
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
マイクロコード
に戻る。
検索
検索
マイクロコードのソースを表示
話題を追加