[LINUX] Gadget USB Raw

https://www.kernel.org/doc/html/latest/usb/raw-gadget.html

USB Raw Gadget, pris en charge par Linux Kernel 5.7-rc1! Tu l'as fait! !! Vous pouvez maintenant créer un gadget USB avec une application de déplacement d'espace utilisateur!


Docs » USB support » USB Raw Gadget

USB Raw Gadget

USB Raw Gadget is a kernel module that provides a userspace interface for the USB Gadget subsystem. Essentially it allows to emulate USB devices from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is currently a strictly debugging feature and shouldn’t be used in production, use GadgetFS instead.

USB Raw Gadget fournit une interface d'espace utilisateur au sous-système USB Gadget. En substance, il vous permet d'émuler un périphérique USB à partir de l'espace utilisateur. Veuillez activer CONF_USB_RAW_GADGET. Raw Gadget est une fonctionnalité qui est actuellement strictement déboguée et ne doit pas être utilisée dans le produit. Utilisez plutôt GadgetFS.

Comparison to GadgetFS

Raw Gadget is similar to GadgetFS, but provides a more low-level and direct access to the USB Gadget layer for the userspace. The key differences are:

Raw Gadget est similaire à GadgetFS, mais fournit un accès direct de bas niveau de l'espace utilisateur à la couche USB Gadget. Les principales différences sont les suivantes.

1. Every USB request is passed to the userspace to get a response, while GadgetFS responds to some USB requests internally based on the provided descriptors. However note, that the UDC driver might respond to some requests on its own and never forward them to the Gadget layer.

  1. Toutes les requêtes USB sont transmises à l'espace utilisateur pour réponse. GadgetFS répond en interne à certaines requêtes USB selon le descripteur fourni. Cependant, le pilote UDC peut répondre seul à certaines demandes et ne pas les transmettre au Gadget Layer.

2. GadgetFS performs some sanity checks on the provided USB descriptors, while Raw Gadget allows you to provide arbitrary data as responses to USB requests.

  1. GadgetFS vérifie la validité du descripteur USB fourni. Raw Gadget peut fournir des données arbitraires en réponse à une requête USB.

3. Raw Gadget provides a way to select a UDC device/driver to bind to, while GadgetFS currently binds to the first available UDC.

  1. Raw Gadget fournit un moyen de sélectionner le périphérique / pilote UDC que vous souhaitez lier, mais GadgetFS lie actuellement le premier UDC valide.

4. Raw Gadget uses predictable endpoint names (handles) across different UDCs (as long as UDCs have enough endpoints of each required transfer type)

  1. Raw Gadget utilise un nom de point de terminaison prévisible (handke) sur différents UDC (à condition qu'il y ait suffisamment de points de terminaison pour chaque type de transfert. UDC requiert).

5.Raw Gadget has ioctl-based interface instead of a filesystem-based one.

  1. Raw Gadge fournit une interface de base uictl au lieu de système de fichiers.

Userspace interface

To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget instances (bound to different UDCs) can be used at the same time. The interaction with the opened file happens through the ioctl() calls, see comments in include/uapi/linux/usb/raw_gadget.h for details.

Pour créer une instance de Raw Gadget, ouvrez / dev / raw-gadet. Plusieurs instances de gadgets bruts peuvent être disponibles en même temps (pour différents UDC). Appelez ioctl () pour interagir avec le fichier ouvert. Voir les commentaires dans include / uapi / linux / usb / raw_gadget.h pour plus d'informations.

The typical usage of Raw Gadget looks like:

L'utilisation typique de Raw Gadget est la suivante.

1. Open Raw Gadget instance via /dev/raw-gadget. 2. Initialize the instance via USB_RAW_IOCTL_INIT. 3. Launch the instance with USB_RAW_IOCTL_RUN. 4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from Raw Gadget and react to those depending on what kind of USB device needs to be emulated.

    1. Ouvrez une instance de Raw Gadget via / dev / raw-gadet.
  1. Initialisez l'instance avec USB_RAW_IOCTL_INIT.
    1. Lancez l'instance avec USB_RAW_IOCTL_RUN.
  2. Avec RAW_IOCTL_EVENT_FETCH, il boucle en recevant les événements de Raw Gadget et réagit comme un périphérique USB à émuler.

Potential future improvements

・ Implémentez les ioctl pour définir / effacer l'état d'arrêt sur les terminaux. ・ Signaler plus d'événements (suspension, reprise, etc.) via USB_RAW_IOCTL_EVENT_FETCH. ・ Prise en charge des E / S O_NONBLOCK.

-Mise en œuvre d'ioctl pour définir / effacer l'état d'arrêt du point final -Rapport de divers événements (suspension, reprise, etc.) via USB_RAW_IOCTL_EVENT_FETCH. -Support pour O_NONBLOCK I / O.


À l'origine, il fait partie du code source du noyau Linux, il sera donc traité comme GPLv2 (reconnaissance qu'il devrait l'être).

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

Recommended Posts

Gadget USB Raw
chaîne brute