免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4861 | 回复: 4
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-17 20:51 |只看该作者 |倒序浏览
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函数始终没被调用。

急急急

论坛徽章:
0
2 [报告]
发表于 2008-06-18 03:16 |只看该作者
我不知道probe什么时候调用,但应该能测试出来,只在分别在probe和pci_register_driver前后加上printk就可以了。

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

论坛徽章:
0
3 [报告]
发表于 2008-06-18 10:33 |只看该作者
就是发现PROBE里的打印语句都没有执行,我的PROBE没有被调用
liuhuizhangyi 该用户已被删除
4 [报告]
发表于 2008-06-19 08:34 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2008-06-23 11:01 |只看该作者
原帖由 liuhuizhangyi 于 2008-6-19 08:34 发表
用insmod 加载模块时就调用了probe


是pci_register_driver时PCI子系统会扫描所有的设备,看有没有和这个新驱动指定的标识能匹配上的,如果有则调用probe,并不是insmod导致的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP