저는 USB를 통해 DIY 프로젝트를 휴대폰에 연결할 수 있도록 장치, 특히 모바일 Android 장치에서 USB를 통해 장치가 어떻게 통신하는지 이해하려고 노력하고 있습니다. 몇 번 검색한 결과 특정 장치용 USB 드라이버에 대한 일반적인 설명만 찾았습니다.
나는 몇 가지를 알고 싶습니다:
- 내 모바일 장치에 연결된 특정 장치에서 사용되는 드라이버를 어떻게 찾을 수 있나요? 해당 코드는 어디서 찾을 수 있나요?
- USB 스택은 어떻게 생겼나요? 좋은 문서를 찾을 수 없습니다.
- USB 장치 드라이버를 개발하는 방법은 무엇입니까? (안드로이드도 마찬가지)
- 이러한 드라이버를 커널에 포함하거나 휴대폰에 동적으로 로드하려면 어떻게 해야 합니까?
감사해요
답변1
부분 답변: USB 드라이버는 일반적으로 공급업체/장치 ID 및 모듈에 내장된 기타 패턴을 확인하여 특정 USB 장치용으로 로드되는 커널 모듈입니다. 다음 명령을 사용하여 기존 드라이버에 대한 이 정보를 찾을 수 있습니다 modinfo
.
$ sudo modinfo usbhid
filename: /lib/modules/4.12.13/kernel/drivers/hid/usbhid/usbhid.ko
license: GPL
description: USB HID core driver
author: Jiri Kosina
author: Vojtech Pavlik
author: Andreas Gal
alias: usb:v*p*d*dc*dsc*dp*ic03isc*ip*in*
depends: hid,usbcore
intree: Y
vermagic: 4.12.13 SMP preempt mod_unload modversions 686
parm: mousepoll:Polling interval of mice (uint)
parm: jspoll:Polling interval of joysticks (uint)
parm: ignoreled:Autosuspend with active leds (uint)
parm: quirks:Add/modify USB HID quirks by specifying
quirks=vendorID:productID:quirks where vendorID, productID, and quirks are all in 0x-prefixed hex (array of charp)
기존 장치가 어떤 드라이버를 사용하고 있는지 보여줄 수 있는 다양한 도구도 있습니다. 나는 이것이 궁극적으로 계층 구조의 정보를 사용하게 될 것이라고 믿습니다 /sys
.
따라서 새 드라이버를 작성하려면 커널 모듈 작성 방법을 배워야 합니다(google, 튜토리얼이 있습니다). 기존 드라이버를 선택하고 수정합니다.
유사한 라이브러리를 사용하여 사용자 공간에 "드라이버"(또는 응용 프로그램)를 작성할 수도 있습니다.libusb.
커널 문서에는 다음에 대한 정보도 포함되어 있습니다.USB 인터페이스및 USB 스택 작동 방식에 대한 정보를 제공합니다.