在项目中遇到多个usb audio驱动加载的情况,但是只需要使用其中的我想要的那个usb audio设备,一开始想在安卓上做选择,但是因为都是同类型usb audio设备,安卓上没看到有对同类型usb audio设备做出区分,后面便在内核上看看。
usb audio的加载在sound/usb/card.c文件下实现的,里面实现了声卡的创建,加载、释放等一系列内容,其中可以关注usb_audio_probe函数,这里便可以达到限制usb audio设备加载的目的。
static int usb_audio_probe(struct usb_interface *intf,
const struct usb_device_id *usb_id)
{
...
if (! chip) {
/* it's a fresh one.
* now look for an empty slot and create a new card instance
*/
for (i = 0; i < SNDRV_CARDS; i++)
if (enable[i] && ! usb_chip[i] &&
(vid[i] == -1 || vid[i] == USB_ID_VENDOR(id)) &&
(pid[i] == -1 || pid[i] == USB_ID_PRODUCT(id))) {
err = snd_usb_audio_create(intf, dev, i, quirk,
&chip);
if (err < 0)
goto __error;
chip->pm_intf = intf;
break;
}
if (!chip) {
dev_err(&dev->dev, "no available usb audio device\n");
err = -ENODEV;
goto __error;
}
...
}
在这段代码里面会对PID/VID做出相应的识别,可以对我们不想加载的对应pid/vid的设备进行限制,或者只加载想要加载的PID/VID设备。