Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
刚开始我以为走的是下面的通路一,后来调试发现根本没更新,而是在后面提到的通路二中更新了,不过通路一也提一下吧!
通路一:
以录音为例:
snd_pcm_lib_read1 -> pcm_lib.csnd_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

本文详细探讨了在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的一系列中断处理和任务调度流程。
最低0.47元/天 解锁文章
2683





