首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux nvme驱动程序中core.c和pci.c的区别

Linux nvme驱动程序中core.c和pci.c的区别
EN

Stack Overflow用户
提问于 2018-03-17 14:12:11
回答 1查看 809关注 0票数 3

我想知道nvme驱动程序是如何在Linux中工作的,

因此,我查看nvme驱动程序源代码这里

令我困惑的是,有两个源文件包含"module_init()"

core.c

代码语言:javascript
运行
复制
module_init(nvme_core_init);

和太平洋C.

代码语言:javascript
运行
复制
module_init(nvme_init);

我知道module_init()函数是驱动程序的入口

,但是为什么在nvme驱动程序中有两个条目?

EN

Stack Overflow用户

回答已采纳

发布于 2018-03-17 15:06:34

module_init()是模块的入口点,在抽象化中,我们对模块进行分层,以便在逻辑上分离功能,提高代码重用等.

  • core.c为一般地处理连接到系统的NVMe设备提供了核心驱动程序(它不在乎如何处理)。这个模块更关心的是提供标准化的块设备访问,等等。

这是整个内核中的一个常见成语,如果一个NVMe设备可以通过另一个总线访问,那么core.c将在没有/最小更改的情况下被重用,并将new_bus.c写到两者之间的接口中。

如果您使用的是NVMe之上的PCIe,那么希望下面的链能够帮助您理解:

  1. pci.c实现nvme_pci_reg_read32()
  2. pci.cnvme_ctrl_ops结构中注册nvme_pci_reg_read32(),名为nvme_pci_ctrl_ops
  3. core.c实现了nvme_init_ctrl(),它使用指向以下结构之一的指针调用
  4. 结构的core.c 保持引用
  5. core.c实现了nvme_init_identify(),这需要底层pci.c的帮助。
  6. core.c通过上述参考资料调用pci.cnvme_pci_reg_read32()

如果我们要开发一种支持NVMe设备的新总线,那么我们可以将pci.c替换为new_bus.c,而不对core.c进行任何更改(如前所述)。

同样值得查看的是Kconfig文件,因为它们可以提示类似的事情--尽管有一定的脑力练习可以通过Makefile将源文件绑定到菜单选项。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49337859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档