需要帮助了解alsa驱动程序
问题描述:
我试图在amlogic设备上调试声音系统。 amixer和alsamixer没有按预期工作,并且amixer可能会导致系统崩溃。我所苦恼的是,驱动程序通过构建一个snd_kcontrol对象来传递访问硬件寄存器的方法,所有这些都是在ALSA网站上编写ALSA驱动程序中描述的。但是,amixer cset从control.c调用snd_ctl_elem_write,它指向snd_ctl_t对象中的element_write。需要帮助了解alsa驱动程序
我看不到定义的snd_kcontrol和任何snd_ctl_t对象之间的任何链接,所以看不到amixer应该如何写入硬件。通常情况如何?
答
在用户空间中,控制设备由snd_ctl_t
表示,其中包含设备节点的文件句柄。 element_write
指向snd_ctl_hw_elem_write()
,它发出系统调用。
在内核中,打开的设备文件由链接到struct snd_card
的struct snd_ctl_file
表示。
+0
再次感谢。我感到困惑的是,每张卡只有一个snd_ctl_t,而可能有很多snd_kcontrols,所以它们实际上是分开的实体和到寄存器的不同路由。 – graham
该链接由'cnd_ctl_add()'建立。 –
谢谢,但afaict snd_ctl_add()只需要一个snd_card和snd_kcontrol结构。与snd_ctl_t无关。对不起,如果我很厚。 – graham