私は、USB経由でDIYプロジェクトを携帯電話に接続できるように、デバイス、特にモバイルAndroidデバイスからUSB経由でデバイスがどのように通信するかを理解しようとしています。数回検索したところ、特定のデバイス用のUSBドライバの一般的な説明のみが見つかりました。
私はいくつか知りたいです:
- モバイルデバイスに接続されている特定のデバイスで使用されているドライバをどのように見つけることができますか?そのコードはどこで見つけることができますか?
- USBスタックはどのように見えますか?良い文書が見つかりません。
- USBデバイスドライバを開発する方法は? (Androidも同様)
- これらのドライバをカーネルに含めるか、携帯電話に動的にロードするにはどうすればよいですか?
ありがとう
答え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スタックの仕組みに関する情報を提供します。