linux - 旧式 PCI 探测

标签 linux driver pci

从 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 驱动程序处理。

详细解释见this PDFthis page

关于linux - 旧式 PCI 探测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153190/

相关文章:

python - 使用 Python 将十六进制文本转换为阿拉伯文本

c - 如何在 Linux 中从 C 打印毫秒和纳秒精度的时间差?

linux - 如何在 linux 内核模块之间共享缓冲区

windows - 文件系统过滤器驱动程序 - 拒绝文件创建

linux - pci_lookup_name 怎么来的?

linux - 如何在 NVidia 桌面上创建 EGL 上下文

c++ - 我如何在 linux C/C++ 中设置蓝牙引脚号

linux - 如何编译在 Linux Ubuntu 中使用的驱动程序/内核模块?

x86 - PCI 和 PCIe 是否允许更改 BAR 值以将设备寄存器重新映射到新地址?

azure - 扫描期间发现 PCI 漏洞。如何防止泄露 HTTP 响应 header 中发送的 Web 服务器软件版本。端口8172