当前位置: 技术问答>linux和unix
Android驱动问题
来源: 互联网 发布时间:2016-10-20
本文导语: 小弟今天看Android的GPS驱动,对驱动不太了解 看到在驱动的probe函数中有这样的代码 cdev_init(&devobj->chdev, &fops); devobj->chdev.owner = THIS_MODULE; err = cdev_add(&devobj->chdev, devobj->devno, 1); 问题就在cdev_init和cdev_a...
小弟今天看Android的GPS驱动,对驱动不太了解
看到在驱动的probe函数中有这样的代码
问题就在cdev_init和cdev_add上
cdev_add不是在system中add一个设备吗?为什么出现在probe中?
按我现在想的是不在在platform_device_register的时候注册嘛?
再说driver在和device匹配后才调用probe,也就是说在probe函数之前就已经注册过了这个device了啊?
不理解,大侠指点!谢谢!
看到在驱动的probe函数中有这样的代码
cdev_init(&devobj->chdev, &fops);
devobj->chdev.owner = THIS_MODULE;
err = cdev_add(&devobj->chdev, devobj->devno, 1);
问题就在cdev_init和cdev_add上
cdev_add不是在system中add一个设备吗?为什么出现在probe中?
按我现在想的是不在在platform_device_register的时候注册嘛?
再说driver在和device匹配后才调用probe,也就是说在probe函数之前就已经注册过了这个device了啊?
不理解,大侠指点!谢谢!
|
不是很清楚你的意思,根据Linux设备模型,当挂总线上的device和总线上的driver match成功后,会调用driver的probe()函数,其实在probe()调用这个创建一个字符设备文件,也很常见。很多PCI设备都是在probe()的时候创建一个字符设备文件,应用程序再跟你这个字符驱动交互处理,去读取PCI配置空间,IO内存空间的数据。
|
只要是字符设备,不管封成platform也好,还是什么也好,都是通过cdev_add最终注册为一个字符设备。
linux设备驱动模型和字符设备类型的概念不要混淆。
linux设备驱动模型和字符设备类型的概念不要混淆。