当前位置:  技术问答>linux和unix

alsa-driver与alsa-lib之间的关系

    来源: 互联网  发布时间:2016-05-11

    本文导语:  alsa-driver与alsa-lib之间的关系 alsa声卡驱动体系中的alsa-driver与alsa-lib是整个alsa音频驱动的中间层,     alsa  app --------------------     alsa lib --------------------     alsa driver --------------------    alsa device driver   ...

alsa-driver与alsa-lib之间的关系
alsa声卡驱动体系中的alsa-driver与alsa-lib是整个alsa音频驱动的中间层,
    alsa  app
--------------------
    alsa lib
--------------------
    alsa driver
--------------------
   alsa device driver  

上面的alsa app只需要集中注意力到应用逻辑,
下层的alsa device driver也只需要关注如何实现alsa driver要求的接口.

现在我有个问题想请教各位牛人,在lib与driver之间一定会有接口,
但我跟踪了alsa-lib里面的pcm.c里面的snd_pcm_opensnd_pcm_hw_params_any
snd_pcm_writei等一系统列(用户放音接口)用户接口,但并没有发现与driver层的接口函数。

在网上曾经看到过一些关于这方面的资料,driver为lib提供的接口就是在driver层pcm_native.c里面的文件接口函数
struct file_operations snd_pcm_f_ops[2] = {
        {
                .owner =                THIS_MODULE,
                .write =                snd_pcm_write,
                .writev =                snd_pcm_writev,
                .open =                        snd_pcm_playback_open,
                .release =                snd_pcm_release,
                .poll =                        snd_pcm_playback_poll,
                .unlocked_ioctl =        snd_pcm_playback_ioctl,
                .compat_ioctl =         snd_pcm_ioctl_compat,
                .mmap =                        snd_pcm_mmap,
                .fasync =                snd_pcm_fasync,
        },
        {
                .owner =                THIS_MODULE,
                .read =                        snd_pcm_read,
                .readv =                snd_pcm_readv,
                .open =                        snd_pcm_capture_open,
                .release =                snd_pcm_release,
                .poll =                        snd_pcm_capture_poll,
                .unlocked_ioctl =        snd_pcm_capture_ioctl,
                .compat_ioctl =         snd_pcm_ioctl_compat,
                .mmap =                        snd_pcm_mmap,
                .fasync =                snd_pcm_fasync,
        }
};
而在lib中是只有Plugin:hw(我自认为是lib中的pcm_hw.c文件)和alsa driver
打交道,其他Plugin(其它的pcm_xxx.c)只需要和Plugin:hw打交道即可.

言下之意就是说,我上面说的pcm.c中的用户接口函数,就是调用lib中的pcm_hw.c中的接口函数
来与alsa-driver发生联系(据我的推断:可能就是通过他们来调用driver中的pcm_native.c中的文件接口)。

这个问题我搞了一周了,主就是没有发现点什么,alsa到底是怎么实现lib与driver之间的接口的呢?

|
snd_pcm_lib_write_transfer这个一般只是进行dma enqueue,dma完成后的中断处理ISR(arch/xx/mach/xx/dma.c)后调用dma设置时的callback。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • fedora安装 alsa-driver提示 install: 无法获取"include/sound/*.h"


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3