免费注册 查看新帖 |

Chinaunix

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

[Linux资讯] Linux信号传送机制,内核层发送信号至用户层。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-07 14:09 |只看该作者 |倒序浏览
要求为:ARM外部GPIO接收下降沿硬件中断,在中断回调函数中发送信号SIGIO给用户层,用户层异步接收到信号后在自身回调函数中做出一部分简单处理。

内核层可通过kill_fasync异步发送,kill_fasync发送方法网上资料很多,借用即可。

用户层通过signal(MYSIG, sig_handler)绑定信号和回调函数
共一下几个步骤:
        signal(MYSIG, sig_handler);
        fcntl(fd, F_SETOWN, getpid());
        f_flags = fcntl(fd, F_GETFL);
        fcntl(fd, F_SETFL,  f_flags | O_NONBLOCK | FASYNC);
        fcntl(fd, F_SETSIG, MYSIG);//如果要发送实时信号(MYSIG可自行定义),则需要通过fcntl设置
现测试后,发现信号传送正常。如果要周期性的接收信号,比如4mS一个GPIO中断,就需要对应时间里内核发送信号(相同信号)至用户层,用户层及时接收到相应信号。

测试遇到的问题是:周期性的信号交互并不是每次都能实时的响应,会出现中断事件未响应的现象。即GPIO的中断事件并不能在用户层实时响应(4mS的中断并不是很快),对于这种现象,不知道大家有没有好的解决办法,或者能够指出我所犯的错误。

论坛徽章:
0
2 [报告]
发表于 2013-06-18 21:10 |只看该作者
同志们给点建议呀!

论坛徽章:
1
处女座
日期:2014-01-21 13:20:51
3 [报告]
发表于 2013-06-19 07:43 |只看该作者
你这个主题,以俺们的级别,真心看不懂

论坛徽章:
0
4 [报告]
发表于 2013-06-19 09:39 |只看该作者
回复 3# webdna

可能也没表达得很清楚,抱歉抱歉。要求很简单:外部4mS一个硬件中断(GPIO),如何实时传入Linux用户层,并快速处理,对这个中断事件的处理主要是在用户层的操作(有一些消息分发,进程管理之类的工作需要外部中断来触发)。


   

论坛徽章:
0
5 [报告]
发表于 2013-06-19 10:12 |只看该作者
发错地方了,这边都只懂敲命令,不懂源代码的,
你还是发到Linux核心编程去

论坛徽章:
0
6 [报告]
发表于 2013-06-19 10:45 |只看该作者
回复 5# pix77
同志们谦虚了!谢谢!

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP