Prerequisites for a driver developer

If somebody wants to build a solid house, he needs to have a solid foundation. That's why, if somebody wants to become a good driver developer, he needs to be familiar with some fundamental computer science terms. At minimum, he needs to know the basics about operating systems, computer architecture and computer networks.

The easiest way to become familiar with these concepts is to take undergrad computer science courses on operating systems and computer networks. In case somebody is unable to do this or if he wants to refresh his knowledge, I can point out to a few links from universities that offer online recorded relevant courses:

1)Operating systems from the University of Notre Dame: http://www.cse.nd.edu/~surendar/teach/spr06/cse30341/lecture.shtml
2)Computer networks from Carnegie Mellon University: http://www.cs.cmu.edu/~srini/15-441/S05/
Of course, there are many relevant links in the internet, however these are the only 2 links that I know of, which offer the videos of the lectures online for free (please feel free to write down more, if you know).

Finally, I would like to mention that the University of Washington offers a list of useful graduate courses (e.g. computer architecture, databases, etc), whose lectures can be viewed online: http://www.cs.washington.edu/education/dl/course_index.html

For the rest of the blog, I'll consider that the basic terms as known (e.g. What is a driver? What is an I/O port? etc) and that I won't have to explain them.