从 Linux 内核 3.0 开始,pci 探测是自动的:pci_register_driver(&pci_driver);
Linux 内核 2.6 及更早版本,程序员必须创建一个字符设备,遍历 PCI 列表,选择合适的 PCI 并使用它进行工作。你能告诉我这个过程的步骤吗,为什么在使用 PCI 驱动程序之前需要初始化字符设备以及为什么不再需要注册字符驱动程序。
最佳答案
我认为您指的是 linux 2.4 或更早版本。当前具有总线、设备和驱动程序的内核设备模型一直是 2.6 系列的一部分。
你的问题到底是什么?
PCI 设备列表在启动时生成。然后在注册一个驱动时,使用pci_driver
结构体id_table
字段来匹配
与总线上的设备。然后使用指向匹配的设备结构的指针调用 pci_driver 探测函数。
- pci_driver 已注册
- 对于总线上存在的每个设备,设备的 id 元素(产品 id 和供应商 id)与 pci_driver 提供的 id_table 中的 id 元素进行比较
- 如果匹配,则调用 pci_driver 探测函数,在此探测函数中,您可以注册一个字符设备或 block 设备等。
所以它与 2.4 没有太大区别,除了所有探测、匹配驱动程序和设备等...都由“设备核心”而不是 pci 驱动程序处理。
关于linux - 旧式 PCI 探测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153190/