【问题标题】:difference between a pci device driver with "module_pci_driver" and a pci driver with "__init()" but without "module_pci_driver()" in LinuxLinux 中带有“module_pci_driver”的 pci 设备驱动程序和带有“__init()”但没有“module_pci_driver()”的 pci 驱动程序之间的区别
【发布时间】:2021-01-11 10:27:46
【问题描述】:

我在 pci 设备驱动程序中看到了这一行

   module_pci_driver(cp_driver);

但在其他 pci 设备驱动程序中

     module_init(rtl8139_init_module);

在不同驱动程序的驱动程序.c 文件末尾找到的两行

我知道的是:我可以用__init 创建一个pci 设备驱动程序,但我也可以不用__init 创建一个pci 设备驱动程序

即 [Realtek 以太网在 Linux 源码中有两个驱动

1) 139cp.c(没有__init

2) 8139too.c__init]。

我认为两者之间的主要区别只是,如果我必须在使用insmod 命令加载驱动程序模块后立即使用 pci 设备驱动程序,那么我使用带有__init 的设备驱动程序的实现。

问题 相反,如果我只是想加载pci设备驱动而不使用它,那我应该用module_pci_driver()创建一个pci设备驱动(所以不需要添加__init)?它有什么作用(module_pci_driver)?它与带有__init的pci驱动程序有何不同@

我想知道我可能有误解,请任何人澄清。当我使用insmod 命令加载驱动程序时,这两种驱动程序的probe 功能是否也会运行?什么时候?如果是,那么有什么区别,因为大多数设备配置都是在问题功能中完成的

总结一下 当使用 module_pci_driver(cp_driver); 在驱动程序中进行初始化时,因为它们没有实现__init。用了什么命令

【问题讨论】:

    标签: linux initialization device-driver pci


    【解决方案1】:

    module_pci_driver() 是一个帮助程序,适用于在其模块初始化和退出中不做任何特殊操作的驱动程序(即,其初始化和退出函数只是注册/取消注册的模块)。

    它为您生成初始化和退出函数,减少了一些样板。

    在这种特定情况下,8139too 驱动程序除了注册驱动程序(在这种情况下,记录驱动程序名称)之外可能还会做一些事情,所以不使用module_pci_driver()

    probe 函数对与 ID 表匹配且尚未拥有的现有或新设备调用(有关详细信息,请参阅How To Write Linux PCI Drivers)。 它返回一个值,指示驱动程序是否将取得设备的所有权(0 或错误代码)。

    【讨论】:

    • 一般来说,在linux内核模块或设备驱动程序中,0总是指定为true,1总是指定为false吗?请澄清
    • 一般情况下,0为成功,负值为错误码(对于返回错误码的函数)
    • 您发布了非常棒的 pci 驱动程序文档作为链接。特别是网络以太网驱动程序是否有任何类似类型的文档。来自 kernel.org 的相同 html 格式,其中包含有关最新以太网驱动程序 api 的更多详细信息。我发现的只是kernel.org/doc/htmldocs/networking/API-struct-net-device.html 上的简短描述
    • 那里还有更多,例如thisthis(来自The Linux Networking Documentation)。
    • 如果我想要 2 在用户空间应用程序中实现 like module_pci_driver() 的东西。有可能吗?如果不是,那么如何在内核中实现它。我可以在我的低级编程中实现它并为驱动程序提供能力,以便他们可以将它们的 init 或 module_pci_driver 之类的函数导出到我的低级内核模块或固件。我假设,函数assign2 module_pci_driver(Function) 是从其他地方调用的(可能来自低级内核堆栈/可能来自固件​​)。请澄清。我是新的 2 内核开发。也是 linux 源代码中module_pci_driver 的实现和#define
    猜你喜欢
    • 2014-05-18
    • 2012-08-22
    • 2016-06-24
    • 2012-10-06
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多