打印
[嵌入式linux]

linux中断驱动的编写疑问

[复制链接]
2311|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiger84|  楼主 | 2010-4-2 09:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在写一个linux下面与中断处理相关的程序。

由于是从单片机,arm转过来的,很多思维还是逃不出以前的想法。

比如单片机时的中断处理:
void irq  interrupt(void)
{
         data_flag = 1;
         rxbuf[data_len++] = data;
}

在主循环中
while(1)
{
        if(1 == data_flag)
        {
                  data_flag = 0;
                  data_process();
         }
}

如果是在linux下面的驱动呢?

linux中断方面的驱动我写过一些,基本上都是采用socket/poll的方式或者send_sig_info之类的传递信号给应用层的方式,除了这2种方式之外,其他的方式还有哪些?
这些方式中哪种的实时性比较好?占用内核时间短?效率比较高?
请高人赐教。

相关帖子

沙发
xinzha| | 2010-4-3 09:00 | 只看该作者
可以参考一些usb接口的v4l2驱动看一下,应用程序始终会给内核发一个取数据的请求,而内核驱动在处理好中断传输之后就将回答的结构填好并解阻塞这个取数据请求。
应用与内核驱动之间大量数据交互有多种种方式,我们用过以下三种,一种是R/W方式,一种是memmap,一种是userpoint,R/W模式会产生用户空间和内核空间之间的数据拷贝,消耗比较大。而memmap和userpoint方式则是采用了映射的方式,区别只是一个从内核映射到用户,一个从用户映射到内核。

使用特权

评论回复
板凳
tiger84|  楼主 | 2010-4-3 10:00 | 只看该作者
说到俺心里去了,打算先用R/W,实现功能后再用memmap。3Q。

使用特权

评论回复
地板
7456| | 2010-4-8 08:15 | 只看该作者
可以使用传递函数的形式,像timer一样的用法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:专注ARM及linux性能优化

101

主题

862

帖子

0

粉丝