ALSA 驱动框架和驱动开发 (二)

本文详细介绍了ALSA驱动框架中,内核如何从打开/dev/dsp开始,调用到驱动的全过程。涉及open、hw_params、ioctl、prepare、write、close等操作的具体步骤和函数调用,以及在不同阶段CPU、platform、codec之间的交互,重点解析了at91_ssc_startup、at91_pcm_open、epayment_snd_startup等关键函数的作用。
摘要由CSDN通过智能技术生成

本文主要接着讲,ALSA驱动框架中,内核调用到驱动的全过程

十.从内核调用到驱动的全过程

       1Open /dev/dsp

              Open操作,通过前面所说的结构图,我们知道,当内核调用open函数时,  首先调用的是soundcore_open,通过__look_for_unit找到chain[3],dsp这一sound_unit指针,然后重新赋值文件的操作指针为dsp设备文件的操作指针。

              这一方法也对其他的文件适用,例如,对于/dev/mixer,调用open操作时,一样调用soundcore_open,然后接下来的操作就是重新定义文件的操作指针为mixer文件的操作指针,并且调用mixer_ops中的open 函数,

              以后对文件的操作就是调用更新后的ops了。

这里调用的是pcm_oss.c中的open,具体流程图如下,

 

具体的,

Cpu_dai.ops->startup at91_ssc_startup 该函数主要是设置传输方向的mask(串口只允许单向传输)

Platform->pcm_ops->open at91_pcm_open 该函数主要设置at91_pcm_hardware,包括pcm_infoperiod_bytes_min,period_bytes_max,

periods_min,periods_max,buffer_bytes_max等,

Codec_dai->ops.startup NULL

Machine->ops->startup epayment_snd_startup,该函数数主要设置cpu_daiclk为系统时钟AT91_SYSCLK_MCK,设置codec_daiclkPCMXXX_SYSCLK,,然后使能codec_daiclk

2Open /dev/mixer

Open /dev/mixer的大致过程与上述open /dev/dsp类似,只是后面的操作指针为mixer ops

具体的就是调用mixer_oss.c中的snd_mixer_oss_open,该函数大致就是完成了struct snd_mixer_oss_file *fmixer

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值