SlideShare a Scribd company logo
1 of 35
Download to read offline
1Gary Bisson - ELC 2012
Useful USB Gadgets on Linux
February, 2012
Gary Bisson
Adeneo Embedded
Embedded Linux Conference 2012
2Gary Bisson - ELC 2012
Agenda
● Introduction to USB
● USB Gadget API
● Existing Gadgets
● Design your own Gadget
● Demo
● Conclusion
3Gary Bisson - ELC 2012
Who am I?
● Software engineer at Adeneo Embedded
(Bellevue, WA)
● Linux, Android
● Main activities:
– BSP adaptation
– Driver development
– System integration
4Gary Bisson - ELC 2012
Context and objectives
● General knowledge of the API
● Focused on USB not general driver development
● Nothing on the host side
● Case study
● Using a generic embedded device, see how we can
create a USB Gadget
● Show potential
● How to fulfill every need
5Gary Bisson - ELC 2012
Universal Serial Bus
● Industry standard developed in the mid-1990s
● Defines the cables, connectors and protocols used for
connection, communication and power supply
between computers and electronic devices
● 2 billion USB devices were sold each year (as of
2008)
6Gary Bisson - ELC 2012
Universal Serial Bus
● Benefits:
● Replace lots of old buses
● Automatic configuration
● Multiple speeds
● Reliable
● Limits:
● Distance
● Peer-To-Peer
● Broadcasting
7Gary Bisson - ELC 2012
Universal Serial Bus
● Architecture:
● Master-Slave protocol
● Up to 127 devices addressable
● Can be hot-plugged
● Identification to the host
● Supports high speeds
● Multifunction device possibility
8Gary Bisson - ELC 2012
Universal Serial Bus
● Description:
9Gary Bisson - ELC 2012
Universal Serial Bus
● Endpoints
● Source and Sink of data
● Uniquely identifiable
● Unique direction (except setup)
10Gary Bisson - ELC 2012
Universal Serial Bus
● 4 transfer types:
● Control
● Configuration and control information
● Interrupt
● Small quantities time-sensitive data
● Bulk
● Large quantities time-insensitive data
● Isochronous
● Real-time data at predictable bit rates
11Gary Bisson - ELC 2012
Typical Device Driver
● Device Firmware Driver
● Hardware specific routines
● USB interrupts/events
● Chapter 9
● Enumeration process
● Transfer data to upper layer
● USB Class Driver
● Defines the behavior
● Provides configuration
12Gary Bisson - ELC 2012
Gadget API
● Provides essential infrastructure
● Similar to Chapter 9 in typical USB device software
● Handles USB protocol specific requirements
● Flexible enough to expose more complex USB device
capabilities
13Gary Bisson - ELC 2012
Gadget API
Lower boundary:
● handling setup requests (ep0 protocol responses)
possibly including class-specific functionality
● returning configuration and string descriptors
● (re)setting configurations and interface altsettings,
including enabling and configuring endpoints
● handling life cycle events, such as managing bindings
to hardware, USB suspend/resume, remote wakeup,
and disconnection from the USB host
● managing IN and OUT transfers on all currently
enabled endpoints
14Gary Bisson - ELC 2012
Gadget API
Upper layer:
● user mode code, using generic (gadgetfs) or application
specific files in /dev
● networking subsystem (for network gadgets, like the
CDC Ethernet Model gadget driver)
● data capture drivers, perhaps video4Linux or a scanner
driver; or test and measurement hardware
● input subsystem (for HID gadgets)
● sound subsystem (for audio gadgets)
● file system (for PTP gadgets)
● block i/o subsystem (for usb-storage gadgets)
15Gary Bisson - ELC 2012
Gadget API vs. Linux-USB API
● Similarities
● Share common definitions for the standard USB messages,
structures and constants
● Use queues of request objects to package I/O buffers
● Both APIs bind and unbind drivers to devices
● Differences
● Control transfers
● Configuration management
=> Thanks to similarities, Gadget API supports OTG
16Gary Bisson - ELC 2012
Gadget API – Main structures
struct usb_gadget – represents a gadget device
➢ usb_gadget_ops – contains callbacks for hardware operations
struct usb_ep – device hardware management
➢ usb_ep_ops – contains callbacks for endpoints operations
struct usb_gadget_driver – device functions
management (bind, unbind, suspend etc...)
struct usb_request – USB transfers management
17Gary Bisson - ELC 2012
Gadget API – Main functions
General operations (usb_gadget_x()):
● probe_driver / unregister_driver
● set_selfpowered / clear_selfpowered
● vbus_connect / vbus_disconnect
● connect / disconnect
● frame_number
Endpoint operations (usb_ep_x()):
● autoconf / autoconf_reset
● enable / disable
● alloc / free
● queue / dequeue
● set_halt / clear_halt
● fifo_status / fifo_flush
Decriptor operations:
● usb_descriptor_fillbuf
● usb_gadget_config_buf
18Gary Bisson - ELC 2012
Gadget API
Driver life cycle:
● Register driver for a particular device controller
● Register gadget driver (bind)
● Hardware powered, enumeration starts
● Gadget driver returns descriptors (setup)
● Gadget driver returns interfaces configuration
● Do real work (data transfer) until disconnect
● Gadget driver unloaded (unbind)
19Gary Bisson - ELC 2012
Existing Gadgets
● Ethernet
● Enumerate to the host as an Ethernet device
● Can easily be bridging, routing, or firewalling
access to other networks
● Interoperability with hosts running Linux, MS-
Windows among others
● Possibility to set parameters such as MAC address,
IP configuration or DHCP use thanks to the
bootargs if using a boot firmware like U-Boot
20Gary Bisson - ELC 2012
Existing Gadgets
● GadgetFS
● Provides User-Mode API
● Each endpoint presented as single I/O file
descriptor
● Normal read() and write() calls
● Async I/O supported
● Configuration and descriptors written into files
Note that user mode gadget drivers do not necesarily need to
be licensed according to the GPL.
21Gary Bisson - ELC 2012
Existing Gadgets
● File-backed Storage
● Implements the USB Mass Storage Class
● Up to 8 disk drives can be set
● Store file or block device is called the “backing
storage”
● Backing storage requires preparation
– If a file is used, it must created with its desired size before
launching the driver
– If a block device, it must match host reaquirements (DOS
partition for MS-Windows host)
● The backing storage must not change while FBS is
running, only the host should access it
22Gary Bisson - ELC 2012
Existing Gadgets
● Webcam
● Acts as a composite USB Audio and Video Class
device
● Provides a userspace API to process UVC control
requests and stream video data
● Serial Gadget
● Useful for TTY style operation
● Supports a CDC-ACM module option
23Gary Bisson - ELC 2012
Existing Gadgets
● MIDI
● Exposes an ALSA MIDI interface
● Both recording and playback support
● GadgetZero
● Useful to test device controller driver
● Helps verify that the driver stack pass USB-IF (for
USB branding)
● On the host side, useful to test USB stack
24Gary Bisson - ELC 2012
Design your own Gadget
● 3 main operations to consider
● Hardware
● Functional
● Endpoints
25Gary Bisson - ELC 2012
Design your own Gadget
● First implement the register/unregister functions
● usb_gadget_probe_driver
– Resgistration of the usb_gadget_driver
– Responsible for binding the gadget driver and powering up
the device
● usb_gadget_unregister_driver
– Responsible for unbinding the gadget from the functional
driver and powering down the device
● Then define callbacks hardware related
● Fill usb_ep_ops and usb_gadget_ops
● Not necessary to support all functions
26Gary Bisson - ELC 2012
Design your own Gadget
● Implement the control request handles (ep0)
● Gadget driver handles only a part of it
● The rest is routed to the class driver
27Gary Bisson - ELC 2012
Design your own Gadget
● Power Management requests
● Comes from the PDC to the Gadget
● The Gadget must pass the events to the class driver
● Once enumeration is done, class driver requests
usb_request structure for IN/OUT transfers
● Gadget receives data in interrupt routine (OUT)
– Only when the expected amount is received the Gadget
calls the complete function
● Gadget sends data to the PDC (IN)
– Wait send completion to inform the class driver
28Gary Bisson - ELC 2012
Design your own Gadget
29Gary Bisson - ELC 2012
Demo: Hardware
BeagleBoard xM
● ARM™ Cortex™-A8 1000 MHz
● USB connectivity:
● 4 host ports
● 1 OTG port (used as device)
30Gary Bisson - ELC 2012
Demo: Software
● Bootloader
● U-boot 2011.12 r4
● Kernel
● 3.0.17 r115c
● Root filesystem
● Console image
– Custom recipe (lighttpd)
● Additional modules
31Gary Bisson - ELC 2012
Conclusion
● Easy to implement
● Hardware independent
● Scalability
● Large panel of existing gadgets
● Awareness of limitations
32Gary Bisson - ELC 2012
Questions?
33Gary Bisson - ELC 2012
Appendix: Files
The files used for this experiment should be
attached with the presentation
● Rootfs:
● Custom recipe provided if rebuild is necessary
● Additional modules:
● Instructions to recompile them
● Demo script
● Lighttpd configuration file
34Gary Bisson - ELC 2012
Appendix: References
● Linux-USB Gadget API Framework: General
presentation.
● USB Gadget API for Linux: Full description of the API.
● Essential Linux Device Drivers (Sreekrishnan
Venkateswaran) : General device driver book
containing a useful USB section.
● Bootstrap Yourself with Linux-USB Stack (Rajaram
Regupathy): Very detailed and easy-to-read book about
Linux-USB.
Useful USB Gadgets on Linux

More Related Content

What's hot

Linux Initialization Process (1)
Linux Initialization Process (1)Linux Initialization Process (1)
Linux Initialization Process (1)shimosawa
 
linux device driver
linux device driverlinux device driver
linux device driverRahul Batra
 
Introduction Linux Device Drivers
Introduction Linux Device DriversIntroduction Linux Device Drivers
Introduction Linux Device DriversNEEVEE Technologies
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_BootingRashila Rr
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoCMacpaul Lin
 
U-Boot Porting on New Hardware
U-Boot Porting on New HardwareU-Boot Porting on New Hardware
U-Boot Porting on New HardwareRuggedBoardGroup
 
Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverNanik Tolaram
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessNanik Tolaram
 
Secure container: Kata container and gVisor
Secure container: Kata container and gVisorSecure container: Kata container and gVisor
Secure container: Kata container and gVisorChing-Hsuan Yen
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALOpersys inc.
 
Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Jian-Hong Pan
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLinaro
 
Lcu14 107- op-tee on ar mv8
Lcu14 107- op-tee on ar mv8Lcu14 107- op-tee on ar mv8
Lcu14 107- op-tee on ar mv8Linaro
 

What's hot (20)

Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
Android Things : Building Embedded Devices
Android Things : Building Embedded DevicesAndroid Things : Building Embedded Devices
Android Things : Building Embedded Devices
 
Linux Initialization Process (1)
Linux Initialization Process (1)Linux Initialization Process (1)
Linux Initialization Process (1)
 
linux device driver
linux device driverlinux device driver
linux device driver
 
Introduction Linux Device Drivers
Introduction Linux Device DriversIntroduction Linux Device Drivers
Introduction Linux Device Drivers
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Linux device drivers
Linux device drivers Linux device drivers
Linux device drivers
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_Booting
 
Power Management from Linux Kernel to Android
Power Management from Linux Kernel to AndroidPower Management from Linux Kernel to Android
Power Management from Linux Kernel to Android
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
U-Boot Porting on New Hardware
U-Boot Porting on New HardwareU-Boot Porting on New Hardware
U-Boot Porting on New Hardware
 
Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device Driver
 
Deep Dive into the AOSP
Deep Dive into the AOSPDeep Dive into the AOSP
Deep Dive into the AOSP
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
 
Secure container: Kata container and gVisor
Secure container: Kata container and gVisorSecure container: Kata container and gVisor
Secure container: Kata container and gVisor
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HAL
 
Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platform
 
SR-IOV Introduce
SR-IOV IntroduceSR-IOV Introduce
SR-IOV Introduce
 
Lcu14 107- op-tee on ar mv8
Lcu14 107- op-tee on ar mv8Lcu14 107- op-tee on ar mv8
Lcu14 107- op-tee on ar mv8
 

Viewers also liked

Viewers also liked (9)

Linux Usb overview
Linux Usb  overviewLinux Usb  overview
Linux Usb overview
 
Headless Android Strikes Back!
Headless Android Strikes Back!Headless Android Strikes Back!
Headless Android Strikes Back!
 
Leveraging the Android Open Accessory Protocol
Leveraging the Android Open Accessory ProtocolLeveraging the Android Open Accessory Protocol
Leveraging the Android Open Accessory Protocol
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6
 
Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updates
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on Android
 
Embedded Android : System Development - Part IV
Embedded Android : System Development - Part IVEmbedded Android : System Development - Part IV
Embedded Android : System Development - Part IV
 
Embedded Android : System Development - Part I
Embedded Android : System Development - Part IEmbedded Android : System Development - Part I
Embedded Android : System Development - Part I
 
USB Drivers
USB DriversUSB Drivers
USB Drivers
 

Similar to Useful USB Gadgets on Linux

Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBSamsung Open Source Group
 
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hoodEmbedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hoodEmbeddedFest
 
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Android Open Accessory Protocol - Turn Your Linux machine as ADKAndroid Open Accessory Protocol - Turn Your Linux machine as ADK
Android Open Accessory Protocol - Turn Your Linux machine as ADKRajesh Sola
 
aoa-adk-osidays-rajeshsola
aoa-adk-osidays-rajeshsolaaoa-adk-osidays-rajeshsola
aoa-adk-osidays-rajeshsolaRajesh Sola
 
The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012Philip Polstra
 
Open Source Firmware - FrOSCon 2019
Open Source Firmware - FrOSCon 2019Open Source Firmware - FrOSCon 2019
Open Source Firmware - FrOSCon 2019Daniel Maslowski
 
Droidcon 2013 France - Android Platform Anatomy
Droidcon 2013 France - Android Platform AnatomyDroidcon 2013 France - Android Platform Anatomy
Droidcon 2013 France - Android Platform AnatomyBenjamin Zores
 
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...Neil Armstrong
 
Robot controlled car using Wireless Module
 Robot controlled car using Wireless Module Robot controlled car using Wireless Module
Robot controlled car using Wireless Moduleshreyaseksambe
 
XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...
XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...
XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...The Linux Foundation
 
Embedded Linux Systems Basics
Embedded Linux Systems BasicsEmbedded Linux Systems Basics
Embedded Linux Systems BasicsMax Henery
 
Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013Opersys inc.
 
Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 2012Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 201244CON
 
ITE v5.0 - Chapter 7
ITE v5.0 - Chapter 7ITE v5.0 - Chapter 7
ITE v5.0 - Chapter 7Irsandi Hasan
 

Similar to Useful USB Gadgets on Linux (20)

Rapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USBRapid SPi Device Driver Development over USB
Rapid SPi Device Driver Development over USB
 
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hoodEmbedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
 
How to Hack Edison
How to Hack EdisonHow to Hack Edison
How to Hack Edison
 
Android Open Accessory Protocol - Turn Your Linux machine as ADK
Android Open Accessory Protocol - Turn Your Linux machine as ADKAndroid Open Accessory Protocol - Turn Your Linux machine as ADK
Android Open Accessory Protocol - Turn Your Linux machine as ADK
 
aoa-adk-osidays-rajeshsola
aoa-adk-osidays-rajeshsolaaoa-adk-osidays-rajeshsola
aoa-adk-osidays-rajeshsola
 
The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012The Deck by Phil Polstra GrrCON2012
The Deck by Phil Polstra GrrCON2012
 
Open Source Firmware - FrOSCon 2019
Open Source Firmware - FrOSCon 2019Open Source Firmware - FrOSCon 2019
Open Source Firmware - FrOSCon 2019
 
Droidcon 2013 France - Android Platform Anatomy
Droidcon 2013 France - Android Platform AnatomyDroidcon 2013 France - Android Platform Anatomy
Droidcon 2013 France - Android Platform Anatomy
 
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
 
Hardware hacking
Hardware hackingHardware hacking
Hardware hacking
 
Robot controlled car using Wireless Module
 Robot controlled car using Wireless Module Robot controlled car using Wireless Module
Robot controlled car using Wireless Module
 
XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...
XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...
XPDDS17: Keynote: Shared Coprocessor Framework on ARM - Oleksandr Andrushchen...
 
Introduction and course Details of Embedded Linux Platform Developer Training
Introduction and course Details of Embedded Linux Platform Developer TrainingIntroduction and course Details of Embedded Linux Platform Developer Training
Introduction and course Details of Embedded Linux Platform Developer Training
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
Embedded Linux Systems Basics
Embedded Linux Systems BasicsEmbedded Linux Systems Basics
Embedded Linux Systems Basics
 
Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013Android Internals at Linaro Connect Asia 2013
Android Internals at Linaro Connect Asia 2013
 
Polstra 44con2012
Polstra 44con2012Polstra 44con2012
Polstra 44con2012
 
Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 2012Hacking and Forensics on the Go - 44CON 2012
Hacking and Forensics on the Go - 44CON 2012
 
ITE v5.0 - Chapter 7
ITE v5.0 - Chapter 7ITE v5.0 - Chapter 7
ITE v5.0 - Chapter 7
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 

Recently uploaded

Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgsaravananr517913
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptJasonTagapanGulla
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx959SahilShah
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...Chandu841456
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024hassan khalil
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - GuideGOPINATHS437943
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvLewisJB
 
Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.eptoze12
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girlsssuser7cb4ff
 
Earthing details of Electrical Substation
Earthing details of Electrical SubstationEarthing details of Electrical Substation
Earthing details of Electrical Substationstephanwindworld
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...asadnawaz62
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHC Sai Kiran
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)Dr SOUNDIRARAJ N
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 

Recently uploaded (20)

Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.ppt
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 
Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - Guide
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvv
 
Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girls
 
Earthing details of Electrical Substation
Earthing details of Electrical SubstationEarthing details of Electrical Substation
Earthing details of Electrical Substation
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECH
 
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 

Useful USB Gadgets on Linux

  • 1. 1Gary Bisson - ELC 2012 Useful USB Gadgets on Linux February, 2012 Gary Bisson Adeneo Embedded Embedded Linux Conference 2012
  • 2. 2Gary Bisson - ELC 2012 Agenda ● Introduction to USB ● USB Gadget API ● Existing Gadgets ● Design your own Gadget ● Demo ● Conclusion
  • 3. 3Gary Bisson - ELC 2012 Who am I? ● Software engineer at Adeneo Embedded (Bellevue, WA) ● Linux, Android ● Main activities: – BSP adaptation – Driver development – System integration
  • 4. 4Gary Bisson - ELC 2012 Context and objectives ● General knowledge of the API ● Focused on USB not general driver development ● Nothing on the host side ● Case study ● Using a generic embedded device, see how we can create a USB Gadget ● Show potential ● How to fulfill every need
  • 5. 5Gary Bisson - ELC 2012 Universal Serial Bus ● Industry standard developed in the mid-1990s ● Defines the cables, connectors and protocols used for connection, communication and power supply between computers and electronic devices ● 2 billion USB devices were sold each year (as of 2008)
  • 6. 6Gary Bisson - ELC 2012 Universal Serial Bus ● Benefits: ● Replace lots of old buses ● Automatic configuration ● Multiple speeds ● Reliable ● Limits: ● Distance ● Peer-To-Peer ● Broadcasting
  • 7. 7Gary Bisson - ELC 2012 Universal Serial Bus ● Architecture: ● Master-Slave protocol ● Up to 127 devices addressable ● Can be hot-plugged ● Identification to the host ● Supports high speeds ● Multifunction device possibility
  • 8. 8Gary Bisson - ELC 2012 Universal Serial Bus ● Description:
  • 9. 9Gary Bisson - ELC 2012 Universal Serial Bus ● Endpoints ● Source and Sink of data ● Uniquely identifiable ● Unique direction (except setup)
  • 10. 10Gary Bisson - ELC 2012 Universal Serial Bus ● 4 transfer types: ● Control ● Configuration and control information ● Interrupt ● Small quantities time-sensitive data ● Bulk ● Large quantities time-insensitive data ● Isochronous ● Real-time data at predictable bit rates
  • 11. 11Gary Bisson - ELC 2012 Typical Device Driver ● Device Firmware Driver ● Hardware specific routines ● USB interrupts/events ● Chapter 9 ● Enumeration process ● Transfer data to upper layer ● USB Class Driver ● Defines the behavior ● Provides configuration
  • 12. 12Gary Bisson - ELC 2012 Gadget API ● Provides essential infrastructure ● Similar to Chapter 9 in typical USB device software ● Handles USB protocol specific requirements ● Flexible enough to expose more complex USB device capabilities
  • 13. 13Gary Bisson - ELC 2012 Gadget API Lower boundary: ● handling setup requests (ep0 protocol responses) possibly including class-specific functionality ● returning configuration and string descriptors ● (re)setting configurations and interface altsettings, including enabling and configuring endpoints ● handling life cycle events, such as managing bindings to hardware, USB suspend/resume, remote wakeup, and disconnection from the USB host ● managing IN and OUT transfers on all currently enabled endpoints
  • 14. 14Gary Bisson - ELC 2012 Gadget API Upper layer: ● user mode code, using generic (gadgetfs) or application specific files in /dev ● networking subsystem (for network gadgets, like the CDC Ethernet Model gadget driver) ● data capture drivers, perhaps video4Linux or a scanner driver; or test and measurement hardware ● input subsystem (for HID gadgets) ● sound subsystem (for audio gadgets) ● file system (for PTP gadgets) ● block i/o subsystem (for usb-storage gadgets)
  • 15. 15Gary Bisson - ELC 2012 Gadget API vs. Linux-USB API ● Similarities ● Share common definitions for the standard USB messages, structures and constants ● Use queues of request objects to package I/O buffers ● Both APIs bind and unbind drivers to devices ● Differences ● Control transfers ● Configuration management => Thanks to similarities, Gadget API supports OTG
  • 16. 16Gary Bisson - ELC 2012 Gadget API – Main structures struct usb_gadget – represents a gadget device ➢ usb_gadget_ops – contains callbacks for hardware operations struct usb_ep – device hardware management ➢ usb_ep_ops – contains callbacks for endpoints operations struct usb_gadget_driver – device functions management (bind, unbind, suspend etc...) struct usb_request – USB transfers management
  • 17. 17Gary Bisson - ELC 2012 Gadget API – Main functions General operations (usb_gadget_x()): ● probe_driver / unregister_driver ● set_selfpowered / clear_selfpowered ● vbus_connect / vbus_disconnect ● connect / disconnect ● frame_number Endpoint operations (usb_ep_x()): ● autoconf / autoconf_reset ● enable / disable ● alloc / free ● queue / dequeue ● set_halt / clear_halt ● fifo_status / fifo_flush Decriptor operations: ● usb_descriptor_fillbuf ● usb_gadget_config_buf
  • 18. 18Gary Bisson - ELC 2012 Gadget API Driver life cycle: ● Register driver for a particular device controller ● Register gadget driver (bind) ● Hardware powered, enumeration starts ● Gadget driver returns descriptors (setup) ● Gadget driver returns interfaces configuration ● Do real work (data transfer) until disconnect ● Gadget driver unloaded (unbind)
  • 19. 19Gary Bisson - ELC 2012 Existing Gadgets ● Ethernet ● Enumerate to the host as an Ethernet device ● Can easily be bridging, routing, or firewalling access to other networks ● Interoperability with hosts running Linux, MS- Windows among others ● Possibility to set parameters such as MAC address, IP configuration or DHCP use thanks to the bootargs if using a boot firmware like U-Boot
  • 20. 20Gary Bisson - ELC 2012 Existing Gadgets ● GadgetFS ● Provides User-Mode API ● Each endpoint presented as single I/O file descriptor ● Normal read() and write() calls ● Async I/O supported ● Configuration and descriptors written into files Note that user mode gadget drivers do not necesarily need to be licensed according to the GPL.
  • 21. 21Gary Bisson - ELC 2012 Existing Gadgets ● File-backed Storage ● Implements the USB Mass Storage Class ● Up to 8 disk drives can be set ● Store file or block device is called the “backing storage” ● Backing storage requires preparation – If a file is used, it must created with its desired size before launching the driver – If a block device, it must match host reaquirements (DOS partition for MS-Windows host) ● The backing storage must not change while FBS is running, only the host should access it
  • 22. 22Gary Bisson - ELC 2012 Existing Gadgets ● Webcam ● Acts as a composite USB Audio and Video Class device ● Provides a userspace API to process UVC control requests and stream video data ● Serial Gadget ● Useful for TTY style operation ● Supports a CDC-ACM module option
  • 23. 23Gary Bisson - ELC 2012 Existing Gadgets ● MIDI ● Exposes an ALSA MIDI interface ● Both recording and playback support ● GadgetZero ● Useful to test device controller driver ● Helps verify that the driver stack pass USB-IF (for USB branding) ● On the host side, useful to test USB stack
  • 24. 24Gary Bisson - ELC 2012 Design your own Gadget ● 3 main operations to consider ● Hardware ● Functional ● Endpoints
  • 25. 25Gary Bisson - ELC 2012 Design your own Gadget ● First implement the register/unregister functions ● usb_gadget_probe_driver – Resgistration of the usb_gadget_driver – Responsible for binding the gadget driver and powering up the device ● usb_gadget_unregister_driver – Responsible for unbinding the gadget from the functional driver and powering down the device ● Then define callbacks hardware related ● Fill usb_ep_ops and usb_gadget_ops ● Not necessary to support all functions
  • 26. 26Gary Bisson - ELC 2012 Design your own Gadget ● Implement the control request handles (ep0) ● Gadget driver handles only a part of it ● The rest is routed to the class driver
  • 27. 27Gary Bisson - ELC 2012 Design your own Gadget ● Power Management requests ● Comes from the PDC to the Gadget ● The Gadget must pass the events to the class driver ● Once enumeration is done, class driver requests usb_request structure for IN/OUT transfers ● Gadget receives data in interrupt routine (OUT) – Only when the expected amount is received the Gadget calls the complete function ● Gadget sends data to the PDC (IN) – Wait send completion to inform the class driver
  • 28. 28Gary Bisson - ELC 2012 Design your own Gadget
  • 29. 29Gary Bisson - ELC 2012 Demo: Hardware BeagleBoard xM ● ARM™ Cortex™-A8 1000 MHz ● USB connectivity: ● 4 host ports ● 1 OTG port (used as device)
  • 30. 30Gary Bisson - ELC 2012 Demo: Software ● Bootloader ● U-boot 2011.12 r4 ● Kernel ● 3.0.17 r115c ● Root filesystem ● Console image – Custom recipe (lighttpd) ● Additional modules
  • 31. 31Gary Bisson - ELC 2012 Conclusion ● Easy to implement ● Hardware independent ● Scalability ● Large panel of existing gadgets ● Awareness of limitations
  • 32. 32Gary Bisson - ELC 2012 Questions?
  • 33. 33Gary Bisson - ELC 2012 Appendix: Files The files used for this experiment should be attached with the presentation ● Rootfs: ● Custom recipe provided if rebuild is necessary ● Additional modules: ● Instructions to recompile them ● Demo script ● Lighttpd configuration file
  • 34. 34Gary Bisson - ELC 2012 Appendix: References ● Linux-USB Gadget API Framework: General presentation. ● USB Gadget API for Linux: Full description of the API. ● Essential Linux Device Drivers (Sreekrishnan Venkateswaran) : General device driver book containing a useful USB section. ● Bootstrap Yourself with Linux-USB Stack (Rajaram Regupathy): Very detailed and easy-to-read book about Linux-USB.