[RK3288][Android6.0] ALSA的DMA buffer读写位置更新

本文详细探讨了在Rockchip平台的Android 6.0系统中,ALSA(Advanced Linux Sound Architecture)如何通过DMA(Direct Memory Access)更新buffer的位置。在录音场景下,原本以为是通过通路一进行更新,但实际是在通路二,即dmaengine_pcm_dma_complete()回调函数中完成更新。这个过程中涉及到从pl330_irq_handler到snd_pcm_update_hw_ptr0的一系列中断处理和任务调度流程。

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92


刚开始我以为走的是下面的通路一,后来调试发现根本没更新,而是在后面提到的通路二中更新了,不过通路一也提一下吧!

通路一:

以录音为例:

snd_pcm_lib_read1 -> pcm_lib.c
    snd_pcm_update_hw_ptr ->
        snd_pcm_update_hw_ptr0 -> pcm_lib.c
            substream->ops->pointer ->    //这个函数指针很关键! 初始化时在soc_new_pcm()中注册
            soc_pcm_pointer -> soc-pcm.c
                    platform->driver->ops->pointer ->    //snd_dmaengine_pcm_regi
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值