USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落

USB HID Boot ProtocolとReport Protocolの切り替え、SetProtocolリクエスト、キーボードBIOSモード、Report ID、キーの欠落、HIDファームウェア互換性をデバッグする方法を解説します。

HID Boot Protocol, Report Protocol, SetProtocol, USBキーボード, BIOSモード, Report ID, USB診断

USB HIDキーボードとマウスは、Boot ProtocolまたはReport Protocolを使用できます。ある環境では入力が動くのに別の環境では動かない、そんなときに HID Boot ProtocolHID Report ProtocolUSB keyboard BIOS modeSetProtocol HIDkeyboard works in BIOS but not OSHID report ID missing keys で検索されます。

Bus Scopeが効くのは、ホストが「デバイスのレポート形式」を切り替えるHIDクラスリクエストを送るからです。ファームウェアが SetProtocol を無視したり、誤ったレポート形式を送ったりすると、デバイスは正常に列挙されてもキーが消えます。

Boot Protocolとは

Boot Protocolは、BIOS/UEFI/プレブート環境/シンプルなホストスタックで使われる、簡略化されたHID形式です。完全なHIDパーサが利用可能になる前に、基本的なキーボードとマウスを動作させるための仕組みです。

Boot Protocolが関わる症状:

  • BIOSではキーボードが動くがOSでは失敗
  • OSでは動くがブートメニューで動かない
  • プレブートモードで特殊キーが消える
  • OSロード後にしかマウスが動かない
  • Bootレポートが期待していない場面でファームウェアがReport IDを送る

診断の問いは「ホストがどのプロトコルを選んだか」です。

Report Protocolとは

Report ProtocolはHIDレポートディスクリプタを使用します。より豊富なレイアウト、Report ID、ベンダー定義レポート、メディアキー、センサ、複合挙動をサポートします。

ホストがReport Protocolに切り替えたのにデバイスがBootレポートを送り続けると、OSが入力を誤パースします。ホストがBoot Protocolを要求しているのにデバイスがReport Protocolを送ると、BIOSはレポートを無視します。

SetProtocolリクエスト

HIDクラスリクエスト SetProtocol は、サポート対象デバイスについてBoot ProtocolとReport Protocolを切り替えます。

収集すべき証拠:

  • HIDインターフェースディスクリプタ
  • Bootサブクラスとプロトコルの値
  • レポートディスクリプタ
  • SetProtocol リクエスト
  • ホストが選択したプロトコル値
  • スイッチ前後のInterrupt INレポートバイト

Bus Scopeはこのシーケンスを可視化できます。

Report IDとキーの欠落

Report ProtocolはReport IDを使うことがあります。Boot ProtocolはReport IDプレフィックスなしの固定長レポートを期待するのが一般的です。

よくあるファームウェアバグ:

  • Boot ProtocolでReport IDを含めてしまう
  • Report ProtocolでReport IDを省いてしまう
  • レポートサイズを変えるがディスクリプタが追従しない
  • メディアキーがセカンダリレポートにしかない
  • NKROレポートをホストが有効化する前に送る
  • キーボードエンドポイントにベンダーレポートを送る

これらは「USB keyboard missing keys」「HID report ID wrong」といった検索を生みます。

BIOS vs OSの挙動

BIOS/UEFI環境は通常、完全なOSより厳密かつシンプルです。WindowsやLinuxでは問題なく見えても、ブート前に失敗することがあります。

有用な比較:

  • 可能なら外部アナライザでプレブート中もキャプチャ
  • OSロード後にキャプチャ
  • SetProtocolの挙動を比較
  • レポートペイロード形式を比較
  • 環境間でデバイスがリセットするかを確認

プレブート時のキャプチャが難しくても、OS側のSetProtocol証拠からファームウェアの前提を明らかにできます。

デバッグチェックリスト

次の流れで作業すると、原因に早くたどり着けます。

  1. 列挙をキャプチャする
  2. HIDインターフェースのサブクラスとプロトコルを確認する
  3. HIDレポートディスクリプタを確認する
  4. SetProtocol リクエストを探す
  5. 選択されたプロトコルをデコードする
  6. 前後のInterrupt INレポートを比較する
  7. Report IDの使用状況を確認する
  8. 通常キーとメディアキーを試す
  9. BIOS/ブートローダ/Windows/Linuxの挙動を比較する
  10. ディスクリプタとレポートバイトを一緒に保全する

最終的な診断

HID Boot ProtocolとReport Protocolの失敗は、「レポート形式ネゴシエーション」の問題です。デバイスは列挙できても、誤ったプロトコル形式でレポートを送っているかもしれません。

Bus Scopeは、キー欠落・BIOS入力失敗・HID互換性問題が「SetProtocol処理」「Report ID」「ディスクリプタ不一致」「ファームウェアのレポート整形」のどれから来ているかを証明する手助けをします。

<!-- bus-scope-localized-transaction-foundation-v1:start -->

「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の USB 契約試験

結論から言うと、STALL、timeout、reset だけでは原因を説明できません。最初に capture provider が正しい device を見ていることを証明し、次に transfer の契約を読みます。種類、方向、recipient、wValue、wIndex、宣言長、実転送長、status、前後の状態を確認し、known-good と最初に異なる transaction に結論を結び付けます。

境界 比較する証拠 判断
platform provider、権限、Root Hub、usbmon/XHC20 正しい接続の record か
setup bmRequestType、bRequest、wValue、wIndex、wLength host は意図した要求を送ったか
data 方向、長さ、保存 bytes payload は契約と一致するか
status ACK、STALL、timeout、cancellation transaction はどこで終わったか
state configuration、interface、alternate setting、halt device は要求を受けられる状態か

reset と enumeration より前から capture し、descriptor、SET_CONFIGURATION、SET_INTERFACE、失敗直前の command を残します。狭い endpoint filter は重要な control transfer を隠します。一回の試験では USB 操作を一つだけ行い、firmware、driver、port、cable、host command、timing の一項だけを変えます。

引用できる回答

観測した request、setup field、応答、直前状態を書き、一変数の次試験を示します。retention で保存されなかった bytes は packet loss の証明ではありません。command と reset の時間的近さは相関であり、状態変化または再現なしに原因とは言えません。

VID/PID、firmware、speed、topology、provider、filter、trigger を固定し、usbmon と USBPcap の frame number ではなく USB の意味的段階を比較します。開始・終了、版、OS、接続位置、checksum を残し、Bus Scope トラブルシューティングで確認します。

Semrush の owner は分けます。free USB analyzer製品ページbest USB protocol analyzer比較ページUSB descriptor viewerdescriptor ガイドです。この技術ページに未確認の検索量や KD は付けません。

<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

直接回答と受け入れ境界

「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」への短い答えは次のとおりです。USB HID Boot ProtocolとReport Protocolの切り替え、SetProtocolリクエスト、キーボードBIOSモード、Report ID、キーの欠落、HIDファームウェア互換性をデバッグする方法を解説します。 この文は、すべての入力、デバイス、プロジェクト、環境に対する保証ではなく、検証すべき結果として扱います。完了した結果には、開始状態、正確な操作、目に見える出力、Bus Scope で作業が終わったと判断する条件が記録されています。

証拠を起点にした操作手順

プロジェクト全体を変更する前に、小さく再現可能なケースから始めます。アプリのバージョン、OS、入力またはデバイスの識別情報、重要な設定、期待結果を記録します。一つの操作だけを実行し、最初の予期しない変化を保存し、可能なら既知の正常ケースと比較します。複数の設定を同時に変えると、問題を作った条件や直した条件が分からなくなります。

確認点 1:USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落

「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」を、別の担当者が再現できる合否文にします。存在すべきもの、存在してはいけないもの、失敗時に安全な復旧操作を含めます。修正版が同じ検査に通るまで、元のプロジェクトやキャプチャは変更しません。

確認点 2:USB HID Boot ProtocolとReport Protocolの切り替え、SetProtocolリクエスト、キーボードBIOSモード、Report ID、キーの欠落、H

「USB HID Boot ProtocolとReport Protocolの切り替え、SetProtocolリクエスト、キーボードBIOSモード、Report ID、キーの欠落、HIDファームウェア互換性をデバッグする方法を解説します。」を「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の独立した受け入れ条件として扱います。操作前の状態、最初に見えた変化、最終状態を記録します。結果が説明された目的と違う場合は、推測で先へ進まず、最後に確認できた地点へ戻ります。

確認点 3:Boot Protocolとは

「Boot Protocolとは」を、別の担当者が再現できる合否文にします。存在すべきもの、存在してはいけないもの、失敗時に安全な復旧操作を含めます。修正版が同じ検査に通るまで、元のプロジェクトやキャプチャは変更しません。

確認点 4:Report Protocolとは

「Report Protocolとは」を「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の独立した受け入れ条件として扱います。操作前の状態、最初に見えた変化、最終状態を記録します。結果が説明された目的と違う場合は、推測で先へ進まず、最後に確認できた地点へ戻ります。

確認点 5:SetProtocolリクエスト

「SetProtocolリクエスト」を、別の担当者が再現できる合否文にします。存在すべきもの、存在してはいけないもの、失敗時に安全な復旧操作を含めます。修正版が同じ検査に通るまで、元のプロジェクトやキャプチャは変更しません。

確認点 6:Report IDとキーの欠落

「Report IDとキーの欠落」を「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の独立した受け入れ条件として扱います。操作前の状態、最初に見えた変化、最終状態を記録します。結果が説明された目的と違う場合は、推測で先へ進まず、最後に確認できた地点へ戻ります。

確認点 7:BIOS vs OSの挙動

「BIOS vs OSの挙動」を、別の担当者が再現できる合否文にします。存在すべきもの、存在してはいけないもの、失敗時に安全な復旧操作を含めます。修正版が同じ検査に通るまで、元のプロジェクトやキャプチャは変更しません。

確認点 8:デバッグチェックリスト

「デバッグチェックリスト」を「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の独立した受け入れ条件として扱います。操作前の状態、最初に見えた変化、最終状態を記録します。結果が説明された目的と違う場合は、推測で先へ進まず、最後に確認できた地点へ戻ります。

確認点 9:最終的な診断

「最終的な診断」を、別の担当者が再現できる合否文にします。存在すべきもの、存在してはいけないもの、失敗時に安全な復旧操作を含めます。修正版が同じ検査に通るまで、元のプロジェクトやキャプチャは変更しません。

確認点 10:「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の

「「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の USB 契約試験」を「USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落」の独立した受け入れ条件として扱います。操作前の状態、最初に見えた変化、最終状態を記録します。結果が説明された目的と違う場合は、推測で先へ進まず、最後に確認できた地点へ戻ります。

受け入れマトリクス

確認点 残す証拠 合格条件
USB HID Boot Protocol vs Report Protocolのデバッグ:キーボードBIOSモード、SetProtocol、Report ID、キーの欠落 開始状態、一つの操作、結果状態 別の担当者が同じ結果を再現できる
USB HID Boot ProtocolとReport Protocolの切り替え、SetProtocolリクエスト、キーボードBIOSモード、Report ID、キーの欠落、HIDファームウェア互換性をデバッグする方法を解説します。 開始状態、一つの操作、結果状態 別の担当者が同じ結果を再現できる
Boot Protocolとは 開始状態、一つの操作、結果状態 別の担当者が同じ結果を再現できる
Report Protocolとは 開始状態、一つの操作、結果状態 別の担当者が同じ結果を再現できる
SetProtocolリクエスト 開始状態、一つの操作、結果状態 別の担当者が同じ結果を再現できる
Report IDとキーの欠落 開始状態、一つの操作、結果状態 別の担当者が同じ結果を再現できる

失敗の分離、復旧、引き継ぎ

最初に失敗した境界で停止します。元データ、プロジェクト、セッション、キャプチャを保存し、破壊的な編集前に複製し、一回の実験では一つの変数だけを変えます。複数変更後に全手順をやり直して結果が変わっても、理由は説明できません。

証拠がないことと、存在しない証拠を分けます。空の画面は、入力、範囲、フィルター、権限、デバイス、時間帯、プロジェクト状態の誤りでも起こります。decoder、編集、レポート、書き出しを解釈する前に、取得または読み込み経路を証明します。

引き継ぎ前に成果物を再度開き、先頭、判断点、末尾を確認します。バージョン、環境、設定、期待、観察、最小再現手順を記録します。機密情報を削除またはマスクし、受取人に権限があることも確認します。

質問と回答

最も速く信頼できる開始方法は何ですか?

最小で代表的なケースを使い、期待結果を書き、一つの変数だけを変えます。フィルター、エフェクト、編集、自動化、大きな入力を加える前に、基本経路を確認します。

どの証拠を保存すべきですか?

入力の識別情報、バージョン、環境、設定、正確な操作、最初の異常な変化、最終出力を残します。プロジェクト、セッション、レポート、書き出しは閉じて開き直します。

いつ手順を繰り返しますか?

アプリ、OS、driver、firmware、モデル、入力、手順の変更が結果に影響し得る場合です。以前に合格したケースを変更せず、比較基準として残します。

いつ引き継ぎ可能になりますか?

権限のある別の人が入力を特定し、操作を繰り返し、同じ結果を確認し、残る制限を理解し、未記録のローカル状態なしで成果物を開ける時です。

関連ガイド

次の同一言語ページは、このトピックの正規所有者を変えずに隣接する工程を説明します。

<!-- multilingual-blog-closeout:end -->