usb - 如何在嵌入式Linux中设置USB设备的VID和PID

标签 usb embedded-linux

我有一个嵌入式 Linux 设备,我想设置 VID、PID 和名称。这通常在哪里完成?是在文件系统中还是编译到内核中?

最佳答案

它是在内核中完成的:我假设您有一个您已经开发或正在使用的 USB 小工具驱动程序,以便您的嵌入式 Linux 设备可以用作 USB 设备。

这个驱动程序肯定有一个在某处声明的struct usb_device_descriptor。正如您所看到的,该结构体有一些 idVendor 和 idProduct 字段。人类可读的字符串是 iManufactureriProductiSerialNum。这是完整的结构:

/* USB_DT_DEVICE: Device descriptor */
struct usb_device_descriptor {
    __u8  bLength;
    __u8  bDescriptorType;

    __le16 bcdUSB;
    __u8  bDeviceClass;
    __u8  bDeviceSubClass;
    __u8  bDeviceProtocol;
    __u8  bMaxPacketSize0;
    __le16 idVendor;
    __le16 idProduct;
    __le16 bcdDevice;
    __u8  iManufacturer;
    __u8  iProduct;
    __u8  iSerialNumber;
    __u8  bNumConfigurations;
} __attribute__ ((packed));

如果您使用的是已开发的驱动程序,某些驱动程序使您可以使用作为模块参数传递的某些值来设置这些字段,请参阅 drivers/usb/gadget/printer.c 了解更多信息很好的例子。这样,您可以将值从用户空间传递到内核。

关于usb - 如何在嵌入式Linux中设置USB设备的VID和PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410181/

相关文章:

linux - 无法在 I2C 设备上使用 write() 或 read() 调用,但 echo 和 i2c-tools 可以工作

c++ - Qt:为什么我的图像背景在 LinuxFb 上是绿色的?

linux - Yocto Initramfs 添加 cryptsetup 包时发生事务错误

serial-port - 为什么串行端口设备在不同的环境或使用不同的电缆时不会响应?

c++ - 如何安装libusb?

c - 如何使用内核头文件<linux/gfp.h>

c - 通过设备驱动程序访问 AXIS FIFO 寄存器时出现未处理的故障

linux - 断开连接时一致的 USB 端口编号

c - LPC2148 USB 发送/接收数据

linux - 为什么使用 Perl 的 Device::USB 进行 USB 批量传输会中断?