【问题标题】:Need help understanding alsa drivers需要帮助了解 alsa 驱动程序
【发布时间】:2018-03-06 18:27:55
【问题描述】:

我正在尝试调试 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 对象之间的任何链接,因此看不到 amixer 应该如何写入硬件。一般是怎么做的?

【问题讨论】:

  • 该链接由cnd_ctl_add()建立。
  • 谢谢,但是 snd_ctl_add() 只需要一个 snd_card 和 snd_kcontrol 结构。与 snd_ctl_t 无关。对不起,如果我很厚。

标签: driver alsa


【解决方案1】:

在用户空间中,一个控制设备由snd_ctl_t表示,其中包含设备节点的文件句柄。 element_write 指向snd_ctl_hw_elem_write(),它发出一个系统调用。

在内核中,打开的设备文件由struct snd_ctl_file 表示,它与struct snd_card 链接。

【讨论】:

  • 再次感谢。让我感到困惑的是,每张卡只有一个 snd_ctl_t,而可以有许多 snd_kcontrols,因此它们实际上是独立的实体和不同的路径进入寄存器。
猜你喜欢
  • 2018-08-28
  • 1970-01-01
  • 2017-06-19
  • 2016-05-03
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多