1

我正在尝试为我的 PCI 声卡创建一个简单的驱动程序,我将在其中使用 ALSA api。当然我也面临一个问题:我不能让我的司机工作。

所以这里有一些细节:

  1. 正如我提到的,我的声卡是 PCI 设备。为了启动我的驱动程序,我不得不停止最初运行的 snd_intel8x0 驱动程序,因为它已经占用了设备并且无法访问(我的驱动程序的探测功能从未执行过)。所以我将 snd_intel8x0 驱动程序列入了黑名单(在 /etc/modporbe.d/blacklist.conf 中添加了一行)。从这一刻起,我的驱动程序就可以启动了——探测功能启动了。

  2. 不幸的是,当 snd_intel8x0 驱动程序被列入黑名单时,ALSA api 似乎也消失了。我观察到以下几点:

    • 当我启动我的驱动程序时,我在 dmesg 中收到这些错误:

[...] alsa:未知符号 snd_card_register(错误 0)

[...] alsa:未知符号 snd_card_create(错误 0)

[...] alsa:未知符号 snd_card_free(错误 0)

[...] alsa:未知符号 snd_device_new(错误 0)

  • 在文件 /proc/kallsyms 中没有 snd* 符号(如果原始驱动程序 snd_intel8x0 正在运行所有上述 snd* 函数在 /proc/kallsyms 中可用)

  • 有文件夹 /proc/asound (如果 snd_intel8x0 正在运行,则存在 asound 文件夹)

所以我的问题:

  1. 如何让我的 PCI 声卡使用我的驱动程序而不是 snd_intel8x0?

  2. 如何为我的司机提供 ALSA?

  3. 一般来说:当 snd_intel8x0 被列入黑名单时,为什么 ALSA 会消失?

提前谢谢你 Grts,内德林

4

1 回答 1

1

该驱动程序snd-intel8x0适用于 Intel 和兼容的 AC'97 控制器。如果你有这样的控制器,snd-intel8x0是正确的驱动程序使用。

如果您的设备确实需要新的东西,请扩展snd-intel8x0驱动程序。

如果你真的想写一个替代品snd-intel8x0,把后者放进去blacklist.conf是正确的方法。


当当前加载的模块与您尝试加载的模块不兼容时,您会收到“未知符号”错误。重新编译 ALSA 时,应先卸载所有snd*模块,然后再加载新模块。

于 2012-11-01T11:54:43.657 回答