最終更新:2023-07-14 (金) 15:49:12 (427d)
Linux/USBガジェット
ドキュメント
kernel.org
kernel.org/doc/htmldocs/gadget kernel.org/doc/Documentation/usb/gadget_hid.txt kernel.org/doc/Documentation/usb/gadget_multi.txt kernel.org/doc/Documentation/usb/gadget_printer.txt? kernel.org/doc/Documentation/usb/gadget_serial.txt - https://www.kernel.org/doc/html/latest/driver-api/usb/gadget.html
Linux USB gadget configured through configfs
その他
Linux/USBガジェット/対応機種
- Raspberry Pi 4
- Allwinner H5
- Allwinner H3
- ODROID-C2
- BeagleBoard-xM
- BeagleBone Black
- Raspberry Pi A/A+
- Raspberry Pi Zero
スライド
メモ
- only one function at a time is accessible via USB.
- The USB gadget framework supports only a single controller at a time.
Linux/USBガジェット/API
- 独自デバイスを動かすためのAPI
Linux/USBガジェット/configfs
FunctionFS
- GadgetFSと同じ使い方
- 既存のモジュールと同時利用が可能になった
- Linux 2.6.35~ (2010/08/01)
GadgetFS
- Linux/dev/gadget/<USBコントローラ名>を読み書き
Linux/USBガジェット/フレームワーク
- ガジェットドライバが実装されているフレームワーク
ガジェットフレームワーク | コンポジットフレームワーク | libcomposite | |
Linux 2.5.70~ | Linux 2.6.27~ | Linux 3.7 | |
ドライバの登録をする関数 | usb_gadget_register_driver | usb_composite_register | |
登録するドライバ | usb_gadget_driver | usb_composite_driver | |
bindの引数 | usb_gadget | usb_composite_dev? |
Linux/USBガジェット/歴史
USBホスト機能との比較
共通点
- 使う構造体とか
違い
Linux/USBガジェット/構造体
usb_gadget - デバイス自体
- Linux/USBコントローラドライバ(r8a66597とかdwc3)のメンバ。
usb_gadget_driver - デバイスの機能の管理
- driver for usb 'slave' devices
usb_ep - ハードウェアの管理
- device side representation of USB endpoint
usb_request - 転送の管理
- holds essential information for transfers.
構成
- 3つのレイヤからなる。
Linux/USBコントローラドライバ
- The <linux/usb/gadget.h> API abstracts the peripheral controller endpoint hardware.
- レジスタ、FIFO,DMA,割り込みの処理を行う。
- 構造体
- endpoint?
- コールバックを通してガジェットドライバとやりとりをする。
- USBコントローラ
コントローラのHAL
- コントローラ別の構造体(r8a66597とかdwc3)のメンバ
- usb_gadget - represents a usb slave device(デバイス自体)
- usb_gadget_driver - driver for usb 'slave' devices(ガジェットドライバ)
- usb_request - describes one i/o request
- usb_request.complete?
- usb_ep - device side representation of USB endpoint
- platform_driverを使ってコントローラ別の構造体に割り込みの登録とか。
Linux/USBガジェットドライバ
- ファンクションを実装する部分。
- ハードウェアに依存しない
- 処理内容
- セットアップリクエストのハンドリング (エンドポイント0のレスポンス)
- ディスクリプタを返す
- コンフィグレーション/代替インターフェイスの設定、エンドポイントの構成
- USBのイベント制御
- IN/OUTの転送の処理
- 種類
- drivers/usb/gadget/zero.c - used primarily for testing and development with drivers for usb controller hardware
- gadgetfs - アプリケーションからは/devのデバイスとして見える
- Linux/USBガジェット/マスストレージ - バックエンドにファイルかブロックデバイスを指定する
- Linux/USBガジェット/HID
アプリケーション層
関連するサブシステム
- Linux/USBガジェット/HID - Linux/Input Subsystem
- ネットワーキングサブシステム
- サウンドサブシステム
- Linux/USBガジェット/マスストレージ
- Linux/USBガジェット/UVC
USB/エニュメレーション
ドライバ
ソースコード
linux/usb/gadget.h - Core Objects and Methods
- 構造体
- usb_gadget - represents a usb slave device
- usb_gadget_ops – contains callbacks for hardware operations
- usb_ep - device side representation of USB endpoint
- usb_ep_ops – contains callbacks for endpoints operations
- usb_gadget_driver - driver for usb 'slave' devices
- usb_request - describes one i/o request
- usb_gadget - represents a usb slave device
linux/usb/ch9.h
linux/usb/composite.h - Composite Device Framework
- 複合デバイス
- usb_function - describes one function of a configuration
- usb_configuration - represents one gadget configuration
- usb_composite_driver - groups configurations into a gadget
- usb_composite_dev? - represents one composite usb gadget
drivers/usb/gadget
Composite Device Functions
- drivers/usb/gadget/f_acm.c?
- drivers/usb/gadget/f_ecm.c?
- drivers/usb/gadget/f_subset.c?
- drivers/usb/gadget/f_obex.c?
- drivers/usb/gadget/f_serial.c?
ライフサイクル
- デバイスコントローラにドライバを登録
- ガジェットドライバをバインド
- エニュメレーション
- ディスクリプタを返す
- 通信
- アンバインド
Linux/USBガジェット/モジュール
GadgetFS
CONFIG_USB_GADGET CONFIG_USB_ZERO g_zero CONFIG_USB_AUDIO g_audio Linux/USBガジェット/UAC CONFIG_USB_ETH g_ether CONFIG_USB_FUNCTIONFS g_ffs CONFIG_USB_MASS_STORAGE g_mass_storage Linux/USBガジェット/マスストレージ CONFIG_USB_MIDI_GADGET g_midi CONFIG_USB_CDC_COMPOSITE g_cdc CONFIG_USB_G_ACM_MS? g_acm_ms? CONFIG_USB_G_HID g_hid Linux/USBガジェット/HID CONFIG_USB_G_MULTI g_multi CONFIG_USB_G_MULTI_RNDIS? CONFIG_USB_G_MULTI_CDC? CONFIG_USB_G_NCM? g_ncm? CONFIG_USB_G_NOKIA? g_nokia? CONFIG_USB_G_PRINTER? g_printer? CONFIG_USB_G_SERIAL g_serial CONFIG_USB_G_WEBCAM g_webcam? Linux/USBガジェット/UVC
Linux/USBガジェット/マスストレージ
Linux/USBガジェット/UAC
Linux/HID
- kernel.org/doc/Documentation/usb/gadget_hid.txt
- http://www.instructables.com/id/Use-pcDuino-as-a-Mouse-When-its-connected-to-a-PC-/1/?lang=ja
- http://elinux.org/images/5/52/Do_more_with_less.pdf
- https://www.mail-archive.com/linux-usb@vger.kernel.org/msg06155.html
- http://www.spinics.net/lists/linux-usb/msg32355.html
例
ODROID-X2
ODROID Magazine
- 2月号