USB Gadget

From ArmadeusWiki
Revision as of 00:11, 28 November 2007 by JulienB (Talk | contribs) (To emulate a serial port:)

Jump to: navigation, search

Instructions to use the USB port of your Armadeus board to communicate with your PC

Introduction

You can connect your Armadeus board to a PC using its USB port and it can be enumerated as many USB devices (depending on the type of communication way you want to use):

  • serial device
  • net device
  • mass storage device

Installation

  • configure your Linux kernel:
[armadeus]$ make linux-menuconfig

in Device Drivers->USB support->USB Gadget Support, choose Support for USB Gadgets and activate all USB Gadget Drivers:

Linux config usb gadget.png

  • save your configuration and then rebuild your kernel image:
[armadeus]$ make

now you should have following drivers in your kernel source tree:

drivers/usb/gadget/gadgetfs.ko        For test
drivers/usb/gadget/g_ether.ko         Ethernet emulation on USB
drivers/usb/gadget/g_file_storage.ko  Mass storage
drivers/usb/gadget/g_serial.ko        Serial emulation on USB
drivers/usb/gadget/g_zero.ko          For test
drivers/usb/gadget/imx_udc.ko         i.MXL USB device Core Controller 
  • reflash your RootFS or manually copy imx_udc.ko, g_file_storage.ko & g_serial.ko to your target in /lib/modules/...

Usage

First, load the core controller driver on your board:

# modprobe imx_udc
 usb: imx_udc version: 0.5

To emulate a mass storage device:

  • create or get a "backing storage file" (for example)
  • copy this file (uncompressed) in the /tmp directory of your rootfs (see NetworkConfig if necessary)
# cp /mnt/nfs/backing_file.gz /tmp/
# gunzip /tmp/backing_file.gz
  • load g_file_storage module:
# modprobe g_file_storage file=/tmp/backing_file
g_file_storage gadget: File-backed Storage Gadget, version: 28 November 2005
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /tmp/backing_file
  • connect target's USB cable to your PC and,

On your Linux Host:

  • as root, launch dmesg and find the /dev/sdaX device assigned to your board:
... usb 1-1.4: new full speed USB device using uhci_hcd and address 7
... usb 1-1.4: configuration #1 chosen from 1 choice
... scsi1 : SCSI emulation for USB Mass Storage devices
...    Vendor: Linux     Model: File-Stor Gadget  Rev: 0314
...    Type:   Direct-Access                      ANSI SCSI revision: 02
...  SCSI device sda: 8192 512-byte hdwr sectors (4 MB)
...  sda: Write Protect is off
...  SCSI device sda: 8192 512-byte hdwr sectors (4 MB)
...  sda: Write Protect is off
...   sda: sda1
...  sd 1:0:0:0: Attached scsi disk sda
...  sd 1:0:0:0: Attached scsi generic sg0 type 0
  • then mount the device and enjoy file sharing:
[root@toto]# mount /dev/sda1 /mnt/tmp
[root@toto]# cd /mnt/tmp
[root@toto]# showimage /mnt/tmp/test.jpg

To emulate a serial port:

  • On your Host PC (as root):
# modprobe usbserial vendor=0x0525 product=0xA4A6
  • on your APF:
# mknod /dev/ttygserial c 127 0   (only needed the first time you want to use it, if not already existing)
# modprobe g_serial
gs_bind: Gadget Serial v2.2 bound
gs_module_init: Gadget Serial v2.2 loaded
  • then connect the USB cable between your PC and your APF and you should see on your Host:
# tail -f /var/log/messages
Nov 27 22:53:50 ...  usb 1-1.4: new full speed USB device using uhci_hcd and address 7
Nov 27 22:53:50 ...  usb 1-1.4: configuration #1 chosen from 1 choice
Nov 27 22:53:50 ...  usbserial_generic 1-1.4:1.0: generic converter detected
Nov 27 22:53:50 ...  usb 1-1.4: generic converter now attached to ttyUSB0
  • you should now be able to send/receive data through /dev/ttyUSB0 (PC) and /dev/ttygserial (APF):
[armadeus]$ echo "COUCOU" > /dev/ttyUSB0
# cat /dev/ttygserial
COUCOUC

TBDL

Links