最終更新:2021-03-04 (木) 02:00:50 (68d)  

Linux/USBガジェット
Top / Linux / USBガジェット

ドキュメント

kernel.org

Linux USB gadget configured through configfs

その他

Linux/USBガジェット/対応機種

スライド

メモ

  • only one function at a time is accessible via USB.
  • The USB gadget framework supports only a single controller at a time.

USBホスト機能との比較

共通点

  • 使う構造体とか

違い

Linux/USBガジェット/構造体

usb_gadget - デバイス自体

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

Linux/USBガジェットドライバ

アプリケーション層

関連するサブシステム

USB/エニュメレーション

ドライバ

Linux/USBガジェット/歴史

configfs

  • Linux 3.11
  • Userspace-driven kernel object configuration.
  • interface that allows definition of arbitrary functions and configurations to define an application specific USB composite device from userspace.
  • The gadget framework is transitioning to use configfs for its configuration
    # Setup the device (configfs)
    modprobe libcomposite
    mkdir -p config
    mount none config -t configfs
    cd config/usb_gadget/
    
    # Setup functionfs
    mkdir functions/ffs.usb0
    ln -s functions/ffs.usb0 configs/c.1
    
    cd ../../../
    mkdir -p ffs
    mount usb0 ffs -t functionfs
    cd ffs
    ../ffs-test 64 & # from the Linux kernel, with mods!
    sleep 3
    cd ..
    # Enable the USB device
    echo musb-hdrc.0.auto >config/usb_gadget/g1/UDC

FunctionFS

  • Compositable version of gadgetfs
  • rewrite of GadgetFS to support userspace gadget functions that canbe combined into a USB composite gadget.
  • Linux 3.5
    mount -t functionfs mtp /dev/ffs-mtp
  • ディスクリプタを設定するのに、ep0に書き込む方法とconfigfsを使う方法がある。

GadgetFS (Linux 2.6.0~)

  • original monolithic kernel driver that provides an interface to implement userspace gadget drivers
  • CONFIG_USB_GADGETFS
  • Provides User-Mode API
  • Each endpoint presented as single I/O file descriptor
  • Normal read() and write() calls
  • Async I/O supported
  • Configuration and descriptors written into files

ガジェットフレームワーク登場 (Linux 2.5.70)

ソースコード

linux/usb/gadget.h - Core Objects and Methods

linux/usb/ch9.h

  • usb_speed_string?
  • usb_state_string?

linux/usb/composite.h - Composite Device Framework

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ガジェット/モジュール

Linux/USBガジェット/マスストレージ

Linux/HID

ODROID-X2

ODROID Magazine

  • 2月号

OMAP5432 EVM

Android

参考