I am sure this will prove an important question for many in the human society, I have pondered over it as well and am posting here as I expect that someone with experience with this will respond.
What are the things that a person must know in order to carry out driver development e.g USB, PCIe, Paralle Port, Serial Port, PS/2. Lets make the question more specific, what does one need to know in order to develop drivers for PCIe device apart from knowing the PCIe protocol.
I have read that one would need to know "Windows Internals (memory management, I/O manager, PnP Manager, interrupt handling, DMA)". It would be helpful if I can find some document that elaborates on this statement and explains in detail.
Of course anyone taking such a task would already know programming languages, C/C++ in my case for example.