USB Gadget
From ArmadeusWiki
Instructions to use the USB port of your Armadeus board to communicate with your PC
Contents
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:
- 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