适用于 Windows 的 USB/IP

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: usbip

适用于 Windows 的 USB/IP

构建在 Windows 10 x64 上进行了测试,并且默认情况下为此目标配置了项目。

应该支持 x86/x64 平台。但是,我们目前没有用于测试的 x86 设置。

对于Windows 7用户,更改usbip_stub和usbip_vhci项目的目标操作系统版本Windows 7。

右键单击 Project > Properties > Driver Settings > Target OS version > Windows 7

最近支持的标签版本是 v0.1.0。v0.1.0之后的所有版本都不支持Windows 7或8,因为usbip-win开始使用Windows 10的内核库。

构建工具

Visual Studio 2019 社区 (v142)

如果设置中的平台工具集配置为 v141,也可以使用 VS 2017 (v141) 构建。

Windows SDK 10.0.18362.0(推荐)

VS 2019 (v142):需要 >= 10.0.18xxx

VS 2017 (v141):需要 >= 10.0.17xxx

Windows 驱动程序工具包 Windows 10,版本 1903 (10.0.18362)

还测试了 WDK 10.0.17134 (1803)、10.0.17763 (1809) 和 10.0.18346。

构建过程

打开 usbip_win.sln

如果使用 VS 2017 ,则应调整用户空间项目 ( usbip, usbip_common, usbipd, stubctl) 的SDK 版本。

设置证书驱动程序签名的usbip_stub和usbip_vhci项目

右键单击 Project > Properties > Driver Signing > Test Certificate

浏览到driver/usbip_test.pfx(密码:usbip)

构建解决方案或所需的项目

所有输出文件都在 {Debug,Release}/{x64,x86} 文件夹下创建。

安装

Windows USB/IP 服务器

准备一台 Linux 机器作为 USB/IP 客户端或 Windows usbip-win VHCI 客户端(在内核为 4.15.0-29 的 Ubuntu 16.04 上测试 - 在其他一些版本上观察到 USB/IP 内核模块崩溃)

# modprobe vhci-hcd

安装 USB/IP 测试证书

安装driver/usbip_test.pfx(密码:usbip)

证书应该安装到

“本地计算机”中的“受信任的根证书颁发机构”(不是当前用户)和

“本地计算机”中的“可信发布者”(不是当前用户)

启用测试签名

> bcdedit.exe /set TESTSIGNING ON

重新启动系统以应用

将usbip.exe, usbipd.exe, usb.ids, usbip_stub.sys,复制usbip_stub.inx到目标机器的文件夹中

你可以找到usbip.exe,usbipd.exe,usbip_stub.sys编译后或在输出文件夹中释放页面。

userspace/usb.ids

driver/stub/usbip_stub.inx

查找 USB 设备 ID

您可以从 usbip 列表中获取 id

> usbip.exe list -l

总线 ID 始终为 1。因此usbip.exe列表的输出显示为:

usbip.exe list -l

- busid 1-59 (045e:00cb)

  Microsoft Corp. : Basic Optical Mouse v2.0 (045e:00cb)

- busid 1-30 (80ee:0021)

  VirtualBox : USB Tablet (80ee:0021)

将 USB 设备绑定到 usbip 存根

下一个命令将现有的功能驱动程序替换为 usbip 存根驱动程序

这应该使用管理员权限执行

usbip_stub.inx和usbip_stub.sys文件应该在同一个文件夹中usbip.exe

> usbip.exe bind -b 1-59

跑 usbipd.exe

> usbipd.exe -d -4

TCP端口3240应该被防火墙允许

在 Linux 机器上连接 USB/IP 设备

# usbip attach -r <usbip server ip> -b 1-59

Windows USB/IP 客户端

目前,VHCI 驱动程序有 2 个版本,安装程序不同:

vhci(wdm):原始版本,通过 WDM(Windows 驱动程序模型)实现;

vhci(ude): 新开发的版本完全支持 USB 应用程序并通过 UDE(USB 设备仿真)实现,这是 MS 提供的基于 KMDF(内核模型驱动程序框架)的 USB 虚拟化框架。

准备一台 Linux 机器作为 USB/IP 服务器或 Windows usbip-win 存根服务器 -(在 Ubuntu 16.04(内核 4.15.0-29)、18.04、20.04 上测试)

# modprobe usbip-host

您可以使用虚拟usbip-vstub作为存根服务器

在 USB/IP 服务器上运行 usbipd (Linux)

# usbipd -4 -d

安装 USB/IP 测试证书

安装driver/usbip_test.pfx(密码:usbip)

证书应该安装到

“本地计算机”中的“受信任的根证书颁发机构”(不是当前用户)和

“本地计算机”中的“可信发布者”(不是当前用户)

启用测试签名

> bcdedit.exe /set TESTSIGNING ON

重新启动系统以应用

将 VHCI 驱动程序文件复制到目标机器的文件夹中

如果您正在测试vhci(ude),复制usbip.exe,usbip_vhci_ude.sys,usbip_vhci_ude.inf,usbip_vhci_ude.cat成目标机器的文件夹;

如果您正在测试vhci(wdm),复制usbip.exe,usbip_vhci.sys,usbip_vhci.inf,usbip_root.inf,usbip_vhci.cat成目标机器的文件夹;

您可以在构建后或在发布页面上找到输出文件夹中的所有文件。

安装 USB/IP VHCI 驱动程序

您可以使用usbip.exe或手动安装

使用usbip.exe安装命令

以管理员身份运行 PowerShell 或 CMD

PS> usbip.exe install

前面的命令将根据可用文件安装 UDE 驱动程序或 WDM 驱动程序

(UDE 版本优先)

PS> usbip.exe install -u 如果只有 UDE 驱动程序

PS> usbip.exe install -w 如果仅 WDM 驱动程序

vhci(ude) 手动安装

以管理员身份运行 PowerShell 或 CMD

PS> pnputil /add-driver usbip_vhci_ude.inf

启动设备管理器

从“操作”菜单中选择“添加旧硬件”。

选择“安装我从列表中手动选择的硬件”。

单击“下一步”。

单击“从磁盘安装”,单击“浏览”,选择复制的文件夹,然后单击“确定”。

单击“usbip-win VHCI(ude)”,然后单击“下一步”。

单击“完成添加/删除硬件向导”中的完成。

手动安装 vhci(wdm)

以管理员身份运行 PowerShell 或 CMD

PS> pnputil /add-driver usbip_vhci.inf

启动设备管理器

从“操作”菜单中选择“添加旧硬件”。

选择“安装我从列表中手动选择的硬件”。

单击“下一步”。

单击“从磁盘安装”,单击“浏览”,选择复制的文件夹,然后单击“确定”。

单击“USB/IP VHCI Root”,然后单击“下一步”。

单击“完成添加/删除硬件向导”中的完成。

连接远程 USB 设备

PS> usbip.exe attach -r <usbip server ip> -b 2-2

卸载驱动

PS> usbip.exe uninstall

禁用测试签名

> bcdedit.exe /set TESTSIGNING OFF

重新启动系统以应用

报告错误

usbip-win尚未准备好用于生产。我们可以通过详细的日志找到问题。

如何获取 vhci(wdm) 的 Windows 内核日志

设置注册表项以启用调试过滤器

usbip-win使用DbgPrintEx API 进行内核日志记录。

将以下内容另存为.reg文件并运行或手动插入注册表项

重新启动系统以应用

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]

"IHVDRIVER"=dword:ffffffff

在测试之前运行调试日志查看器程序。

DebugView是查看日志的好工具。

如果您的测试机出现 BSOD(蓝屏死机),您应该通过远程调试获得它。

WinDbg 在虚拟机上获取日志会很好。

如何获取 vhci(ude) 的 Windows 内核日志

新的 vhci(ude) 实现使用 WPP SW 跟踪而不是 DbgPrintEx。

DebugView.exe 无法捕获 VHCI 调试消息

TraceView.exe 是一种很好的实用程序,适用于 WDK 中包含的新方法。

usbip_vhci_ude.pdb 需要文件才能轻松添加跟踪提供程序。

创建一个新的会话登录 TraceView.exe

在“提供者控制 GUID 设置”弹出对话框中选择 PDB 文件单选按钮

指定usbip_vhci_ude.pdb为 PDB 文件

您可以通过在“高级日志会话选项”中进行修改来向 WinDbg 发送实时跟踪消息。

如果您的测试机出现 BSOD(蓝屏死机),您应该通过远程调试获得它。

WinDbg 在虚拟机上获取日志会很好

如何获取usbip转发器日志

usbip-win 通过用户态转发器传输 usbip 数据包。

转发器日志是查看 usbip 数据包内部结构的最佳方式。

编辑usbip_forward.c定义DEBUG_PDU在文件的头部

编译usbip.exe或usbipd.exe

debug_pdu.log 在可执行文件运行的路径上创建。

如何获取linux内核日志

有时需要 Linux 内核日志

# dmesg --follow | tee kernel_log.txt

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Ubuntu 网络协议 Linux
如何在无公网IP环境使用Windows远程桌面Ubuntu
如何在无公网IP环境使用Windows远程桌面Ubuntu
164 0
|
6月前
|
网络协议 安全 文件存储
Windows本地搭建WebDAV服务并使用内网穿透远程访问【无公网IP】
Windows本地搭建WebDAV服务并使用内网穿透远程访问【无公网IP】
|
6月前
|
安全 Linux 网络安全
【Windows】搭建Emby媒体库服务器,实现无公网IP远程访问
【Windows】搭建Emby媒体库服务器,实现无公网IP远程访问
537 0
|
5月前
|
Windows
windows系统bat批处理 网络设置大全 设置静态、动态IP地址
windows系统bat批处理 网络设置大全 设置静态、动态IP地址
1363 2
|
6月前
|
网络协议 Windows
电脑ip在哪里查看?windows系统查看ip地址的8种方法
在Windows系统中,有多种方法可以查看电脑的IP地址。
2502 2
|
6月前
|
安全 Linux 网络安全
Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件
Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件
107 0
|
6月前
|
NoSQL 网络协议 MongoDB
Windows公网远程连接MongoDB数据库【无公网IP】
Windows公网远程连接MongoDB数据库【无公网IP】
|
6月前
|
网络协议 安全 Linux
无公网IP环境Windows系统使用VNC远程连接Deepin桌面
无公网IP环境Windows系统使用VNC远程连接Deepin桌面
|
11月前
|
网络协议 NoSQL MongoDB
通过内网穿透实现在无公网IP下,Windows远程连接MongoDB数据库
通过内网穿透实现在无公网IP下,Windows远程连接MongoDB数据库
|
Ubuntu 网络协议 Linux
【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04
【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04