gpt4 book ai didi

c# - 如何在 Linux 中使用 libusb 获取设备路径

转载 作者:IT王子 更新时间:2023-10-29 00:41:59 24 4
gpt4 key购买 nike

我一直在寻找一种在 C# 中获取 USB 到达和移除事件的跨平台方式,我找到了“LibUsbDotNet C# USB 库”(http://sourceforge.net/projects/libusbdotnet/?source=navbar)。

它正常工作,但在 Linux 中,我似乎无法获得设备安装点(路径)。在 Linux 中,它使用没有获取设备路径的方法的“libusb”库。

这是检测设备事件的简单代码示例:

internal class DeviceNotification
{
public static IDeviceNotifier UsbDeviceNotifier = DeviceNotifier.OpenDeviceNotifier();

private static void Main(string[] args)
{
// Hook the device notifier event
UsbDeviceNotifier.OnDeviceNotify += OnDeviceNotifyEvent;

// Exit on and key pressed.
Console.Clear();
Console.WriteLine();
Console.WriteLine("Waiting for system level device events..");
Console.Write("[Press any key to exit]");

while (!Console.KeyAvailable)
Application.DoEvents();

UsbDeviceNotifier.Enabled = false; // Disable the device notifier

// Unhook the device notifier event
UsbDeviceNotifier.OnDeviceNotify -= OnDeviceNotifyEvent;
}

private static void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
{
// A Device system-level event has occured

Console.SetCursorPosition(0,Console.CursorTop);

Console.WriteLine(e.ToString()); // Dump the event info to output.

Console.WriteLine();
Console.Write("[Press any key to exit]");
}
}

这是一个输出示例:

[DeviceType:DeviceInterface] [EventType:DeviceArrival] Name:usbdev1.17 BusNumber:1 DeviceAddress:17 Length:18 DescriptorType:Device BcdUsb:0x0200 Class:PerInterface SubClass:0x00 Protocol:0x00 MaxPacketSize0:64 VendorID:0x059F ProductID:0x1014 BcdDevice:0x0000 ManufacturerStringIndex:1 ProductStringIndex:2 SerialStringIndex:3 ConfigurationCount:1

[Press any key to exit][DeviceType:DeviceInterface] [EventType:DeviceRemoveComplete] Name:usbdev1.17 BusNumber:1 DeviceAddress:17 Length:18 DescriptorType:Device BcdUsb:0x0200 Class:PerInterface SubClass:0x00 Protocol:0x00 MaxPacketSize0:64 VendorID:0x059F ProductID:0x1014 BcdDevice:0x0000 ManufacturerStringIndex:1 ProductStringIndex:2 SerialStringIndex:3 ConfigurationCount:1

我的问题是如何获取连接或移除设备的路径,或者如何将 libusb 返回的信息与实际设备路径绑定(bind)?

最佳答案

您需要使用 UDev 而不是 libusb。 Libusb 仅告诉您系统上有哪些 USB 设备,但不会告诉您它们安装在何处。 UDev 负责安装它们。

有 libudev,文档应该在这里:http://www.freedesktop.org/software/systemd/libudev/但目前似乎已关闭。这是关于 libudev 的教程:Tutorial: How to use libudev and SysFS in Linux

还有一个基于 GLib 的 libudev 包装器,文档在这里:http://ftp.osuosl.org/pub/linux/utils/kernel/hotplug/gudev/并且似乎有一个用于 libgudev 的 c# 包装器。

但最后您可能会发现使用 GLib 的 GIO 比深入到 udev 级别更容易:Volumes and Drives API 引用。

关于c# - 如何在 Linux 中使用 libusb 获取设备路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980052/

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