USB HID Boot Protocol vs Report Protocol 디버깅

USB HID keyboard와 mouse는 Boot Protocol 또는 Report Protocol을 사용할 수 있습니다. input이 한 환경에서는 동작하지만 다른 환경에서는 실패할 때 사용자는 \"HID Boot Protocol\", \"HID Report Protocol\", \"USB keyboard BIOS mode\", \"SetProtocol HID\",…

hid boot protocol, report protocol, setprotocol, usb keyboard, bios mode, report id, usb diagnostics

USB HID keyboard와 mouse는 Boot Protocol 또는 Report Protocol을 사용할 수 있습니다. input이 한 환경에서는 동작하지만 다른 환경에서는 실패할 때 사용자는 "HID Boot Protocol", "HID Report Protocol", "USB keyboard BIOS mode", "SetProtocol HID", "keyboard works in BIOS but not OS", "HID report ID missing keys"를 검색합니다.

Bus Scope가 유용한 이유는 host가 device의 report format을 바꾸는 HID class request를 보낼 수 있기 때문입니다. firmware가 SetProtocol을 무시하거나 잘못된 report format을 보내면 device가 올바르게 enumerate되더라도 key가 사라질 수 있습니다.

boot protocol 확인

Boot Protocol은 BIOS, UEFI, pre-boot environment, 단순 host stack에서 사용하는 단순화된 HID format입니다. 전체 HID parser가 준비되기 전에 기본 keyboard와 mouse가 동작하도록 합니다.

Boot Protocol과 관련된 증상:

  • Keyboard가 BIOS에서는 동작하지만 OS에서는 실패합니다.
  • Keyboard가 OS에서는 동작하지만 boot menu에서는 동작하지 않습니다.
  • 특수 key가 pre-boot mode에서 사라집니다.
  • Mouse가 operating system load 이후에만 동작합니다.
  • boot report가 report ID를 기대하지 않는데 firmware가 report ID를 보냅니다.

진단 질문은 host가 어떤 protocol을 선택했는지입니다.

report protocol 확인

Report Protocol은 HID report descriptor를 사용합니다. 더 풍부한 layout, report ID, vendor-defined report, media key, sensor, composite behavior를 지원합니다.

host가 Report Protocol로 전환했는데 device가 계속 Boot report를 보내면 OS가 input을 잘못 parse할 수 있습니다. host가 Boot Protocol을 요청했는데 device가 Report Protocol을 보내면 BIOS는 report를 무시할 수 있습니다.

SetProtocol request 확인

HID class request SetProtocol은 지원되는 device에서 Boot Protocol과 Report Protocol 사이를 전환할 수 있습니다.

수집할 증거:

  • HID interface descriptor.
  • Boot subclass와 protocol 값.
  • Report descriptor.
  • SetProtocol request.
  • host가 선택한 protocol 값.
  • switch 전후의 interrupt IN report bytes.

Bus Scope는 이 sequence를 눈에 보이게 만들 수 있습니다.

Report ID와 누락되는 key

Report Protocol은 report ID를 사용할 수 있습니다. Boot Protocol은 보통 report ID prefix 없는 고정 size report를 기대합니다.

흔한 firmware bug:

  • Device가 Boot Protocol에서 report ID를 포함합니다.
  • Device가 Report Protocol에서 report ID를 생략합니다.
  • Device가 report size를 바꾸지만 descriptor가 일치하지 않습니다.
  • Media key가 secondary report에만 있습니다.
  • host가 enable하기 전에 NKRO report를 보냅니다.
  • Keyboard가 keyboard endpoint에 vendor report를 보냅니다.

이 bug들은 "USB keyboard missing keys", "HID report ID wrong" 같은 검색어를 만들어 냅니다.

BIOS와 operating system 동작 차이

BIOS와 UEFI environment는 보통 전체 operating system보다 더 엄격하고 단순합니다. keyboard가 Windows나 Linux에서는 정상처럼 보여도 boot 전에는 실패할 수 있습니다.

유용한 비교:

  • 가능하면 external analyzer로 pre-boot 중 capture합니다.
  • OS load 이후 capture합니다.
  • SetProtocol 동작을 비교합니다.
  • report payload format을 비교합니다.
  • environment 사이에서 device가 reset되는지 확인합니다.

pre-boot capture가 어렵더라도 OS 쪽 SetProtocol 증거는 firmware assumption을 드러낼 수 있습니다.

디버그 체크리스트

다음 절차를 사용하세요.

  1. Enumeration을 capture합니다.
  2. HID interface subclass와 protocol을 검사합니다.
  3. HID report descriptor를 검사합니다.
  4. SetProtocol request를 찾습니다.
  5. 선택된 protocol을 decode합니다.
  6. 전후 interrupt IN report를 비교합니다.
  7. report ID 사용을 확인합니다.
  8. 일반 key와 media key를 test합니다.
  9. BIOS, bootloader, Windows, Linux 동작을 비교합니다.
  10. descriptor와 report bytes를 함께 보존합니다.

최종 진단

HID Boot Protocol과 Report Protocol 실패는 report-format negotiation 문제입니다. device는 올바르게 enumerate되지만 잘못된 protocol format으로 report를 보낼 수 있습니다.

Bus Scope는 누락되는 key, BIOS input failure, HID compatibility issue가 SetProtocol handling, report ID, descriptor mismatch, firmware report formatting 중 어디에서 오는지 증명하도록 돕습니다.

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

“USB HID Boot Protocol vs Report Protocol 디버깅”의 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 디버깅”에 대한 짧은 답은 다음과 같습니다. USB HID keyboard와 mouse는 Boot Protocol 또는 Report Protocol을 사용할 수 있습니다. input이 한 환경에서는 동작하지만 다른 환경에서는 실패할 때 사용자는 "HID Boot Protocol", "HID Report Protocol", "USB keyboard BIOS mode", "SetProtocol HID",…. 이 문장을 모든 입력, 장치, 프로젝트, 환경에 대한 약속이 아니라 검증할 결과로 다루십시오. 완료된 결과에는 시작 상태, 정확한 작업, 보이는 출력, Bus Scope에서 작업이 끝났음을 증명하는 조건이 기록됩니다.

근거 우선 작업 절차

전체 프로젝트를 바꾸기 전에 작고 반복 가능한 사례에서 시작하십시오. 앱 버전, 운영체제, 입력 또는 장치 식별, 관련 설정과 예상 결과를 기록합니다. 한 가지 의도적인 작업을 실행하고 첫 예상 밖 전환을 보존하며 가능한 경우 정상 사례와 비교합니다. 여러 설정을 동시에 바꾸면 문제를 만든 조건이나 해결한 조건을 알 수 없습니다.

확인점 1: USB HID Boot Protocol vs Report Protocol 디버깅

“USB HID Boot Protocol vs Report Protocol 디버깅”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 2: USB HID keyboard와 mouse는 Boot Protocol 또는 Report Protocol을 사용할 수 있습니다. input이 한 환경에서는 동작하지

“USB HID keyboard와 mouse는 Boot Protocol 또는 Report Protocol을 사용할 수 있습니다. input이 한 환경에서는 동작하지만 다른 환경에서는 실패할 때 사용자는 "HID Boot Protocol", "HID Report Pr”을 “USB HID Boot Protocol vs Report Protocol 디버깅”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 3: boot protocol 확인

“boot protocol 확인”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 4: report protocol 확인

“report protocol 확인”을 “USB HID Boot Protocol vs Report Protocol 디버깅”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 5: SetProtocol request 확인

“SetProtocol request 확인”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 6: Report ID와 누락되는 key

“Report ID와 누락되는 key”을 “USB HID Boot Protocol vs Report Protocol 디버깅”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 7: BIOS와 operating system 동작 차이

“BIOS와 operating system 동작 차이”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 8: 디버그 체크리스트

“디버그 체크리스트”을 “USB HID Boot Protocol vs Report Protocol 디버깅”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

확인점 9: 최종 진단

“최종 진단”을 다른 담당자가 반복할 수 있는 통과 또는 실패 문장으로 만듭니다. 있어야 하는 것, 없어야 하는 것, 실패 시 안전한 복구를 포함합니다. 수정한 복사본이 같은 검사를 통과할 때까지 원본 프로젝트나 캡처를 유지합니다.

확인점 10: “USB HID Boot Protocol vs Report Protocol 디버깅”의 USB 계약 시험

““USB HID Boot Protocol vs Report Protocol 디버깅”의 USB 계약 시험”을 “USB HID Boot Protocol vs Report Protocol 디버깅”의 독립된 인수 기준으로 다루십시오. 작업 전 상태, 처음 보인 변화, 최종 상태를 기록합니다. 결과가 설명된 목표와 다르면 추측으로 계속하지 말고 마지막으로 확인한 지점으로 돌아갑니다.

인수 매트릭스

확인점 보존할 근거 통과 조건
USB HID Boot Protocol vs Report Protocol 디버깅 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
USB HID keyboard와 mouse는 Boot Protocol 또는 Report Protocol을 사용할 수 있습니다. input이 한 환경에서는 동작하지만 다른 환경에서는 실패할 때 사용자는 "HID Bo 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
boot protocol 확인 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
report protocol 확인 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
SetProtocol request 확인 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다
Report ID와 누락되는 key 시작 상태, 한 작업, 결과 상태 두 번째 담당자가 같은 결과를 재현한다

실패 분리, 복구, 인계

처음 실패한 경계에서 멈추십시오. 소스, 프로젝트, 세션 또는 캡처를 보존하고 파괴적 편집 전에 복사하며 실험마다 한 변수만 변경합니다. 여러 변경 뒤 전체 흐름을 반복해 결과가 달라져도 원인은 설명되지 않습니다.

근거가 없는 것과 없다는 근거를 구분하십시오. 빈 화면은 잘못된 입력, 범위, 필터, 권한, 장치, 시간대 또는 프로젝트 상태일 수 있습니다. decoder, 편집기, 보고서, 내보내기를 해석하기 전에 획득 또는 가져오기 경로를 확인합니다.

인계 전에 결과물을 다시 열어 시작, 판단 지점, 끝을 확인합니다. 버전, 플랫폼, 설정, 기대, 관찰, 최소 재현을 기록합니다. 민감한 내용을 제거하거나 가리고 수신자의 권한을 확인합니다.

질문과 답변

가장 빠르고 신뢰할 수 있는 시작 방법은 무엇입니까?

가장 작고 대표적인 사례를 사용하고 예상 결과를 적은 뒤 한 변수만 바꿉니다. 필터, 효과, 편집, 자동화 또는 큰 소스를 추가하기 전에 기본 경로를 확인합니다.

어떤 근거를 저장해야 합니까?

입력 식별, 버전, 플랫폼, 설정, 정확한 작업, 첫 예상 밖 전환, 최종 출력을 보존합니다. 프로젝트, 세션, 보고서 또는 내보내기는 닫고 다시 열어 확인합니다.

언제 절차를 반복해야 합니까?

앱, 운영체제, driver, firmware, 모델, 소스 또는 작업 흐름의 변경이 결과에 영향을 줄 수 있을 때입니다. 이전에 통과한 사례를 변경하지 않은 기준선으로 유지합니다.

언제 인계할 수 있습니까?

권한 있는 다른 사람이 입력을 식별하고 작업을 반복하여 같은 결과를 보고 남은 제한을 이해하며 기록되지 않은 로컬 상태 없이 결과물을 열 수 있을 때입니다.

관련 가이드

다음 동일 언어 페이지는 이 주제의 정규 소유자를 바꾸지 않고 인접 단계를 설명합니다.

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