How to write a Linux device driver
freesoftwaremagazine.com
freesoftwaremagazine.com
The I/O MMU!
Write your drivers in userspace, save your sanity. I realize it's hard to get a kernel that supports everything you need to accomplish this, but it's definitely "the future" when it comes to device drivers.
However, this is a decent beginning point for people completely unfamiliar with writing a driver. The table and the makefile parts are especially important for beginners to just get freaking started.
You can write fast network card drivers in userspace too. You map the physical DMA memory into userspace and cut out the kernel entirely. Interrupts don't even come into the picture when you're polling several packets per microsecond. Lots of those cards nowadays come with high-end packet I/O libraries that are implemented in userspace. Myricom Sniffer10G, Intel Data Plane Development Kit, ntop.org DNA, etc.
The I/O MMU can be slightly slower than "true" DMA if done poorly, but the simple use case is actually performs the best (in my teeny experience).
For other types of devices or if you don't have ANY driver, it's obviously somewhat trickier, as most I/O protocols are a lot lower level than USB (the host controller driver takes care of most of the heavy lifting for USB). I suspect you'll need specialist debug hardware to log the generated traffic.
Microsoft eventually changed its position on Kinect and never filed a lawsuit over the reverse engineering. So, we don't have a court decision suggesting that there was anything legally improper in any way about the Kinect reverse engineering.
Hackers should be upset about §1201 and speak out against it, but not be gratuitously scared off from doing things!
Btw, if you're writing a USB driver, most of the time the device uses HID, even though that's for a completely different type of device then what HID is supposed to be specced for.
I'm curious: was this as an independent contractor or for an established company? I really enjoy driver programming and low level stuff for some reason (OSX & Linux and game consoles so far) and would rather like to specialise my contract work on that kind of thing. Beyond people stumbling across my work online, I really don't know who to approach and where to look for that kind of work. It's rather a lot easier to get referrals for more mainstream development work.
Cable set top boxes often use Linux, and often need drivers.
Keep in mind that the 2.6.x -> 3.0 transition was largely just in the version numbers...in terms of the code there was no major overhaul or change.