免费注册 查看新帖 |

Chinaunix

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

[硬件及驱动] 驱动和应用程序交互问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-26 14:53 |只看该作者 |倒序浏览
项目这边有个要求,驱动需要通知应用程序,需要两种类型的通知事件。
通知①        驱动数据包已经准备好,应用程序可以读取数据了。
                应用程序使用epoll的方式轮询,没有数据则阻塞,有数据就调用指定的接口获取数据。
通知②        首先应用程序发送消息(ioctl方式)给驱动,让驱动启动搜索线程,
                应用程序(ioctl方式)不需等待搜索线程结束(可能时间比较长),直接异步返回。
                以上前提下,驱动程序采用什么样的通知方式,告诉应用程序搜索已经结束(成功或者失败)。
                如果成功,应用程序调用指定接口,获取对应数据。
               
通知①程序正常运行过程中,会一直用到。
通知②只有在特定状况下偶尔用到。
好像epoll不能区分两种POLLIN消息吧?
现在想不出使用什么好的内核机制,实现通知②。

暂且使用的方式是,驱动提供特定的ioctl将搜索的状态存放在指定的数据结构中,
如:
①搜索没有启动
②正常搜索中
③搜索结束且成功
④搜索结束且失败
然后应用程序主动调用ioctl,结合while(1)和sleep轮询获取驱动中搜索状态。

不知各位有什么好的建议。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2016-05-26 16:26 |只看该作者
回复 1# nashty

感觉 netlink 消息就可以吧,封装出来多种不同的消息,用户空间根据消息的内容,决定做不同的事情。





   

论坛徽章:
0
3 [报告]
发表于 2016-05-26 19:52 |只看该作者
回复 2# Godbach

我在内核看了下netlink。除了net相关的,Kobject_uevent外,其他驱动基本没人用额。
而且为了一个事件,改用netlink,上层改为socket,感觉有点。。。。
而且我也不是一个网络设备驱动额。

现在想采用的方案是,两个事件都用epoll(POLLIN),再追加一个IOCTL来区分是哪一个事件过来了。是否能评价一下这个方法?
   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2016-05-26 23:00 |只看该作者
回复 3# nashty

其实你只需要评估 netlink 是否适用你的场景即可。不要在意别的驱动是否用了。或者你要参考别的驱动,那么别的驱动用了什么通知机制呢。我的理解,你的这个做法,可能驱动里就没这么玩。所以选择什么做法,也没看合适的参考。

另外,你说到要用 EPOLL,那么你是不是也得有一个 fd?


   

论坛徽章:
0
5 [报告]
发表于 2016-05-28 16:58 |只看该作者
回复 4# Godbach

对,epoll肯定要fd。言外之意是?

   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2016-05-29 00:14 |只看该作者
回复 5# nashty
我的意思,你仍然需要创建一个 fd。那是什么类型的 fd 呢? 是不是也是 socket 的?


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP