title: How are low level device drivers written for Linux?
body: <p>I remember reading some books about Linux Device drivers around the end of my university education for Comp. Science. Soon there-after I got a job and haven't really worked much with Linux/Embedded (I do mostly java stuff now). However it's something I want to look into.</p>
  
  <p>Anyways I recall reading an online article (ill edit post if I can find it) about writing a USB Driver for Linux for a Little "USB Missile Turret" similar to this:
  <a href="http://www.thinkgeek.com/geektoys/warfare/8a0f/" rel="nofollow">http://www.thinkgeek.com/geektoys/warfare/8a0f/</a></p>
  
  <p>Anyways it went into detail about how to write the driver without a driver being provided (the guy just found a generic one on ebay....and figured out how to like...write the driver just by looking at the components and such). ANYWAYS it was pretty amazing.</p>
  
  <p>I have a pretty good clue about how low level embedded stuff works, but thats for stuff like AVR's/PIC Microcontrollers, I have no idea how something like this would be written for like a Normal processor in a PC.</p>
  
  <p>Anyways I guess what Im asking is.....how do you figure out this kinda stuff, where would I find such information.</p>
  
  <p>edit: found the link
  <a href="http://matthias.vallentin.net/blog/2007/04/writing-a-linux-kernel-driver-for-an-unknown-usb-device/" rel="nofollow">http://matthias.vallentin.net/blog/2007/04/writing-a-linux-kernel-driver-for-an-unknown-usb-device/</a></p>
  
  <p>(It's way more confusing then I thought, I didn't realize he reverse engineered a Windows USB driver..im guessing it'd be impossible to figure out without snooping through a windows driver?)</p>