This document discusses USB gadgets on Linux. It begins with an agenda that covers an introduction to USB, the USB gadget API, existing gadgets, designing a custom gadget, and a demo. It then provides details on the USB architecture and standards, the USB gadget API and how it compares to the Linux USB API, examples of existing gadgets like Ethernet and storage, and guidance on designing a custom gadget by implementing driver registration functions and handling control requests and data transfers. It concludes with a demonstration of a USB gadget on a BeagleBoard using U-Boot and a custom Linux kernel and root filesystem configuration.