Introduction Say you’re being handed a USB device and told to write a driver for it. Seems like a daunting task at first, right? Writing drivers means you have to write Kernel code, and writing Kernel code is hard, low level, hard to debug and so on. None of this is actually true though. Writing a driver for a USB device is actually not much more difficult than writing an application that uses Sockets. This post aims to be a high level introduction to using USB for people who may not have worked with Hardware too much yet and just want to use the technology. There are amazing resources out there such as USB in a NutShell that go into a lot of detail about how USB precisely works (check them out if you want more information), they are however not really approachable for somebody who has never worked with USB before and doesn’t have a certain background in Hardware. You don’t need to be an Embedded Systems Engineer to use USB the same way you don’t need to be a Network Specialist to use Sockets and the Internet. The USB Device The device we’ll be using an Android phone in Bootloader mode. The reason for this is that It’s a device you can easily get your hands on The protocol it uses is well documented and incredibly simple Drivers for it are generally not pre-installed on your system so the OS will not interfere with our experiments Getting the phone into Bootloader mode is different for every device, but usually involves holding down a combination of buttons while the phone is starting up. In my case it’s holding the volume down button while powering on the phone Enumerating the device by hand Enumeration refers to the process of the host asking the device for information about itself. This happens automatically when you plug in the device and it’s where the OS normally decides which driver to load for the device. For most standard devices, the OS will look at the USB Device Class and loads a driver that supports that class. For vendor specific devices, you generally...
First seen: 2026-04-08 20:27
Last seen: 2026-04-09 10:36