probe在什么时候被PCI子系统调用 另外PROBE的第二个参数是不是多余的??

发布于 2022-09-19 12:30:49 字数 1391 浏览 11 评论 0

static int __init demo_init_module (void)
{
    /    /* 注册硬件驱动程序 */
    if (!pci_register_driver(&demo_pci_driver)) {
        pci_unregister_driver(&demo_pci_driver);
                return -ENODEV;
    }

   /* ... */   
NEXT:
...
    return 0;
}

static int __init demo_probe(struct pci_dev *pci_dev, const struct
pci_device_id *pci_id)
{
    struct demo_card *card;

    /* 启动PCI设备 */
    if (pci_enable_device(pci_dev))
        return -EIO;
   。。。。  
    request_region(card->iobase, 64, card_names[pci_id->driver_data]);

    return 0;
}

请问PROBE函数是不是在我安装该驱动模块,进入到pci_register_driver函数里,PCI系统就会调用PROBE函数,如果PCI子系统能成功检测到设备并且条用了我的PROBE函数后,pci_register_driver才能返回到init_module 函数里,别且只有在PCI子系统能成功检测到设备并且条用了我的PROBE后,pci_register_driver返回的结果才是成功状态。

另外PROBE的第二个参数所提供的信息第一个参数不也包含吗??第二个参数是不是多余的??

我自己写的PCI驱动里面安装驱动时,给出出错提示no such device.,并且发现PROBE函数始终没被调用。

急急急

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花伊自在美 2022-09-26 12:30:49

我不知道probe什么时候调用,但应该能测试出来,只在分别在probe和pci_register_driver前后加上printk就可以了。

probe不被调用要检查一下你代码中的VendorID和DeviceID是否和你的硬件能对应上。不过我以前就算DeviceID设置不对,也没有出现no such device,这个是如何打印出来的?

在你怀里撒娇 2022-09-26 12:30:49

就是发现PROBE里的打印语句都没有执行,我的PROBE没有被调用

枕花眠 2022-09-26 12:30:49

原帖由 liuhuizhangyi 于 2008-6-19 08:34 发表
用insmod 加载模块时就调用了probe

是pci_register_driver时PCI子系统会扫描所有的设备,看有没有和这个新驱动指定的标识能匹配上的,如果有则调用probe,并不是insmod导致的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文