尝试使用 usbip 将 USB 设备从 Raspbian 永久共享到 Ubuntu

尝试使用 usbip 将 USB 设备从 Raspbian 永久共享到 Ubuntu

我成功地将 Raspberry Pi(运行 Raspbian)的 USB 端口上的设备共享到本地服务器上的 Ubuntu 虚拟机,使用通用协议

以下是我正在运行的命令列表:

服务器端(树莓派):

modprobe usb-core
modprobe usb-host
sudo usbipd -D
sudo usbip --debug bind -b 1-1.2

客户端(Ubuntu 服务器):

modprobe vici-hcd
sudo usbip attach 192.168.100.100 1-1.2

它运行良好,但每次本地网络出现问题时,我都需要在两端重新执行所有流程。这使得它在生产模式下使用起来非常困难,因为我希望这个系统可靠且有弹性。

我将模块添加到/etc/模块让它们在启动时启动(不确定是否有效),但在这种情况下,问题发生在没有任何重启的情况下。

我正在编写两个脚本来在双方定期运行这些命令,但考虑到服务器必须在客户端连接之前进行绑定,这仍然不是一个理想的解决方案。

我做错了吗?有没有人找到一种可靠的方法让 usbip 正常工作,而不需要一直重新配置所有内容?

答案1

usbip 服务器上有两个步骤,usbip 客户端上也有两个步骤。两者的过程相同,只是名称略有不同。

步骤1在服务器和客户端上:在启动时加载加载模块。

这将替换这些sudo modprobe线条。

在启动时运行 modprobe以获得详细的解释和替代方案。

编辑/etc/modules(当然使用 sudo),并添加该机器的模块名称。

例子:

$ sudo nano /etc/modules

usb-core
usb-host

现在这些模块将在启动时添加(modprobe)。

第2步在服务器和客户端上:创建一个 systemd 服务文件,以便在 usbip 客户端和服务器上轻松控制、重置和启动。

这个比较复杂。它需要理解 systemd 和基本的 shell 命令。

etc/systemd/system/usbipd.service这是您必须创建的 usbip 服务器的示例 systemd文件:

[Unit]
Description=usbip host daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/usbipd -D
ExecStartPost=/bin/sh -c "/usr/sbin/usbip bind --$(/usr/sbin/usbip list -p -l | grep '#usbid=10c4:8a2a#' | cut '-d#' -f1)"  // Edit this line to match your USB device
ExecStop=/bin/sh -c "/usr/lib/linux-tools/$(uname -r)/usbip detach --port=$(/usr/lib/linux-tools/$(uname -r)/usbip port | grep '<Port in Use>' | sed -E 's/^Port ([0-9][0-9]).*/\1/')"

[Install]
WantedBy=multi-user.target

您可以看到 .service 文件在启动时以服务器(守护进程)模式运行 usbip,并在停止时终止服务器。这意味着您可以使用常规的 systemctl 命令来运行和查询服务器:

systemctl status usbipd.service          // status and troubleshooting
sudo systemctl start usbipd.service      // start
sudo systemctl stop usbipd.service       // stop
sudo systemctl restart usbipd.service    // stop, then start again
sudo systemctl enable usbipd.service     // start at boot forever from now on
sudo systemctl enable usbipd.service     // leave dormant at boot forever from now on

现在我可以让 usbipd 在服务器启动时自动启动,并且可以使用普通的 ssh 查询它的状态。

客户端的相当相似的 systemd 文件留给学生作为练习。

相关内容