具有 "module_pci_driver" 的 pci 设备驱动程序与具有“__init()”但在 Linux 中没有 "module_pci_driver()" 的 pci 驱动程序之间的区别
difference between a pci device driver with "module_pci_driver" and a pci driver with "__init()" but without "module_pci_driver()" in Linux
我在 pci 设备驱动程序中看到过这一行
module_pci_driver(cp_driver);
但在其他 pci 设备驱动程序中是这样的
module_init(rtl8139_init_module);
在不同驱动程序的驱动程序 .c
文件末尾找到的两行
我所知道的是:我可以使用 __init
创建一个 pci 设备驱动程序,但我也可以创建一个没有 __init
的 pci 设备驱动程序
即
[Realtek Ethernet 在 Linux source
中有两个驱动程序
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
。使用了什么命令
module_pci_driver()
是一个帮助程序,适用于在模块初始化和退出时没有做任何特殊操作的驱动程序(即,其初始化和退出功能只是 register/unregister 的模块)。
它为您生成初始化和退出函数,减少了一些样板文件。
在这种特定情况下,8139too 驱动程序除了注册驱动程序(在这种情况下,记录驱动程序名称)之外可能还会做一些事情,所以没有使用 module_pci_driver()
为匹配 ID table 且尚未拥有的现有或新设备调用 probe
函数(有关详细信息,请参阅 How To Write Linux PCI Drivers)。
它 returns 一个值,指示驱动程序是否将获得设备的所有权(0 或错误代码)。
我在 pci 设备驱动程序中看到过这一行
module_pci_driver(cp_driver);
但在其他 pci 设备驱动程序中是这样的
module_init(rtl8139_init_module);
在不同驱动程序的驱动程序 .c
文件末尾找到的两行
我所知道的是:我可以使用 __init
创建一个 pci 设备驱动程序,但我也可以创建一个没有 __init
即 [Realtek Ethernet 在 Linux source
中有两个驱动程序1) 139cp.c(没有__init
)
2) 8139too.c 与 __init
].
我认为两者之间的主要区别很简单,如果我必须在使用 insmod
命令加载驱动程序模块后立即使用 pci 设备驱动程序,那么我使用设备驱动程序的实现__init
.
问题
相反,如果我只想加载pci设备驱动程序而不使用它,那么我是否应该创建一个带module_pci_driver()
的pci设备驱动程序(所以不需要添加__init
)?它有什么作用(module_pci_driver)?它与 __init
我想知道我可能有一个误解,请任何人澄清。当我使用 insmod
命令加载驱动程序时,两种类型驱动程序的 probe
功能是否也会 运行 ?什么时候?如果是,那有什么区别,因为大多数设备配置都是在问题功能中完成的
总结一下
当初始化发生在带有 module_pci_driver(cp_driver);
的驱动程序中时,因为它们没有实现 __init
。使用了什么命令
module_pci_driver()
是一个帮助程序,适用于在模块初始化和退出时没有做任何特殊操作的驱动程序(即,其初始化和退出功能只是 register/unregister 的模块)。
它为您生成初始化和退出函数,减少了一些样板文件。
在这种特定情况下,8139too 驱动程序除了注册驱动程序(在这种情况下,记录驱动程序名称)之外可能还会做一些事情,所以没有使用 module_pci_driver()
为匹配 ID table 且尚未拥有的现有或新设备调用 probe
函数(有关详细信息,请参阅 How To Write Linux PCI Drivers)。
它 returns 一个值,指示驱动程序是否将获得设备的所有权(0 或错误代码)。