- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
概述
我已经将Web应用程序移植到.NET Core,并且发现它在Windows上运行时可以通过USB与微 Controller 进行通信,而在Linux上运行时则不能。我正在尝试解决:
dotnet <<application.dll>>
执行的操作。 WinUSB
和libusb
库的跨平台C#适配器。该项目以Web服务使用的Nuget包的形式分发,这就是问题所在。 libusb-1.0 library
。
3
root@19e8929e1814:/app# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2b87:0001
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
libusb-1.0
已安装
5 ,并从
ldconfig
缓存中检查是否可用:
root@19e8929e1814:/app# ldconfig -p | grep libusb
libusb-1.0.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libusb-1.0.so.0
libusb-1.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libusb-1.0.so
libusb-0.1.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libusb-0.1.so.4
libusb-0.1.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libusb-0.1.so.4
CoreCompat.LibUsbDotNet
引发关于无法找到
libusb-1.0
的异常,并且只能假定这是库中的错误。
project.json
{
"dependencies": {
"<<Company>>.Communications.<<Product>>Usb": "0.4.9",
"<<Company>>.<<Product>>Web.Core": {
"target": "project"
},
"<<Company>>.<<Product>>WebComponentPackage": "0.4.9-beta0002",
"Autofac": "4.2.1",
"Common.Logging": "3.4.0-Beta2",
"Microsoft.AspNetCore.Diagnostics": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
"Microsoft.AspNetCore.StaticFiles": "1.1.0",
"Microsoft.AspNetCore.WebSockets.Server": "0.1.0",
"Microsoft.Extensions.DependencyModel": "1.1.0-preview1-001100",
"Microsoft.Extensions.Logging.Console": "1.1.0",
"Microsoft.NETCore.App": {
"version": "1.1.0",
"type": "platform"
},
"Serilog.Enrichers.Thread": "3.0.0",
"Serilog.Sinks.Literate": "2.1.0-dev-00034",
"Serilog.Sinks.RollingFile": "3.3.0",
"System.Runtime.Loader": "4.3.0",
"Thrower": "3.0.4"
},
"tools": {
},
"frameworks": {
"netcoreapp1.1": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
project.json
{
"version": "0.4.9-*",
"description": "Provides a type of communication service that facilitates communication between .NET applications and <<Product>> over USB.",
"authors": ["<<Author>>"],
"dependencies": {
"Microsoft.Composition": "1.0.30",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"Thrower": "3.0.4",
"CoreCompat.LibUsbDotNet": "2.2.8-r101",
"Common.Logging": "3.4.0-Beta2",
"<<Company>>.Message": "0.4.3",
"NETStandard.Library": "1.6.1",
"<<Company>>.Communications.Core": "0.4.5",
"Serilog": "2.3.0"
},
"packOptions": {
"owners": ["<<Company>>"],
"repository": {
"type": "git",
"url": "https://bitbucket.org/<<Company>>-dev/<<Product>>usb"
}
},
"frameworks": {
"netstandard1.4": {
"imports": [ "dnxcore50", "portable-net45+win8" ]
}
},
"buildOptions": {
"xmlDoc": true
}
}
Unhandled Exception: System.DllNotFoundException: libusb-1.0 library not found. This is often an indication that libusb-1.0 was installed to '/usr/local/lib' and
mono.net is not looking for it there. To resolve this, add the path '/usr/local/lib' to '/etc/ld.so.conf' and run 'ldconfig' as root. (http://www.mono-project.co
m/DllNotFoundException) ---> System.DllNotFoundException: Unable to load DLL 'libusb-1.0.dll': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
at MonoLibUsb.MonoUsbApi.Init(IntPtr& pContext)
at MonoLibUsb.MonoUsbSessionHandle..ctor()
--- End of inner exception stack trace ---
at MonoLibUsb.MonoUsbSessionHandle..ctor()
at MonoLibUsb.MonoUsbEventHandler.Init(UnixNativeTimeval unixNativeTimeval)
at MonoLibUsb.MonoUsbEventHandler.Init()
at MonoLibUsb.MonoUsbApi.InitAndStart()
at LibUsbDotNet.LudnMonoLibUsb.MonoUsbDevice.get_MonoUsbDeviceList()
at LibUsbDotNet.Main.LegacyUsbRegistry.get_DeviceList()
at LibUsbDotNet.UsbDevice.get_AllLibUsbDevices()
at LibUsbDotNet.UsbDevice.get_AllDevices()
at LibUsbDotNet.UsbDevice.OpenUsbDevice(Predicate`1 findDevicePredicate)
at LibUsbDotNet.UsbDevice.OpenUsbDevice(UsbDeviceFinder usbDeviceFinder)
at <<Company>>.Communications.<<Product>>Usb.UsbCommunicationService.Start()
at <<Company>>.<<Product>>Web.Core.DeviceController.Initialize()
at <<Company>>.<<Product>>Web.ServiceAdapters.WebSockets.Startup.ConfigureServices(IServiceCollection services)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at <<Company>>.<<Product>>Web.ServiceAdapters.WebSockets.Program.Main(String[] args)
FROM microsoft/aspnetcore:1.1.0
ENTRYPOINT ["dotnet", "bin/Debug/netcoreapp1.1/publish/<<Company>>.<<Product>>Web.ServiceAdapters.WebSockets.dll"]
ARG source=.
WORKDIR /app
EXPOSE 80
COPY $source .
RUN apt-get update
RUN apt-get install -y libusb-1.0-0-dev usbutils
find / -name libusb*
root@19e8929e1814:/app# find / -name libusb*
/lib/x86_64-linux-gnu/libusb-1.0.so.0
/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0
/lib/x86_64-linux-gnu/libusb-0.1.so.4.4.4
/lib/x86_64-linux-gnu/libusb-0.1.so.4
/usr/lib/x86_64-linux-gnu/libusb-1.0.a
/usr/lib/x86_64-linux-gnu/pkgconfig/libusb-1.0.pc
/usr/lib/x86_64-linux-gnu/libusb-1.0.so
/usr/lib/x86_64-linux-gnu/libusb-0.1.so.4
/usr/include/libusb-1.0
/usr/include/libusb-1.0/libusb.h
/usr/share/doc/libusb-1.0-0
/usr/share/doc/libusb-1.0-doc
/usr/share/doc/libusb-1.0-doc/html/libusb_8h_source.html
/usr/share/doc/libusb-1.0-0-dev
/usr/share/doc/libusb-0.1-4
/usr/share/doc-base/libusb-1.0-doc
/var/lib/dpkg/info/libusb-1.0-0-dev:amd64.md5sums
/var/lib/dpkg/info/libusb-1.0-doc.list
/var/lib/dpkg/info/libusb-1.0-0:amd64.md5sums
/var/lib/dpkg/info/libusb-1.0-0:amd64.symbols
/var/lib/dpkg/info/libusb-1.0-0:amd64.shlibs
/var/lib/dpkg/info/libusb-1.0-0:amd64.list
/var/lib/dpkg/info/libusb-1.0-0:amd64.postrm
/var/lib/dpkg/info/libusb-1.0-0:amd64.postinst
/var/lib/dpkg/info/libusb-1.0-doc.md5sums
/var/lib/dpkg/info/libusb-1.0-0-dev:amd64.list
/var/lib/dpkg/info/libusb-0.1-4:amd64.postrm
/var/lib/dpkg/info/libusb-0.1-4:amd64.shlibs
/var/lib/dpkg/info/libusb-0.1-4:amd64.symbols
/var/lib/dpkg/info/libusb-0.1-4:amd64.postinst
/var/lib/dpkg/info/libusb-0.1-4:amd64.list
/var/lib/dpkg/info/libusb-0.1-4:amd64.md5sums
最佳答案
将实际的共享库链接到您拥有的.Net Core版本的共享库位置。我设法使用以下方法加载了库:
ln -s /lib/x86_64-linux-gnu/libusb-1.0.so.0 /opt/dotnet/shared/Microsoft.NETCore.App/1.1.0/libusb-1.0.dll
关于c# - 使用ASP.NET Core的跨平台USB通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41610802/
我在一本名为 "USB in a NutShell" 的相当棒的书中找到了中断传输提供可靠的传输(通过错误检测和自动重试)。 但我想知道,这能保证有一天不会按顺序交换转移吗?至于总线是串行的,我的猜测
USB 2.0 specifies 4 种传输类型(在第 5.4 节传输类型中): 控制转移 同步传输 中断传输 批量转账 第 5.8 节说批量传输提供: Access to the USB on a
在我正在研究的 SoC 中,有 USB EHCI 兼容 Controller 。 所有 EHCI Controller 都可以作为主机或设备工作吗? EHCI Linux 驱动程序是否涵盖此类 Con
我有一个 USB 调制解调器,它经常掉线。发生这种情况时,我将其从 USB 端口拔出并重新插入,它会立即返回信号;我可以编写一个程序来执行此操作而无需物理断开调制解调器与端口的连接吗? 最佳答案 正如
我正在尝试使用 libusb 与 USB 设备通信,但我觉得自己在比赛的第一站被绊倒了。我确切地知道我需要与哪些端点交谈,等等,但我什至做不到那么远。本质上,我有: usb_device *dev =
是否有工具可以验证在枚举过程中读取的 USB 设备描述符?我遇到过这样的情况,我购买的设备(实验室设备)的 USB 设备描述符不是很有效,并且无法被操作系统正确识别为“加载设备描述符失败”。我知道这并
我正在从事一个需要将信号从外部世界传输到计算机的项目。我有一个生成模拟信号的源,这个信号需要通过 USB 在 PC 上传输。这是我的问题:什么是接口(interface)? 我从源头获得的模拟信号,是
我想知道降低/提高 USB 端口的输出功率在技术上是否可行? 我自己也持怀疑态度,但我要求确定。 最佳答案 如上所述,是的。要获得超过 500mA (USB 2.0) 的电流,请使用组合电缆并联两个或
我正在尝试制作一个 HID USB 设备。我搜索了一下,发现键盘的输出有 8 个字节。第一个字节是修饰符,第二个字节是保留字节,其余 6 个字节是关键代码。我认为在某些情况下,例如“prtsc”,需要
我们正在寻找一个虚拟 USB 链接模拟器;这个程序或服务应该 链接虚拟COM port到仅接受 USB 作为数据链路的应用程序。 virtual COM port是 VSPE来自 Eterlogic
我一直在尝试监视何时插入或移除 USB 设备,它似乎工作得很好。现在唯一困扰我的是,每次我插入或移除设备时,都会多次触发该事件。 我可以毫无问题地将事件分组,但我很好奇为什么它首先发生。 这是我正在使
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我正在为 USB 设备编写代码。假设 USB 主机开始控制读取传输以从设备读取一些数据,并且请求的数据量(设置数据包中的 wLength)是端点 0 最大数据包大小的倍数。那么在主机接收到所有数据后(
我们正在开发一个带有 arm7(current: LPC2368) 的发送器设备。 本设备采样一个 mv 信号,A/D,并需要将此信号数据发送到 PC。(连续) 同时,PC 需要向 arm7 发送命令
我希望能够使用通过 USB 连接到 PC 的 IR 远程传感器打开和关闭我的 PC。该传感器是使用 AVR 微处理器和 V-USB 软件 USB 实现实现的定制 PCB。 现在,用软件关掉电脑是没有问
我正在使用 STM32L151 与使用 USB CDC 的 PC 进行通信。我使用 STM32 HAL 库来创建我的项目。 我发现 USB 以 1 ms 的间隔发送数据,每次发送 64 个字节。那么,
我们有一个设备要求我们在插入之前安装驱动程序,否则我们需要删除 Windows 8 和 10 自动下载的驱动程序。 我们如何制作一个无论先插还是不插都能正确安装的USB驱动安装器? 最佳答案 在 Wi
我需要填充 USB 存储器,我希望其他人能够以简单的方式重复此操作。所以我不想写“找到一个填满内存的文件”,所以他们必须四处寻找这样的文件。 我想生成 X MB 的数据并将其写入一个文件,然后可以将其
我有一个 Android 平板电脑,它有一个迷你 USB 端口和一个 USB 端口,我想编写一个与 USB key 通信的应用程序。我写了一个demo来找出U盘,但是没有任何反应。 令我不安的是,如果
我正在尝试使用 Android USB Host API 读取我的 USB 游戏 Controller 数据,一旦我让它工作,我将连接其他设备进行测试。我的游戏 Controller 使用 OTG 线
我是一名优秀的程序员,十分优秀!