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.
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.
3. Raw Gadget provides a way to select a UDC device/driver to bind to, while GadgetFS currently binds to the first available UDC.
4. Raw Gadget uses predictable endpoint names (handles) across different UDCs (as long as UDCs have enough endpoints of each required transfer type)
5.Raw Gadget has ioctl-based interface instead of a filesystem-based one.
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.
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