Summary
In this chapter, we have dealt with PCI specification buses and implementations, as well as its support in the Linux kernel. We went through the enumeration process and how the Linux kernel allows different address spaces to be accessed. We then followed a detailed step-by-step guide on how to write a PCI device driver, from the device table population to the module's exit
method. We took a deeper look at the interrupt mechanisms and their underlying behaviors as well as the differences between them. Now you are able to write a PCI device driver on your own, and you are familiar with their enumeration process. Moreover, you understand their interrupt mechanisms and are aware of the differences between them (MSI or not). Finally, you learned how to access their respective memory regions.
In the next chapter, we will deal with the NVMEM framework, which helps to develop drivers for non-volatile storage devices such as EEPROM. This will serve to end the complexity that...