on 29 May 2013
If you are attempting to write a serious operating system, this book will without doubt save you at least a year of your life. I have avoided attempting to add USB capability to my operating system for a long time because it looked so hard to do: after reading through the USB 2 specification I was left thinking it would likely take a year's work just to understand it, and probably another year to implement it. I've attempted to read up on it in numerous other places too in the hope of being able to make sense of it, but until now it had remained an impenetrable jungle. I never imagined that anyone would ever write a book of this kind to light the path for the relatively few people mad enough to attempt to write an operating system, but here it is: a guide that goes through the entire process of implementing USB, filling in all the crucial missing bits that no one else bothers to tell you while providing numerous tips along the way which may each save you weeks of fighting bugs due to things not working quite the way the specification says they should. The book doesn't even stop at doing what it says on the tin, but it goes on to give you even more, pointing the way into writing device drivers for other USB devices beyond the few needed to free yourself from dependency on the BIOS (so that your OS can still do useful work in an EFI-boot environment), and also opening the door to designing and making your own USB devices. Books simply don't get any better than this.
Faults? Well, in the Kindle edition, four of the diagrams do go off the edge of the screen such that parts of them are missing, but you'll be downloading free copies of those anyway in the various specification documents (free downloadable PDFs). [Correction - I was new to using Kindle for PC and it turns out that the diagrams are complete after all once you set it up better.] There are also a lot of typos, but none of them will cause you any trouble. I should say that I've only read through it once as I only bought it yesterday, so there may yet be some important gaps that I haven't noticed, but I can already see the vast bulk of the path set out clearly in front of me and am confident that I can now get this done on a reasonable timescale (measured in months rather than years). I can't wait to get started on it.
[I will return to edit this to let you know how it actually goes.]