Contents. Introduction This document explains the Communications Device Class (CDC) Abstract Control Model (ACM) + Mass Storage (MS) composite Linux gadget driver and how to use it with a Linux host PC and a Windows host PC.
Aug 12, 2015 - from the menuconfig - we selected this option load the serial driver. Usb support -> usb gadget support in that below option is selected. We'll start with Serial Gadget, which is the 'simplest' of the USB gadgets. Computer and operating system and it doesnt require special drivers or configuration.
CDC ACM + MS Linux gadget driver The CDC ACM + Linux gadget MS driver is a USB composite gadget driver which implements the serial communication and mass storage functions. This allows the device to be registered on a host computer as a seral port (e.g. /dev/ttyACM0 or COM1:) and as a USB thumb drive (e.g. /dev/sdf or E:).
The composite driver allows for simultaneous use of the serial and mass storage functions. Driver support The CDC ACM only driver that comes with the Linux kernel is supported on both Linux and Windows. For Windows it is necessary the use of the following INF file: Our experience shows the CDC ACM + MS composite USB driver is not well supported on Windows with this INF file. We have tested with a propretary solutions from, with a demo version available at.
Linux host computers have full support for the CDC ACM + MS composite USB drivert without the need of additional files. Using CDC ACM + MS device with Linux host Linux host device file identification The following description is based on the host computer running Linux Ubuntu 10.04 LTS. Once you attached the device, inspect the log to obtain the device file names used on the host.
Linux Gadget Serial Driver v2.0 (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 USA. This document and the gadget serial driver itself are Copyright (C) 2004 by Al Borchers ([email protected]).
If you have questions, problems, or suggestions for this driver please contact Al Borchers at [email protected]. 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. 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. 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. 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. The gadget serial driver talks over USB to either a CDC ACM driver or a generic USB serial driver running on a host PC. 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. 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. 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. 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. 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. 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. Then you must load the gadget serial driver.
To load it as an ACM device (recommended for interoperability), do this: modprobe gserial To load it as a vendor specific bulk in/out device, do this: modprobe gserial useacm=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. 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: # 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. 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. 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.
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. 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. 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. 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.
To uninstall the Windows XP driver for 'Gadget Serial', right click on the 'Gadget Serial' entry in the 'Device Manager' and select 'Uninstall'. 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'. 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.