Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux &引用;“多实例”;内核模块与参数化_Linux_Linux Kernel_Linux Device Driver_Kernel Module_Alsa - Fatal编程技术网

Linux &引用;“多实例”;内核模块与参数化

Linux &引用;“多实例”;内核模块与参数化,linux,linux-kernel,linux-device-driver,kernel-module,alsa,Linux,Linux Kernel,Linux Device Driver,Kernel Module,Alsa,我正在开发一个内核模块,它应该处理自身的多个实例。它应该打开多个虚拟声卡。这样的虚拟声卡只需通过UDP数据包将音频数据流传输到特定的IP地址 在我的例子中,每当内核模块第一次被modprobe'd时,它将创建一个虚拟声卡实例(一个ALSA兼容设备),公开一组ALSA节点-/dev/snd/controlC0、/dev/snd/pcmC0D0p和/dev/snd/pcmC0D0c。在第二个“加载请求”中,它将公开另一组ALSA节点-/dev/snd/controlC1、/dev/snd/pcmC1

我正在开发一个内核模块,它应该处理自身的多个实例。它应该打开多个虚拟声卡。这样的虚拟声卡只需通过UDP数据包将音频数据流传输到特定的IP地址

在我的例子中,每当内核模块第一次被modprobe'd时,它将创建一个虚拟声卡实例(一个ALSA兼容设备),公开一组ALSA节点-/dev/snd/controlC0、/dev/snd/pcmC0D0p和/dev/snd/pcmC0D0c。在第二个“加载请求”中,它将公开另一组ALSA节点-/dev/snd/controlC1、/dev/snd/pcmC1D0p和/dev/snd/pcmC1D0c

我的问题是:

  • 不可能多次探测同一个内核模块,对吗?(我知道不是,请确认一下)
  • 一旦加载了内核模块,我如何创建它的第二个(第三个)实例?如何将参数传递给它以创建另一个实例并相互区分?我可以使用SYSFS吗
  • 如果我能使用SYSFS,我怎么能有复杂的参数化呢
  • 例如:


    如果要设置参数virt\u soundcard\u name=“room1”,virt\u soundcard\u ip=“192.168.1.105”,virt\u soundcard\u number\u of_channels=“8”,最简单的方法是什么?我可以通过SYSFS或其他方式将一个文件或一行具有该配置的文件传递给内核模块吗?

    加载一次,使用多次。是的,sysfs会有帮助。当然,您可以为您的模块选择另一个IPC。可能我将使用与gpio密钥类似的方法:它在/sys/devices/platform/gpio keys/下公开一些属性。所以它和我需要的很相似。你的意见是什么?还有其他“用户友好”的解决方案吗?忘了澄清一下-我需要它作为基于文件的方法,因为我将使用Python/Bash来配置内核模块。我不会在用户空间中使用中间件作为C等中的库。如果您了解其优缺点,任何设计都是好的。您可以实现一个带有接口的控制设备,该接口允许创建和销毁虚拟声卡。