10695|10

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

linux内核级定时中断执行用户级回调函数 [复制链接]

各位大虾:
     最近有个问题困扰小弟很长时间了,请帮帮忙给点启示,在此多谢了!
     我在linux内核里实现了一个1ms的定时器驱动,每当定时器到期时会发生定时中断,我想在我的定时中断处理函数(驱动级)中实现回调用户层的一个函数(应用程序级),这个函数主要是进行一些简单的操作,比如(置标志位等)。我试过用ioctl来传函数指针的方法,可是不行。请问我该如何实现?通过什么样方法可以实现?

最新回复

请问版主后来怎么实现的,我现在也遇到类似的问题了,用户层open后,直接进去中断,open下面的东西都不执行了,我想在while死循环里做东西的,谢谢了。  详情 回复 发表于 2011-9-22 16:19
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
传递了函数指针,驱动也无法使用,因为是位于用户空间的函数。
你这样倒不如用ioctl传递共享空间,驱动在这个空间写个数据,应用层来判断,一旦获得这个数据,就执行一些操作(比如置标志位)。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
shuiyan :
       非常感谢你的指点!但是我的定时器是必须用到。还有用ioctl如何传递共享空间?斑竹的意思是我定时中断发生时,就往共享空间里写个数据,应用程序从共享空间读取这个值之后,就执行一些操作?这样如果定时器太快了比如我实现的是1us的定时,那么会不会把共享空间里的数据覆盖掉。(其实我觉得覆盖掉也没多大关系因为中断后每次的操作是一样的),还有这样效率是不是太低了?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
我也遇到过同样的问题:做一个项目时,驱动提供了这么一个回调接口,应用程序实现了回调函数,驱动运行在内核态,调用用户空间的函数时线程死掉了!提示的就是:Unable to handle kernel paging request at virtual address xxx
...
这个xxx地址就是应用程序里回调函数的地址。

我也很想知道这种内核、用户之间的回调应该怎么实现?这种回调可以肯定是有方式实现的,因为在同一个项目中有一个模块是可以这么用的。

请高手多多指点!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
aqiang_00:
  请问你的问题解决了吗?我现在还没有找到可行的方法来实现驱动层回调应用层的函数。我也觉得这种回调可以肯定是有方式实现的,只是我不知道而已。听说可以用aio来实现,但目前还不知道怎么用,正在研读。
  或许有其他的方法,请高手多多指点!!!
  在此,多谢了!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
你在2楼的说法基本正确。

有个想法你要修正一下:定时器是无法精确到1uS的,因为这是linux操作系统。在操作系统下,每个线程的时间片都是以mS来考虑的,你精确到1uS有何意义。

跑非实时操作系统,所有的事务处理都在mS级。希望实时性高的话,就得用实时操作系统,或者放弃系统直接裸奔。

再说你的驱动和应用交换数据,开一个缓存进行共享,不是只有一个字节,而是可以很多,比如1MB,那样有足够的空间给你的驱动写了。

linux下是否可以在驱动和应用间直接交换数据我不清楚,只是根据以前写linux驱动时的一些做法来建议的。或许有更直接的方法也说不定。可以到Unix/Linux版块讨论,或者到专门的linux网站去交流
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
我现在也遇到这样的问题了,不知道两位这个问题解决没有,请给我指导一下我的邮箱 mingjie_520@163.com
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
那种方法我最终是没有实现,我是通过异步IO通知来实现的,简单的说是用了kill_fasync函数,你可以研究一下异步IO那一块。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也卡在这里,有经验的过来说几句啊!谢谢了
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
我只需要毫秒级的!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 楼主 abin1982 的帖子

请问版主后来怎么实现的,我现在也遇到类似的问题了,用户层open后,直接进去中断,open下面的东西都不执行了,我想在while死循环里做东西的,谢谢了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表