您提出的问题基本上是:ALSA控制的系统中可以有超过32个声卡吗?显然,虽然您的 USB 控制器知道您连接的所有声卡,但 ALSA 系统却不知道。
让我们进入内核源代码来检查这里发生了什么。在/sound/core/sound.c
您将找到有关最大声卡问题的更多信息:
39 static int cards_limit = 1;
40
41 MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
42 MODULE_DESCRIPTION("Advanced Linux Sound Architecture driver for soundcards.");
43 MODULE_LICENSE("GPL");
44 module_param(major, int, 0444);
45 MODULE_PARM_DESC(major, "Major # for sound driver.");
46 module_param(cards_limit, int, 0444);
47 MODULE_PARM_DESC(cards_limit, "Count of auto-loadable soundcards.");
48 MODULE_ALIAS_CHARDEV_MAJOR(CONFIG_SND_MAJOR);
49
50 /* this one holds the actual max. card number currently available.
51 * as default, it's identical with cards_limit option. when more
52 * modules are loaded manually, this limit number increases, too.
53 */
54 int snd_ecards_limit;
55 EXPORT_SYMBOL(snd_ecards_limit);
从代码及其注释中,我读到了两件事:
变量cards_limit 是一个模块参数。我假设在您的安装中,此参数设置为 32。如果内核中内置了 ALSA 支持,您可以在更改此选项的位置构建自定义内核。如果 ALSA 支持不是内置的,而是作为模块加载的,您可以在模块加载期间设置此参数。为此,您可以更改系统配置 ( man modprobe.d
) 或卸载模块,然后使用选项 ( man modprobe
) 重新加载它。
该限制被描述为仅限制自动加载的声卡的数量。为了克服这个限制,手动加载负责声卡的模块就足够了。内核中对手动添加的声卡没有设置限制。
来源:内核 2.8 Git