Difference between revisions of "USB Gadget"

From ArmadeusWiki
Jump to: navigation, search
(moved installation)
m (To emulate a mass storage device:)
Line 23: Line 23:
 
* [[USB_Gadget#Links |create]] or get a "backing storage file" ([http://dl.free.fr/q9IKqqweK for example])
 
* [[USB_Gadget#Links |create]] or get a "backing storage file" ([http://dl.free.fr/q9IKqqweK for example])
 
* copy this file (uncompressed) in the '''/tmp''' directory of your board (here my Host PC has 192.168.0.20 as IP @):
 
* copy this file (uncompressed) in the '''/tmp''' directory of your board (here my Host PC has 192.168.0.20 as IP @):
 +
<pre class="apf">
 
  # tftp -g -r backing_file.gz -l /tmp/backing_file.gz 192.168.0.20
 
  # tftp -g -r backing_file.gz -l /tmp/backing_file.gz 192.168.0.20
 
  # gunzip /tmp/backing_file.gz
 
  # gunzip /tmp/backing_file.gz
 
+
</pre>
 
* load ''g_file_storage'' module:
 
* load ''g_file_storage'' module:
 +
<pre class="apf">
 
  # modprobe g_file_storage file=/tmp/backing_file
 
  # modprobe g_file_storage file=/tmp/backing_file
 
  g_file_storage gadget: File-backed Storage Gadget, version: 28 November 2005
 
  g_file_storage gadget: File-backed Storage Gadget, version: 28 November 2005
 
  g_file_storage gadget: Number of LUNs=1
 
  g_file_storage gadget: Number of LUNs=1
 
  g_file_storage gadget-lun0: ro=0, file: /tmp/backing_file
 
  g_file_storage gadget-lun0: ro=0, file: /tmp/backing_file
 +
</pre>
 
* connect target's USB cable to your PC and,  
 
* connect target's USB cable to your PC and,  
 
On your Linux Host:
 
On your Linux Host:
 
* If you have a recent Linux distribution, your device should be automatically mounted. Otherwise:
 
* If you have a recent Linux distribution, your device should be automatically mounted. Otherwise:
* as root, launch ''dmesg'' and find the ''/dev/sdaX'' device assigned to your board:
+
** 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: new full speed USB device using uhci_hcd and address 7
 
  ... usb 1-1.4: configuration #1 chosen from 1 choice
 
  ... usb 1-1.4: configuration #1 chosen from 1 choice
Line 47: Line 50:
 
  ...  sd 1:0:0:0: Attached scsi disk sda
 
  ...  sd 1:0:0:0: Attached scsi disk sda
 
  ...  sd 1:0:0:0: Attached scsi generic sg0 type 0
 
  ...  sd 1:0:0:0: Attached scsi generic sg0 type 0
 
+
*
* then mount the device and enjoy file sharing:
+
** then mount the device and enjoy file sharing:
 +
<pre class="host">
 
  $ sudo mount /dev/sda1 /mnt/tmp
 
  $ sudo mount /dev/sda1 /mnt/tmp
 
  $ cd /mnt/tmp
 
  $ cd /mnt/tmp
 
  $ showimage /mnt/tmp/test.jpg
 
  $ showimage /mnt/tmp/test.jpg
 +
</pre>
  
 
===To emulate a serial link===
 
===To emulate a serial link===

Revision as of 16:29, 18 May 2009

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

Introduction

You can connect your APF9328 board to your PC using its USB Device 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

  • The drivers are now installed by default (since armadeus-3.0)
  • you should have following modules 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

Usage

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 board (here my Host PC has 192.168.0.20 as IP @):
 # tftp -g -r backing_file.gz -l /tmp/backing_file.gz 192.168.0.20
 # 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:

  • If you have a recent Linux distribution, your device should be automatically mounted. Otherwise:
    • 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:
 $ sudo mount /dev/sda1 /mnt/tmp
 $ cd /mnt/tmp
 $ showimage /mnt/tmp/test.jpg

To emulate a serial link

  • On your Host PC:
$ sudo 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   (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

To emulate an Ethernet link

  • On your Target:
# modprobe g_ether
ether gadget: using random self ethernet address
ether gadget: using random host ethernet address
usb0: Ethernet Gadget, version: May Day 2005
usb0: using imx_udc, OUT ep2out-bulk IN ep1in-bulk STATUS ep4in-int
usb0: MAC be:df:31:95:16:e0
usb0: HOST MAC 3e:86:1e:94:eb:84
usb0: RNDIS ready
  • On your PC:
# modprobe cdc_ether
  • If someone knows how to go further.... :-)

Links