Linux nvme 驱动中 core.c 和 pci.c 的区别
difference between core.c and pci.c in Linux nvme driver
我想了解 nvme 驱动程序在 Linux、
中的工作原理
所以我查看了nvme驱动源码here
让我困惑的是有两个源文件包含 "module_init()"
core.c
module_init(nvme_core_init);
和
pci.c
module_init(nvme_init);
我知道module_init()函数是驱动的入口
但是nvme驱动怎么会有两个条目?
module_init()
是 模块 的入口点,使用 abstraction 我们将模块分层以在逻辑上分离功能,提高代码重用等。 ..
pci.c
提供 PCI / PCIe interface/abstraction 层,用于通过 PCI 总线使用 NVMe 设备 - 它与管理有形设备有更多关系:
core.c
提供 core 驱动程序,用于一般处理连接到系统的 NVMe 设备(它不关心 how).该模块更关心提供标准化的块设备访问等......
这是整个内核的一个常见习惯用法,这样做是为了如果 NVMe 设备可以通过另一条总线访问,那么 core.c
将在没有/最小更改的情况下被重用,并且 new_bus.c
将写入两者之间的接口。
如果您在 PCIe 上使用 NVMe,那么以下链条有望帮助理解:
pci.c
实施 nvme_pci_reg_read32()
pci.c
在nvme_ctrl_ops
结构中注册nvme_pci_reg_read32()
,命名为nvme_pci_ctrl_ops
core.c
实现了 nvme_init_ctrl()
,它是用指向这些结构之一的指针调用的
core.c
keeps a reference到结构
core.c
实现 nvme_init_identify()
,这需要 lower-level - pci.c
的帮助
core.c
通过 reference retained above 调用 pci.c
的 nvme_pci_reg_read32()
如果我们要开发一种可以支持 NVMe 设备的新总线,那么我们可以将 pci.c
换成 new_bus.c
而无需更改 core.c
(如上所述) .
还值得检查 Kconfig
文件,因为它们可以暗示这样的事情 - 尽管有一定数量的心理体操可以通过 [=39= 将源文件与菜单选项联系起来]s.
我想了解 nvme 驱动程序在 Linux、
中的工作原理所以我查看了nvme驱动源码here
让我困惑的是有两个源文件包含 "module_init()"
core.c
module_init(nvme_core_init);
和 pci.c
module_init(nvme_init);
我知道module_init()函数是驱动的入口
但是nvme驱动怎么会有两个条目?
module_init()
是 模块 的入口点,使用 abstraction 我们将模块分层以在逻辑上分离功能,提高代码重用等。 ..
pci.c
提供 PCI / PCIe interface/abstraction 层,用于通过 PCI 总线使用 NVMe 设备 - 它与管理有形设备有更多关系:core.c
提供 core 驱动程序,用于一般处理连接到系统的 NVMe 设备(它不关心 how).该模块更关心提供标准化的块设备访问等......
这是整个内核的一个常见习惯用法,这样做是为了如果 NVMe 设备可以通过另一条总线访问,那么 core.c
将在没有/最小更改的情况下被重用,并且 new_bus.c
将写入两者之间的接口。
如果您在 PCIe 上使用 NVMe,那么以下链条有望帮助理解:
pci.c
实施nvme_pci_reg_read32()
pci.c
在nvme_ctrl_ops
结构中注册nvme_pci_reg_read32()
,命名为nvme_pci_ctrl_ops
core.c
实现了nvme_init_ctrl()
,它是用指向这些结构之一的指针调用的core.c
keeps a reference到结构core.c
实现nvme_init_identify()
,这需要 lower-level -pci.c
的帮助
core.c
通过 reference retained above 调用
pci.c
的 nvme_pci_reg_read32()
如果我们要开发一种可以支持 NVMe 设备的新总线,那么我们可以将 pci.c
换成 new_bus.c
而无需更改 core.c
(如上所述) .
还值得检查 Kconfig
文件,因为它们可以暗示这样的事情 - 尽管有一定数量的心理体操可以通过 [=39= 将源文件与菜单选项联系起来]s.