Linux Gadget Serial Driver v2.0

https://www.kernel.org/doc/html/latest/usb/gadget_serial.html

Linux Gadget Serial Driver v2.0

11/20/2004

(updated 8-May-2008 for v2.3)

License and Disclaimer

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.

This document and the gadget serial driver itself are Copyright (C) 2004 by Al Borchers (alborchers@steinerpoint.com).

If you have questions, problems, or suggestions for this driver please contact Al Borchers at alborchers@steinerpoint.com.

Prerequisites

Versions of the gadget serial driver are available for the 2.4 Linux kernels, but this document assumes you are using version 2.3 or later of the gadget serial driver in a 2.6 Linux kernel.

Der serielle Gadget-Treiber ist seit dem 2.4 Linux-Kernel aktiviert. In diesem Dokument wird jedoch davon ausgegangen, dass Sie den seriellen Gadget-Treiber Version 2.3 oder höher auf dem 2.6 Linux-Kernel verwenden.

This document assumes that you are familiar with Linux and Windows and know how to configure and build Linux kernels, run standard utilities, use minicom and HyperTerminal, and work with USB and serial devices. It also assumes you configure the Linux gadget and usb drivers as modules.

In diesem Dokument wird davon ausgegangen, dass Sie mit Linux und Windows vertraut sind, wissen, wie Sie einen Linux-Kernel einrichten und erstellen, Standarddienstprogramme ausführen, Minicon und HyperTerminal verwenden sowie mit USB- und seriellen Geräten umgehen. Wird auch ankommen. Außerdem gehen Sie davon aus, dass Sie das Linux-Gadget und den USB-Treiber als Module konfiguriert haben.

With version 2.3 of the driver, major and minor device nodes are no longer statically defined. Your Linux based system should mount sysfs in /sys, and use “mdev” (in Busybox) or “udev” to make the /dev nodes matching the sysfs /sys/class/tty files.

In der Treiberversion 2.3 wurde der Haupt- / Nebengeräteknoten nicht statisch definiert. Hängen Sie in einem Linux-basierten System sysfs mit / sys ein und stimmen Sie die Dateien sysfs / sys / class / tty mit dem Knoten / dev von mbev (falls BusyBox) ab, andernfalls "udev".

Overview

The gadget serial driver is a Linux USB gadget driver, a USB device side driver. It runs on a Linux system that has USB device side hardware; for example, a PDA, an embedded Linux system, or a PC with a USB development card.

Der serielle Gadget-Treiber ist ein Linux-USB-Gadget-Treiber und ein USB-Dervice-Sid-Treiber. Es läuft auf einem Linux-System, auf dem sich neben der Hardware ein USB-Gerät befindet: beispielsweise ein PDA, ein eingebettetes Linux-System oder eine USB-Entwicklungskarte (kurz: ein über USB angeschlossener Mikrocomputer wie Arduino oder mbed). PC.

The gadget serial driver talks over USB to either a CDC ACM driver or a generic USB serial driver running on a host PC:

Der serielle Gadget-Treiber kommuniziert über USB entweder mit dem CDC ACM-Treiber oder dem generischen seriellen USB-Treiber, der auf dem hos-PC ausgeführt wird.


 Host
 --------------------------------------
| Host-Side   CDC ACM       USB Host   |
| Operating |   or        | Controller |   USB
| System    | Generic USB | Driver     |--------
| (Linux or | Serial      | and        |        |
| Windows)    Driver        USB Stack  |        |
 --------------------------------------         |
                                                |
                                                |
                                                |
 Gadget                                         |
 --------------------------------------         |
| Gadget                   USB Periph. |        |
| Device-Side |  Gadget  | Controller  |        |
| Linux       |  Serial  | Driver      |--------
| Operating   |  Driver  | and         |
| System                   USB Stack   |
 --------------------------------------

On the device-side Linux system, the gadget serial driver looks like a serial device.

Auf dem geräteseitigen Linux-System sieht der serielle Gadget-Treiber wie ein Seirla-Gerät aus.

On the host-side system, the gadget serial device looks like a CDC ACM compliant class device or a simple vendor specific device with bulk in and bulk out endpoints, and it is treated similarly to other serial devices.

Aus Sicht des host-seitigen Systems sieht das serielle Gadget-Gerät wie ein CDC ACM-kompatibles Klassengerät oder ein einfaches herstellerspezifisches Gerät mit einem Bulk-Out-Endpunkt in Bulk-In aus und wird wie jedes andere serielle Gerät verwendet.

The host side driver can potentially be any ACM compliant driver or any driver that can talk to a device with a simple bulk in/out interface. Gadget serial has been tested with the Linux ACM driver, the Windows usbser.sys ACM driver, and the Linux USB generic serial driver.

Der host-seitige Treiber kann ein ACM-kompatibler Treiber oder ein Treiber sein, der mit einer einfachen Bulk-In / Out-Schnittstelle kommunizieren kann. Gadget serial wird mit dem Linux ACM-Treiber, dem Windows usbser.sys ACM-Treiber oder dem generischen seriellen Linux USB-Treiber getestet.

With the gadget serial driver and the host side ACM or generic serial driver running, you should be able to communicate between the host and the gadget side systems as if they were connected by a serial cable.

Wenn Sie den seriellen Gadget-Treiber und den hostseitigen ACM / generischen seriellen Treiber ausführen, können Sie zwischen dem Host und dem Gadget-seitigen System kommunizieren, wenn diese über ein serielles Kabel verbunden sind.

The gadget serial driver only provides simple unreliable data communication. It does not yet handle flow control or many other features of normal serial devices.

Der serielle Gadget-Treiber bietet nur eine unzuverlässige Datenkommunikation. Es übernimmt keine Flusskontrolle oder viele andere Funktionen anderer gängiger serieller Geräte.

Installing the Gadget Serial Driver

To use the gadget serial driver you must configure the Linux gadget side kernel for “Support for USB Gadgets”, for a “USB Peripheral Controller” (for example, net2280), and for the “Serial Gadget” driver. All this are listed under “USB Gadget Support” when configuring the kernel. Then rebuild and install the kernel or modules.

Um den seriellen Gadget-Treiber zu verwenden, müssen Sie die "Unterstützung für USB-Gadgets", den "USB-Peripherie-Controller" (z. B. net2280) und den "Serial Gadget" -Treiber auf den Linux-Gadget-seitigen Kernel einstellen. All dies wird bei der Konfiguration des Kernels unter "USB-Gadget-Unterstützung" aufgeführt. Erstellen Sie dann den Kernel und das Modul neu und installieren Sie sie.

Then you must load the gadget serial driver. To load it as an ACM device (recommended for interoperability), do this:

Dann müssen Sie den Gadget-Srial-Treiber laden. Führen Sie dies aus, um es als CM-Gerät zu laden (empfohlen für die Interoperabilität).

modprobe g_serial

To load it as a vendor specific bulk in/out device, do this:

Gehen Sie beim Laden als herstellerspezifisches Bulk-In / Out-Gerät wie folgt vor.

modprobe g_serial use_acm=0

This will also automatically load the underlying gadget peripheral controller driver. This must be done each time you reboot the gadget side Linux system. You can add this to the start up scripts, if desired.

Dadurch wird auch automatisch der zugrunde liegende Gadget-Peripherie-Controller-Treiber gelesen. Dies sollte jedes Mal erfolgen, wenn das gadget-seitige Linux-System neu gestartet wird. Fügen Sie es bei Bedarf zum Startskript hinzu.

Your system should use mdev (from busybox) or udev to make the device nodes. After this gadget driver has been set up you should then see a /dev/ttyGS0 node:

Sie müssen einen Geräteknoten mit mdev (aus Busybox) oder udev erstellen. Sobald dieser Gadget-Treiber eingerichtet ist, können Sie ihn als / dev / ttyGS0-Knoten bezeichnen:

# ls -l /dev/ttyGS0 | cat
crw-rw----    1 root     root     253,   0 May  8 14:10 /dev/ttyGS0
#

Note that the major number (253, above) is system-specific. If you need to create /dev nodes by hand, the right numbers to use will be in the /sys/class/tty/ttyGS0/dev file.

Beachten Sie, dass die Hauptnummer (253 oben) systemspezifisch ist. Wenn Sie den / dev-Knoten manuell erstellen müssen, verwenden Sie bitte den richtigen Wert in der Datei / sys / class / tty / ttyGS0 / dev.

When you link this gadget driver early, perhaps even statically, you may want to set up an /etc/inittab entry to run “getty” on it. The /dev/ttyGS0 line should work like most any other serial port.

Wenn Sie den Gadget-Treiber frühzeitig verbinden oder statisch machen möchten, können Sie "getty" im Eintrag / etc / inittab ausführen. Die Zeile / dev / ttyGS0 sollte wie jeder andere serielle Treiber funktionieren.

If gadget serial is loaded as an ACM device you will want to use either the Windows or Linux ACM driver on the host side. If gadget serial is loaded as a bulk in/out device, you will want to use the Linux generic serial driver on the host side. Follow the appropriate instructions below to install the host side driver.

Wenn Gadget serial als ACM-Gerät geladen ist, müssen Sie entweder den Windows- oder den Linux-ACM-Treiber auf der Hostseite verwenden. Die Gadget-Serie ist eine Bulk-In / Out-Gerätesite Wenn es geladen ist, müssen Sie den generischen seriellen Linux-Treiber auf der Hostseite verwenden. Führen Sie die folgenden Schritte aus, um den hostseitigen Treiber zu installieren.

Installing the Windows Host ACM Driver

To use the Windows ACM driver you must have the “linux-cdc-acm.inf” file (provided along this document) which supports all recent versions of Windows.

Um den Windows ACM-Treiber verwenden zu können, benötigen Sie eine Datei "linux-cdc-acm.inf" (in diesem Dokument bereitgestellt), die von allen neuesten Windows-Versionen unterstützt wird.

When the gadget serial driver is loaded and the USB device connected to the Windows host with a USB cable, Windows should recognize the gadget serial device and ask for a driver. Tell Windows to find the driver in the folder that contains the “linux-cdc-acm.inf” file.

Wenn der serielle Gadget-Treiber geladen und das USB-Gerät über ein USB-Kabel mit dem Windows-Host verbunden ist, erkennt Windows das serielle Dadget-Gerät und fragt den Treiber. Weist Windows an, den Treiber in dem Ordner zu finden, der die Datei "linux-cdc-acm.inf" enthält.

For example, on Windows XP, when the gadget serial device is first plugged in, the “Found New Hardware Wizard” starts up. Select “Install from a list or specific location (Advanced)”, then on the next screen select “Include this location in the search” and enter the path or browse to the folder containing the “linux-cdc-acm.inf” file. Windows will complain that the Gadget Serial driver has not passed Windows Logo testing, but select “Continue anyway” and finish the driver installation.

Unter Windows XP wird beispielsweise der Assistent zum Suchen neuer Hardware gestartet, wenn das serielle Gadget-Gerät zum ersten Mal installiert wird. Wählen Sie "Von einer Liste oder einem bestimmten Speicherort installieren (erweitert)". Wählen Sie im nächsten Bildschirm "Diesen Speicherort in die Suche einbeziehen" und geben Sie den Pfad ein oder suchen Sie den Pfad, der die Datei "linux-cdc-acn.inf" enthält. Windows warnt davor, dass der Gadget Serial-Treiber die Windows-Logo-Zertifizierung nicht bestanden hat, wählt jedoch "Trotzdem fortfahren", um die Treiberinstallation abzuschließen.

On Windows XP, in the “Device Manager” (under “Control Panel”, “System”, “Hardware”) expand the “Ports (COM & LPT)” entry and you should see “Gadget Serial” listed as the driver for one of the COM ports.

Wenn Sie in Windows XP den Eintrag "Ports (COM & LPT)" im "Geräte-Manager" (unter "Systemsteuerung", "System", "Hardware") öffnen, ist "Gadget Serial" der COM-Port. Es kann als ein Treiber gefunden werden.

To uninstall the Windows XP driver for “Gadget Serial”, right click on the “Gadget Serial” entry in the “Device Manager” and select “Uninstall”.

Um den Windows XP-Treiber für "Gadget Serial" zu deinstallieren, klicken Sie mit der rechten Maustaste auf den Eintrag "Gadget Serial" im "Geräte-Manager" und wählen Sie "Deinstallieren".

Installing the Linux Host ACM Driver

To use the Linux ACM driver you must configure the Linux host side kernel for “Support for Host-side USB” and for “USB Modem (CDC ACM) support”.

Um den Linux ACM-Treiber zu verwenden, stellen Sie im Linux-Host-Kernel "Unterstützung für host-seitiges USB" und "Unterstützung für USB-Modem (CDC ACM)" ein.

Once the gadget serial driver is loaded and the USB device connected to the Linux host with a USB cable, the host system should recognize the gadget serial device. For example, the command:

Sobald der serielle Gadget-Treiber geladen ist und das USB-Gerät und der Linux-Host mit einem USB-Kabel verbunden sind, erkennt das Host-System das serielle Gadget-Gerät. Beispiel: Befehl:

cat /sys/kernel/debug/usb/devices

should show something like this::

Als Ergebnis sehen Sie das folgende Ergebnis.

T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  5 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=02(comm.) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0525 ProdID=a4a7 Rev= 2.01
S:  Manufacturer=Linux 2.6.8.1 with net2280
S:  Product=Gadget Serial
S:  SerialNumber=0
C:* #Ifs= 2 Cfg#= 2 Atr=c0 MxPwr=  2mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=acm
E:  Ad=83(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=acm
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

If the host side Linux system is configured properly, the ACM driver should be loaded automatically. The command “lsmod” should show the “acm” module is loaded.

Wenn das hostseitige Linux-System ordnungsgemäß konfiguriert ist, sollte der ACM-Treiber automatisch geladen werden. Der Befehl "lsmod" zeigt an, dass das Modul "acm" geladen ist.

Installing the Linux Host Generic USB Serial Driver

To use the Linux generic USB serial driver you must configure the Linux host side kernel for “Support for Host-side USB”, for “USB Serial Converter support”, and for the “USB Generic Serial Driver”.

Um den Linux ACM-Treiber zu verwenden, stellen Sie im Linux-Host-Kernel "Unterstützung für host-seitiges USB", "USB Serial Converter-Unterstützung" und "USB-Modem (CDC ACM) -Unterstützung" ein.

Once the gadget serial driver is loaded and the USB device connected to the Linux host with a USB cable, the host system should recognize the gadget serial device. For example, the command:

Sobald der serielle Gadget-Treiber geladen ist und das USB-Gerät und der Linux-Host mit einem USB-Kabel verbunden sind, erkennt das Host-System das serielle Gadget-Gerät. Beispiel: Befehl:

cat /sys/kernel/debug/usb/devices

should show something like this::

Als Ergebnis sehen Sie das folgende Ergebnis.

T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  6 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0525 ProdID=a4a6 Rev= 2.01
S:  Manufacturer=Linux 2.6.8.1 with net2280
S:  Product=Gadget Serial
S:  SerialNumber=0
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=serial
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

You must load the usbserial driver and explicitly set its parameters to configure it to recognize the gadget serial device, like this:

Laden Sie den USB-Treiber und stellen Sie die Parameter so ein, dass das serielle Gadget-Gerät explizit erkannt wird. Zum Beispiel:

echo 0x0525 0xA4A6 >/sys/bus/usb-serial/drivers/generic/new_id

The legacy way is to use module parameters:

Die traditionelle Methode verwendet Modulparameter.

modprobe usbserial vendor=0x0525 product=0xA4A6

If everything is working, usbserial will print a message in the system log saying something like “Gadget Serial converter now attached to ttyUSB0”.

Wenn alles funktioniert, hinterlässt usbserial eine Meldung im Systemprotokoll, z. B. "Gadget Serial Converter jetzt an ttyUSB0 angeschlossen".

Testing with Minicom or HyperTerminal

Once the gadget serial driver and the host driver are both installed, and a USB cable connects the gadget device to the host, you should be able to communicate over USB between the gadget and host systems. You can use minicom or HyperTerminal to try this out.

Sobald sowohl der serielle Gadget-Treiber als auch der Host-Treiber installiert sind und das Gadget-Gerät und der Host über ein USB-Kabel verbunden sind, kann die Kommunikation zwischen dem Gadget und dem Host-System über USB erfolgen. Sie können Minicon und HyperTerminal ausprobieren.

On the gadget side run “minicom -s” to configure a new minicom session. Under “Serial port setup” set “/dev/ttygserial” as the “Serial Device”. Set baud rate, data bits, parity, and stop bits, to 9600, 8, none, and 1–these settings mostly do not matter. Under “Modem and dialing” erase all the modem and dialing strings.

Durch Ausführen von "minicon -s" mit Gadget-Größe wird eine neue Minicon-Sitzung festgelegt. Setzen Sie unter "Serial Port Setup" "/ dev / ttygserial" auf "Serial Device". Stellen Sie die Baudrate, Datenbits, Paritäts- und Stoppbits auf 9600, 8 bzw. 1 ein. Diese Einstellungen sind fast irrelevant. Löschen Sie unter "Modem und Wählen" alle Modi und Wählzeichenfolgen.

On a Linux host running the ACM driver, configure minicom similarly but use “/dev/ttyACM0” as the “Serial Device”. (If you have other ACM devices connected, change the device name appropriately.)

Stellen Sie das Minicon auf dem Linux-Host, auf dem der ACM-Treiber ausgeführt wird, auf die gleiche Weise ein. Verwenden Sie zu diesem Zeitpunkt "/ dev / ttyACM0" für "Serial Device". (Wenn Sie ein anderes ACM-Gerät angeschlossen haben, wird sich der Gerätename wahrscheinlich ändern.)

On a Linux host running the USB generic serial driver, configure minicom similarly, but use “/dev/ttyUSB0” as the “Serial Device”. (If you have other USB serial devices connected, change the device name appropriately.)

Stellen Sie für Linux-Hosts, auf denen der generische serielle USB-Treiber ausgeführt wird, minicom auf die gleiche Weise ein. Verwenden Sie jedoch "/ dev / ttyUSB0" als "serielles Gerät". (Wenn Sie ein anderes serielles USB-Gerät angeschlossen haben, wird sich der Gerätename wahrscheinlich ändern.)

On a Windows host configure a new HyperTerminal session to use the COM port assigned to Gadget Serial. The “Port Settings” will be set automatically when HyperTerminal connects to the gadget serial device, so you can leave them set to the default values–these settings mostly do not matter.

Richten Sie auf dem Windows-Host eine neue HyperTerminal-Sitzung ein und verwenden Sie den COM-Port, dem Gadget Serial zugewiesen ist. "Porteinstellungen" werden beim seriellen HyperTerminal-Gadget-Gerät automatisch festgelegt, sodass sie von der Standardeinstellung getrennt werden. Diese sind nicht so wichtig.

With minicom configured and running on the gadget side and with minicom or HyperTerminal configured and running on the host side, you should be able to send data back and forth between the gadget side and host side systems. Anything you type on the terminal window on the gadget side should appear in the terminal window on the host side and vice versa.

Wenn Sie ein Minicon mit Gadget-Größe konfigurieren und ausführen und dann ein Minicon oder HypertTerminal auf der Host-Seite konfigurieren und ausführen, können Sie Daten zwischen den Systemen auf der Gadget-Seite und der Host-Seite senden und empfangen. Was Sie im Terminalfenster auf der Gadget-Seite eingeben, wird im Terminalfenster auf der Host-Seite angezeigt. Das Gegenteil ist auch der Fall. ,


Ursprünglich ist es Teil des Quellcodes des Linux-Kernels, daher wird es als GPLv2 behandelt (Anerkennung, dass es sein sollte).

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

Linux Gadget Serial Driver v2.0