需要帮助了解 alsa 驱动程序
Need help understanding alsa drivers
我正在尝试调试 amlogic 设备上的声音系统。 amixer 和 alsamixer 未按预期工作,并且 amixer 可能会使系统崩溃。我正在努力解决的问题是,驱动程序通过构造一个 snd_kcontrol 对象来传递访问硬件寄存器的方法,所有这些都如 ALSA 网站上的编写 ALSA 驱动程序中所述。但是 amixer cset 从 control.c 调用 snd_ctl_elem_write,它引用 snd_ctl_t 对象中的 element_write。
我在定义的 snd_kcontrol 和任何 snd_ctl_t 对象之间看不到任何 link,所以看不到 amixer 应该如何写入硬件。通常是怎么做的?
在用户space中,一个控制设备由snd_ctl_t
表示,其中包含设备节点的文件句柄。 element_write
指向 snd_ctl_hw_elem_write()
,发出系统调用。
在内核中,一个打开的设备文件由struct snd_ctl_file
表示,它链接到struct snd_card
。
我正在尝试调试 amlogic 设备上的声音系统。 amixer 和 alsamixer 未按预期工作,并且 amixer 可能会使系统崩溃。我正在努力解决的问题是,驱动程序通过构造一个 snd_kcontrol 对象来传递访问硬件寄存器的方法,所有这些都如 ALSA 网站上的编写 ALSA 驱动程序中所述。但是 amixer cset 从 control.c 调用 snd_ctl_elem_write,它引用 snd_ctl_t 对象中的 element_write。
我在定义的 snd_kcontrol 和任何 snd_ctl_t 对象之间看不到任何 link,所以看不到 amixer 应该如何写入硬件。通常是怎么做的?
在用户space中,一个控制设备由snd_ctl_t
表示,其中包含设备节点的文件句柄。 element_write
指向 snd_ctl_hw_elem_write()
,发出系统调用。
在内核中,一个打开的设备文件由struct snd_ctl_file
表示,它链接到struct snd_card
。