Very few will ever need to write a PCI driver from scratch, and even when apparently doing so, the kernel API parts can (and should) be copied from similar, existing drivers. Unfortunately, reading the code of a PCI/PCIe driver is nearly impossible without understanding the twisted game it's playing with its hardware. This talk will attempt to outline the interaction between the peripheral and its driver and show the established components of the latter.
The talk's first half will be dedicated to understand PCI hardware principles, and the second to kernel coding. The talk is PCI Express oriented, but this has almost no significance as far as the kernel driver is concerned.