Android 系统通过pid和vid固定usb声卡节点

前言

客户机器需要接usb的声卡设备,但是开机usb声卡设备的节点会发生变化这个时候需要通过修改驱动来固定设备的注册节点。

修改方法

首先找到usb声卡注册驱动kernel/sound/usb/card.c ,在usb_audio_probe函数里面打印出声卡注册时的pid和vid。

@@ -495,7 +502,11 @@ static int usb_audio_probe(struct usb_interface *intf,
 	struct usb_host_interface *alts;
 	int ifnum;
 	u32 id;
-
+	
+	printk("==== idVendor = %d | idProduct = %d \n", dev->descriptor.idVendor, dev->descriptor.idProduct);

然后在snd_usb_audio_create函数里面判断pid和vid,然后以id来固定节点。

@@ -369,9 +369,16 @@ static int snd_usb_audio_create(struct usb_interface *intf,
 		dev_err(&dev->dev, "unknown device speed %d\n", snd_usb_get_speed(dev));
 		return -ENXIO;
 	}
+	if(dev->descriptor.idVendor == 0x0483 && dev->descriptor.idProduct == 0x5758){
+		printk("=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用libusb库通过PIDVID打开USB摄像头时,你需要使用libusb的函数来枚举设备并打开指定的设备。以下是一个示例程序,展示了如何使用libusb来打开USB摄像头: ```c #include <stdio.h> #include <stdlib.h> #include <libusb-1.0/libusb.h> #define VENDOR_ID 0xXXXX #define PRODUCT_ID 0xXXXX int main() { libusb_context *ctx = NULL; libusb_device_handle *dev_handle = NULL; int r; // 初始化libusb库 r = libusb_init(&ctx); if (r < 0) { printf("无法初始化libusb库!错误代码: %d\n", r); return 1; } // 设置日志级别(可选) libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_WARNING); // 枚举设备 libusb_device **devs; ssize_t count = libusb_get_device_list(ctx, &devs); if (count < 0) { printf("无法枚举设备!\n"); libusb_exit(ctx); return 1; } // 遍历设备列表,寻找目标设备 for (ssize_t i = 0; i < count; ++i) { libusb_device *dev = devs[i]; struct libusb_device_descriptor desc; r = libusb_get_device_descriptor(dev, &desc); if (r < 0) { printf("无法获取设备描述符!错误代码: %d\n", r); break; } // 判断是否为目标设备 if (desc.idVendor == VENDOR_ID && desc.idProduct == PRODUCT_ID) { // 打开设备 r = libusb_open(dev, &dev_handle); if (r < 0) { printf("无法打开USB设备!错误代码: %d\n", r); break; } // 在这里可以进行设备的读写操作 // 关闭设备 libusb_close(dev_handle); dev_handle = NULL; break; } } // 释放设备列表 libusb_free_device_list(devs, 1); // 释放libusb库资源 libusb_exit(ctx); return 0; } ``` 请确保将`VENDOR_ID`和`PRODUCT_ID`替换为你的摄像头的供应商ID和产品ID。在上述示例中,你可以在"在这里可以进行设备的读写操作"的部分添加对设备的读写操作代码。 请注意,上述示例仅展示了如何使用libusb库通过PIDVID打开USB摄像头,你可能需要根据你的具体需求进行更多的设置和处理。同时,你可能还需要添加适当的错误检查和错误处理代码来确保程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值