PID/VID 是设备的厂商和产品识别码,修改需要通过修改对应的设备驱动程序实现。
在 Linux 中,通过 gadget 建立的虚拟串口的 PID/VID 可以在 gadget 驱动程序代码中进行修改,例如在文件 /drivers/usb/gadget/function/f_serial.c 中,可以找到如下代码:
```
#define UDC_VID 0x0525
#define UDC_PID_BASE 0xA4A7
static int gserial_bind(struct usb_configuration *c, struct usb_function *f)
{
struct f_serial_opts *opts = f->config->cdev->gadget->driver_data;
...
f->descriptors = descriptors;
if (opts->use_acm) {
...
descriptors[0].idVendor = cpu_to_le16(UDC_VID);
descriptors[0].idProduct = cpu_to_le16(UDC_PID_BASE + 1);
} else {
...
descriptors[0].idVendor = cpu_to_le16(UDC_VID);
descriptors[0].idProduct = cpu_to_le16(UDC_PID_BASE);
}
...
}
```
其中 UDC_VID 和 UDC_PID_BASE 定义了默认的 PID/VID,可以根据需要进行修改。需要注意的是,修改 PID/VID 可能会导致 host 端无法自动识别设备,需要手动修改 host 端的驱动程序配置文件。
PID/VID 是设备的厂商和产品识别码,修改需要通过修改对应的设备驱动程序实现。
在 Linux 中,通过 gadget 建立的虚拟串口的 PID/VID 可以在 gadget 驱动程序代码中进行修改,例如在文件 /drivers/usb/gadget/function/f_serial.c 中,可以找到如下代码:
```
#define UDC_VID 0x0525
#define UDC_PID_BASE 0xA4A7
static int gserial_bind(struct usb_configuration *c, struct usb_function *f)
{
struct f_serial_opts *opts = f->config->cdev->gadget->driver_data;
...
f->descriptors = descriptors;
if (opts->use_acm) {
...
descriptors[0].idVendor = cpu_to_le16(UDC_VID);
descriptors[0].idProduct = cpu_to_le16(UDC_PID_BASE + 1);
} else {
...
descriptors[0].idVendor = cpu_to_le16(UDC_VID);
descriptors[0].idProduct = cpu_to_le16(UDC_PID_BASE);
}
...
}
```
其中 UDC_VID 和 UDC_PID_BASE 定义了默认的 PID/VID,可以根据需要进行修改。需要注意的是,修改 PID/VID 可能会导致 host 端无法自动识别设备,需要手动修改 host 端的驱动程序配置文件。
举报