gpt4 book ai didi

linux/libusb 获取usb设备路径

转载 作者:IT王子 更新时间:2023-10-29 00:19:42 26 4
gpt4 key购买 nike

我使用 libusb 来枚举一些 USB 设备。现在我想获得“设备路径”。我认为它不叫 usb device-path,因为我用 google 没有成功。

如果我将 usb 设备与 linux 连接,我会在 dmesg 中收到一条消息,这里有几个带有 usb 温度传感器的“设备路径”示例(类似于 this ) :

直接连接到 USB 端口:[68448.099682] generic-usb 0003:0C45:7401.0056: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.0-1/input0 => < strong>12.0-1

直接到另一个端口:[68560.853108] generic-usb 0003:0C45:7401.0058: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:13.0-1/input0 => < strong>13.0-1

到第一个使用的端口上的 USB 集线器:[68600.245809] generic-usb 0003:0C45:7401.005A: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.2-1.4/input0 => 12.2-1.4

到同一 USB 集线器上的另一个端口:[68647.925092] generic-usb 0003:0C45:7401.005C: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.2-1.3/input0 => 12.2-1.3

现在在之前用过的usb hub上加一个usb hub:[68740.715518] generic-usb 0003:0C45:7401.005E: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:12.2-1.4.4/input0 => 12.2-1.4.4

长话短说:内核消息始终包含物理 USB 设备位置的唯一路径(请参阅前面的粗体文本)。是否可以通过 libusb 在用户空间中获取此“路径”?我用 struct usb_busstruct usb_device 尝试了很多东西,但总是失败。

我需要这个来识别这些 USB 温度计中的多个,因为它们没有唯一的序列号,有时它们只是在运行时“重新连接”,所以它们会得到不同的 USB ID。所以我认为识别它们的唯一方法是通过物理位置。

感谢您的帮助,

最好的问候凯文·M.

-编辑-

目前我使用下面的代码来搜索我的 usb 设备:

usb_dev_handle *find_lvr_winusb() {

struct usb_bus *bus;
struct usb_device *dev;

for (bus = usb_busses; bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
if (dev->descriptor.idVendor == VENDOR_ID &&
dev->descriptor.idProduct == PRODUCT_ID ) {
usb_dev_handle *handle;
if(debug) {
printf("lvr_winusb with Vendor Id: %x and Product Id: %x found.\n", VENDOR_ID, PRODUCT_ID);
printf("INFO: %d\n", dev->bus->location);
printf("INFO: %d %s\n", bus->location, bus->dirname);
}

if (!(handle = usb_open(dev))) {
printf("Could not open USB device\n");
return NULL;
}
return handle;
}
}
}
return NULL;
}

但使用此代码我无法获得唯一的物理位置 ID。 bus->location 返回一个整数(bus->dirname 包含相同的,但作为字符串),它不是唯一的。我知道 USB 有一个层次结构,在 dmesg 中我可以看到这个层次结构路径。

使用 libusb,我只能获取总线 ID(?)和一些设备 ID。但它们对我没有帮助,因为我需要识别两个或更多这些温度传感器。当温度传感器重置连接(每 5 到 60 秒)并且总线 ID 不是唯一时,设备 ID 总是会发生变化。不幸的是,温度传感器没有唯一的序列号。

所以我认为物理路径是识别设备的唯一方式。

最好的问候凯文·M.

最佳答案

从 libusb 1.0.12 开始,他们引入了 libusb_get_port_path(),并在 1.0.16 中将其替换为 libusb_get_port_numbers()它允许您查询总线拓扑。

关于linux/libusb 获取usb设备路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14279796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com