我想知道nvme驱动程序是如何在Linux中工作的,
因此,我查看nvme驱动程序源代码这里。
令我困惑的是,有两个源文件包含"module_init()"。
core.c
module_init(nvme_core_init);
和太平洋C.
module_init(nvme_init);
我知道module_init()函数是驱动程序的入口
,但是为什么在nvme驱动程序中有两个条目?
发布于 2018-03-17 15:06:34
module_init()
是模块的入口点,在抽象化中,我们对模块进行分层,以便在逻辑上分离功能,提高代码重用等.
pci.c
为在PCI总线上使用NVMe设备提供了PCI / PCIe接口/抽象层??它与管理有形设备( )有更多的关系。
core.c
为一般地处理连接到系统的NVMe设备提供了核心驱动程序(它不在乎如何处理)。这个模块更关心的是提供标准化的块设备访问,等等。
这是整个内核中的一个常见成语,如果一个NVMe设备可以通过另一个总线访问,那么core.c
将在没有/最小更改的情况下被重用,并将new_bus.c
写到两者之间的接口中。
如果您使用的是NVMe之上的PCIe,那么希望下面的链能够帮助您理解:
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
保持引用core.c
实现了nvme_init_identify()
,这需要底层pci.c
的帮助。core.c
通过上述参考资料调用pci.c
的nvme_pci_reg_read32()
如果我们要开发一种支持NVMe设备的新总线,那么我们可以将pci.c
替换为new_bus.c
,而不对core.c
进行任何更改(如前所述)。
同样值得查看的是Kconfig
文件,因为它们可以提示类似的事情--尽管有一定的脑力练习可以通过Makefile
将源文件绑定到菜单选项。
https://stackoverflow.com/questions/49337859
复制相似问题