【问题标题】:Loading a kernel module (snd-aloop) multiple times多次加载内核模块(snd-aloop)
【发布时间】:2019-05-09 06:52:44
【问题描述】:

我想加载“snd-aloop”以便在最后获得多个设备节点,例如:

/dev/snd/xxx0

/dev/snd/xxx1

...

/dev/snd/xxxN

(如何)如果需要,我可以使用简单的 modprobe 命令(Ubuntu 16.04)和一些辅助命令吗?需要确切的步骤来做到这一点...

如果不是,(如何)我可以用一些 C 代码包装“snd-aloop”内核驱动程序并生成它的多个实例?需要准确的内核 C API 和一些示例代码...

【问题讨论】:

    标签: c linux-kernel linux-device-driver


    【解决方案1】:

    据我了解,您无法加载同一内核模块的多个实例。

    您可以通过调用设备创建 API 创建多个“设备”。例如,netdev, char_dev,....随便你。

    这样做有什么具体原因吗?从单个内核模块,创建多个设备更加简单。如果您想按需创建设备,请使用 ioctl() 或 proc 任何您想要的。

    【讨论】:

    • 是的,正确,我无法在 snd-aloop 上多次执行 modprobe。 italic_您可以通过调用设备创建 API 来创建多个“设备”。例如,netdev, char_dev,.... 随便你。_italic 请给我一个书面示例,如何攻击 snd-aloop 以创建它的多个实例。结果会怎样?
    • italic_这样做有什么具体原因吗?从单个内核模块,创建多个设备更加简单。如果您想按需创建设备,请使用 ioctl() 或 proc 任何您想要的。_italic 因为我想使用 snd-aloop 及其代码:elixir.bootlin.com/linux/latest/source/sound/drivers/aloop.c 如果不可能,请给我一个书面示例如何修改它以便拥有多个 ALSA 设备,例如:/dev/snd/pcmXXX1 /dev/snd/pcmXXX2 ... /dev/snd/pcmXXX3
    • 我查看了源代码 - 我对这个环回声卡驱动程序不熟悉,但我能理解的是: 1) alsa_card_loopback_init 正在初始化驱动程序。如您所见,它基于 SNDRV_CARDS 循环并注册平台驱动程序。您可以检查 SNDDRV_CARDS 并启用阵列吗?设备数量是多少? 2) 平台驱动注册后,内核会调用probe() API 来检测设备。 loopback_probe()。在这里您可以查看增加“启用”设备的数量后它被调用了多少次。
    猜你喜欢
    • 2018-09-07
    • 2012-08-20
    • 2016-01-05
    • 1970-01-01
    • 2020-09-02
    • 2012-03-14
    • 2014-09-04
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多