usb over ip
网络USB端口转IP
alpine linux 安装
編輯設定檔 使用
vi或nano編輯器打開檔案:vi /etc/apk/repositories取消註解 Community 行 在檔案中,您會看到類似下面的內容。找到指向您版本 (
v3.22) 的community軟體庫那一列,並將其最前面的#號刪除。修改前,它看起來像這樣 (注意前面的
#):http://mirrors.aliyun.com/alpine/v3.22/main #http://mirrors.aliyun.com/alpine/v3.22/community修改後,請把它變成這樣 (前面的
#已被刪除):http://mirrors.aliyun.com/alpine/v3.22/main http://mirrors.aliyun.com/alpine/v3.22/community修改完後,儲存並退出編輯器 (
vi中是按Esc然後輸入:wq)。再次執行安裝 現在,重新執行指令。系統會先從
community軟體庫更新列表,然後就能找到並安裝usbip-utils了。apk update apk add usbip-utils eudev切换到 eudev Alpine 提供了一个方便的工具 setup-devd 来切换设备管理器。
setup-devd udev执行此命令后,系统将配置为使用 eudev 并启动相关服务。
在 Alpine Linux 上编写脚本以自动挂载新的 USBIP 设备
本指南将详细说明如何在 Alpine Linux 系统上创建一个脚本,以便在插入新的 USB 设备时,通过 USB/IP 自动将其共享和附加。我们将使用 eudev(udev 的一个分支)来检测新设备,并执行一个脚本来完成 usbip 的相关操作。
整体流程
- 安装必要的软件: 在 Alpine Linux 上安装
usbip-utils和eudev。 - 配置 USB/IP 服务端 (Server): 这是物理连接 USB 设备的机器。
- 创建 udev 规则: 编写一条规则,当新的 USB 设备插入时,自动执行一个脚本。
- 编写自动绑定脚本: 该脚本负责将新设备绑定到 USB/IP 驱动。
- 配置 USB/IP 客户端 (Client): 这是将要远程访问 USB 设备的机器。
- 编写自动附加脚本 (客户端): 该脚本将自动发现并附加(attach)服务端共享的设备。
第一步:在 Alpine Linux 上安装 usbip-utils 和 eudev
Alpine Linux 默认使用 mdev 作为设备管理器。为了实现更复杂的规则和脚本触发,我们将安装并切换到 eudev。
安装软件包: 打开终端,执行以下命令来安装
usbip-utils(用于 USB/IP 功能) 和eudev(用于设备事件管理)。apk update apk add usbip-utils eudev切换到 eudev: Alpine 提供了一个方便的工具
setup-devd来切换设备管理器。setup-devd udev执行此命令后,系统将配置为使用
eudev并启动相关服务。
第二步:配置 USB/IP 服务端 (Server)
服务端是物理插入 USB 设备的 Alpine Linux 机器。
加载内核模块: 确保
usbip_host内核模块已加载。modprobe usbip_host为了让系统启动时自动加载此模块,可以将其添加到
/etc/modules-load.d/目录下的一个配置文件中。echo "usbip_host" > /etc/modules-load.d/usbip.conf启动 USB/IP 守护进程: 启动
usbipd守护进程来监听来自网络的连接。-D参数使其在后台运行。usbipd -D
第三步:创建 udev 规则 (服务端)
udev 规则让我们可以在设备连接或断开时执行特定操作。我们将创建一个规则,在任何新的 USB 设备插入时(ACTION=="add"),运行我们的绑定脚本。
创建规则文件: 在
/etc/udev/rules.d/目录下创建一个新的规则文件。文件名以数字开头以控制顺序,以.rules结尾。touch /etc/udev/rules.d/90-usbip-auto-bind.rules编辑规则文件: 使用文本编辑器(如
vi或nano)打开该文件,并添加以下内容。这条规则会匹配所有新添加的 USB 设备,并执行/usr/local/sbin/usbip-bind.sh脚本,同时将设备的busid作为参数传递给脚本。ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", RUN+="/usr/local/sbin/usbip-bind.sh $attr{busnum}-$attr{devpath}"规则解释:
ACTION=="add": 仅当设备被添加时触发。SUBSYSTEM=="usb": 仅匹配 USB 子系统。ENV{DEVTYPE}=="usb_device": 确保我们操作的是整个 USB 设备,而不是其接口。RUN+="/usr/local/sbin/usbip-bind.sh ...": 执行指定的脚本。$attr{busnum}-$attr{devpath}: 这些是udev提供的设备属性,组合起来可以形成usbip所需的busid(例如1-1.2)。
第四步:编写自动绑定脚本 (服务端)
此脚本将被 udev 规则调用,负责将新设备绑定到 usbip_host 驱动,使其可以被远程客户端发现和附加。
创建脚本文件:
mkdir -p /usr/local/sbin touch /usr/local/sbin/usbip-bind.sh chmod +x /usr/local/sbin/usbip-bind.sh编辑脚本文件: 使用文本编辑器打开
/usr/local/sbin/usbip-bind.sh并添加以下内容:
#!/bin/sh
LOG_FILE="/var/log/usbip-auto-bind.log"
BUSID=$1
echo "$(date): New USB device detected with busid: ${BUSID}" >> ${LOG_FILE}
sleep 2
/usr/sbin/usbip bind -b ${BUSID} >> ${LOG_FILE} 2>&1
if [ $? -eq 0 ]; then
echo "$(date): Successfully bound device ${BUSID} to usbip_host" >> ${LOG_FILE}
else
echo "$(date): Failed to bind device ${BUSID}" >> ${LOG_FILE}
fi重新加载 udev 规则: 为了使新的规则和脚本生效,请重新加载
udev规则。udevadm control --reload-rules
现在,当您在服务端插入任何新的 USB 设备时,它应该会自动被绑定到 USB/IP。您可以通过运行 usbip list -l 来验证,绑定的设备会显示在该列表中。