Linux kernel 什么';pci_启用_设备和pcim_启用_设备之间的区别是什么?

Linux kernel 什么';pci_启用_设备和pcim_启用_设备之间的区别是什么?,linux-kernel,linux-device-driver,pci,pci-e,Linux Kernel,Linux Device Driver,Pci,Pci E,让我们解释一下: int pci_enable_device(struct pci_dev *dev); 然而,还有: int pcim_enable_device (struct pci_dev * pdev); 但是除了声明它是一个“符号”,它没有解释 那么这两者之间有什么区别呢 “管理”是什么意思 我应该用哪一个 pcim\u enable\u device()是pci\u enable\u device()的托管版本。这意味着如果调用pci\u enable\u device(),最

让我们解释一下:

int pci_enable_device(struct pci_dev *dev);
然而,还有:

int pcim_enable_device (struct pci_dev * pdev);
但是除了声明它是一个“符号”,它没有解释

  • 那么这两者之间有什么区别呢
  • “管理”是什么意思
  • 我应该用哪一个
  • pcim\u enable\u device()
    pci\u enable\u device()
    的托管版本。这意味着如果调用
    pci\u enable\u device()
    ,最后还需要调用
    pci\u disable\u device()
    。在
    pcim\u enable\u device()
    的情况下,托管框架将负责为您禁用操作

    在新的内核版本中,建议使用此类托管函数,以避免驱动程序代码中的错误处理。请参阅以获取有关设备资源管理(或devres)API的线索。此特定功能(
    pcim\u启用\u设备
    )是在中引入的。如果您想阅读更多关于devres框架的信息,请参阅


    您提到的那本书(“Linux设备驱动程序,第3版”)没有对托管函数进行任何解释,因为它是在这些函数实现之前编写的。

    您是否有关于此主题的更新/新书的推荐书?嗯,LDD4即将出版:。但我现在不记得有任何描述托管函数的书了。实际上您不需要,只需查看内核源代码中的
    文档/driver model/devres.txt
    文件即可。最后归结为下一步:您使用托管函数而不是非托管函数,并且最终不调用任何资源释放函数。一旦您的驱动程序即将退出/卸载,devres framework将自动为您调用无资源函数。请注意,
    pcim\u enable\u device()
    发布时所做的不仅仅是
    pci\u disable\u device()