ALSA SOC驱动的snd_soc_dai_link数组中新增一路stream,所有参数配置正确,但声卡始终注册失败。

关键Log:

<3>[    1.010918](2)soc-audio soc-audio: ASoC: failed to register soundcard -16

ERROR NO:-EBUSY (-16)

关键原因:

声卡设备较多,但没有打开CONFIG_SND_DYNAMIC_MINORS这个宏。

 

分析过程:

1.定位Log位置:

【ALSA SoC】添加声卡节点后声卡加载失败

 

跟踪代码实现,追查报错EBUSY的位置,最终定位到如下函数:

【ALSA SoC】添加声卡节点后声卡加载失败

在执行snd_register_device时,会在snd_minors数组中查找空闲的index,用于存储声卡相关信息,

传入的参数就是声卡设备的几大关键信息:type、card及device id。

而问题原因就是snd_minors[minor]不为0,也就是说minor对应的id已经被注册,minor的计算方式如下(card<<5|dev),其中dev = type + device,而从下面的宏定义就可以发现:C0D0c与C0D8p计算的minor都为24,因此发生了BUSY。

而通过代码我们也可以发现,CONFIG_SND_DYNAMIC_MINORS这个宏打开后,使用的是snd_find_free_minor的另一种实现,这种实现则不会存在这种问题,因此解决方式选择打开这个宏。

 

【ALSA SoC】添加声卡节点后声卡加载失败

相关文章:

  • 2022-12-23
  • 2021-12-24
  • 2022-01-29
  • 2021-12-24
  • 2022-12-23
  • 2021-09-10
猜你喜欢
  • 2021-08-27
  • 2021-11-29
  • 2022-12-23
  • 2021-12-24
  • 2021-08-27
相关资源
相似解决方案