probe在什么时候被PCI子系统调用 另外PROBE的第二个参数是不是多余的??
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我不知道probe什么时候调用,但应该能测试出来,只在分别在probe和pci_register_driver前后加上printk就可以了。
probe不被调用要检查一下你代码中的VendorID和DeviceID是否和你的硬件能对应上。不过我以前就算DeviceID设置不对,也没有出现no such device,这个是如何打印出来的?
就是发现PROBE里的打印语句都没有执行,我的PROBE没有被调用
是pci_register_driver时PCI子系统会扫描所有的设备,看有没有和这个新驱动指定的标识能匹配上的,如果有则调用probe,并不是insmod导致的。