Difference between revisions of "USB Gadget"

From ArmadeusWiki
Jump to: navigation, search
m (Introduction)
m (To emulate a serial port:)
Line 69: Line 69:
 
* On your Host PC (as root):
 
* On your Host PC (as root):
 
  # modprobe usbserial vendor=0x0525 product=0xA4A6
 
  # modprobe usbserial vendor=0x0525 product=0xA4A6
 +
or you can automate it by modifying ''/etc/modprobe.d/options'' file (Tested on *Ubuntu):
 +
# vim /etc/modprobe.d/options
 +
  ...
 +
  options usbserial vendor=0x0525 product=0xA4A6
 +
 
* on your APF:
 
* on your APF:
 
  # mknod /dev/ttygserial c 127 0  (only needed the first time you want to use it, if not already existing)
 
  # mknod /dev/ttygserial c 127 0  (only needed the first time you want to use it, if not already existing)

Revision as of 22:54, 29 November 2007

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

Introduction

You can connect your Armadeus board to your PC using its USB port and it can be "enumerated" as most common USB devices (depending on the type of communication 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

or you can automate it by modifying /etc/modprobe.d/options file (Tested on *Ubuntu):

# vim /etc/modprobe.d/options
 ...
 options 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