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

用户名

我想学习nvme驱动程序在Linux中的工作方式,

所以我在这里研究nvme驱动程序源代码

令我感到困惑的是,有两个包含“ module_init()”的源文件

核心

module_init(nvme_core_init);

和pci.c

module_init(nvme_init);

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

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

阿蒂

module_init()模块的入口点,通过抽象我们对模块进行分层,以在逻辑上分离功能,提高代码重用性等。

这是整个内核中的一个常见习语,这样做的目的是,如果NVMe设备可以通过另一条总线进行访问,则core.c可以在不进行任何更改的情况下对其进行重用,new_bus.c并将其写入到两者之间的接口。


如果您在PCIe上使用NVMe,那么以下链接有望使事情变得有意义:

  1. pci.c 实施 nvme_pci_reg_read32()
  2. pci.cnvme_pci_reg_read32()nvme_ctrl_ops结构中注册,名为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.cnew_bus.c任何更改的情况下进行交换core.c(如上所述)。


还值得检查一下Kconfig文件,因为它们可以提示类似这样的内容-尽管有一定程度的精神体操可以通过Makefiles将源文件绑定到菜单选项

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Linux中,“ python -c'print'”和“(python -c'print'; cat)”之间有什么区别

C中<linux / crc32.h>和<zlib.h>的crc32()实现之间的区别

I2C设备linux驱动程序

LINUX C中stdout和STDOUT_FILENO之间的区别

Linux中的固件和驱动程序

Linux驱动程序开发:PCI和PCIe驱动程序之间的区别?

Linux平台驱动程序和普通设备驱动程序有什么区别?

Windows和Linux下开发的C ++程序之间的区别

C ++中func()和(* this).func()之间的区别

C中char []和char *之间的区别

C ++中double和DOUBLE之间的区别

C ++中void(*)()和void(&)()之间的区别

C中的#pragma和_Pragma()之间的区别

.NET Core中的Mongo C#驱动程序和ObjectID JSON字符串格式

Linux I2C驱动程序移植问题

Datastax Cassandra C ++驱动程序中核心连接和I / O线程之间的区别

C ++中的缩小和截断之间的区别?

Dell C1760NW linux驱动程序

驱动程序和提供程序之间的区别

如何找到Mac硬件上的macOS和linux wifi驱动程序之间的区别?

C linux中sizeof和strlen之间的区别

Linux环境中$和#之间的区别

Linux-图形驱动程序和Mesa之间的关系

内核中的图形驱动程序和Xorg的图形驱动程序之间有什么区别?

Java和C中的数组之间的区别

C#中[,]和[] []之间的区别

Linux 加载 i2c 驱动程序

C 中“%c”和“%s”之间的区别

在 Linux 中带有“module_pci_driver”的 pci 设备驱动程序和带有“__init()”但没有“module_pci_driver()”的 pci 驱动程序之间的区别