免费注册 查看新帖 |

Chinaunix

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

platform_driver_register(),platform_device_register()区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-03 10:42 |只看该作者 |倒序浏览
linux内核设备驱动分为字符设备,快设备和网络设备这三种,没错吧?在编写驱动的时候用register_chrdev(),register_blkdev(),register_netdev()来注册驱动,但是我看2.6的内核代码则包含了platform_driver_register(),platform_device_register()这样的函数来注册,有什么区别或者特别之处吗?请问在linux-2.6的内核驱动开发中,platform_driver_register(),platform_device_register()的顺序是先要注册设备,然后才能注册驱动吗?顺序可以颠倒吗?
希望高人费点时间!

论坛徽章:
0
2 [报告]
发表于 2008-11-03 10:58 |只看该作者

回复 #1 againyuan 的帖子

我用的是EBD的9260的板子,驱动中有adc_init()函数中:
        adc_hw_init(adc);
       
        platform_driver_register(&adc_driver);
        printk(KERN_INFO "Analog-to-Digital Converter (irq %d)\n", adc->irq);
       
        adc_add_channel_device();
在platform_driver_register已经加入了cdev_add,然后用class_device_create创建了设备文件.
但是后面的adc_add_channel_device函数实现:
        for (i=0; i<ADC_MAX_CHANNEL; i++){
                adc_channel_device.name = DRV_NAME;
                adc_channel_device.id   = i;
                platform_device_register(&adc_channel_device);
        }
        return 0;
相当于又加入了platform_device_register,这样设计是不是这个程序本身有问题呀?

[ 本帖最后由 againyuan 于 2008-11-3 14:01 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-11-04 11:25 |只看该作者
原帖由 againyuan 于 2008-11-3 10:42 发表
linux内核设备驱动分为字符设备,快设备和网络设备这三种,没错吧?在编写驱动的时候用register_chrdev(),register_blkdev(),register_netdev()来注册驱动,但是我看2.6的内核代码则包含了platform_driver_re ...


设备与驱动的两种绑定方式:在设备注册时进行绑定及在驱动注册时进行绑定。 以一个USB设备为例,有两种情形:
(1)先插上USB设备并挂到总线中,然后在安装USB驱动程序过程中从总线上遍历各个设备,看驱动程序是否与其相匹配,如果匹配就将两者邦定。这就是platform_driver_register()
(2)先安装USB驱动程序,然后当有USB设备插入时,那么就遍历总线上的各个驱动,看两者是否匹配,如果匹配就将其绑定。这就是platform_device_register()函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP