U-boot musb gadget support

The code for musb gadget support is currently available on the omap3-dev-usb branch of the Beagle U-Boot git repository.

Current Status

 * Currently the code enables the Beagleboard to be recognized as a USB ACM modem, and provides a u-boot console over it. It keeps the console over serial as well.

Known bugs

 * None

Next steps

 * Merge in mainstream?
 * Prepare inf driver for Windows

Getting the source code
Checkout the git source for the musb gadget support from the Beagle U-Boot git repository. Get it by:

git clone git://gitorious.org/u-boot-omap3/mainline.git cd u-boot-omap3 git checkout --track -b omap3-dev-usb origin/omap3-dev-usb

Build (assuming Code Sourcery GCC 2007q3):

make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config make CROSS_COMPILE=arm-none-linux-gnueabi-

Getting started

 * Load your new u-boot.bin image into the board using any of the existing methods. If you have a beagle running already a working u-boot, you can load it by serial using the 'loady' command and minicom or 'sb' (be sure to have lszrz installed in your distro). Then erasing the u-boot in flash and reflashing the new image with the following commands:

nand unlock nand erase 80000 160000 nand write.i 80000000 80000 160000 #(depending on the your configuration, your start address might be 82000000)

WARNING: in the previous instructions, please verified that your u-boot image was loaded on the address 80000000 (the last line from the ymodem transmission says where the image was loaded). On some boards I have see it uploads to 82000000 instead of 80000000

setenv usbtty cdc_acm saveenv Then reboot, then: setenv stdout usbtty,serial; setenv stdin usbtty,serial; setenv stderr usbtty,serial; saveenv
 * Reboot your board
 * Attach a mini-b USB cable to the beagle. Your host should recognize an ACM CDC device (works out of the box on Linux and OS X).
 * If you want to have the u-boot console over USB use the following command:

Now when you plug the device into your Linux host machine you should be able to talk over serial using minicom,putty,etc over /dev/ttyACM0.

Issues
Network Manager will see this device as a modem and attempt to send it AT commands. To avoid this, edit /lib/udev/rules.d/77-nm-probe-modem-capabilities.rules and add the following lines:

ATTRS{idVendor}=="0525", ATTRS{idProduct}=="a4a7", GOTO="nm_modem_probe_end" ATTRS{idVendor}=="0525", ATTRS{idProduct}=="a4aa", GOTO="nm_modem_probe_end"

Directly after the last line with a 'GOTO="nm_modem_probe_end"' statement.

Minicom doesn't work so well if the device drops out from beneath it. Check out clonetty for a workaround. It does this by creating a psuedo tty that minicom can open.