Chia sẻ ổ USB qua mạng


8

Tôi đang tìm kiếm một phương pháp miễn phí để chia sẻ thiết bị USB qua mạng. Tôi đã nhận được một RaspberryPi (raspbian) có thiết bị USB được kết nối. Tôi muốn có thể nhận và gửi lệnh đến thiết bị này từ máy chủ Linux của tôi.

Tôi đã thử remserialnhưng tôi không thể kết nối máy khách với máy chủ. tôi cũng đã thử VirtualHerenhưng nó bị sập

Bạn có biết một số giải pháp miễn phí để làm điều đó?

BIÊN TẬP :

Thx cho hướng dẫn này, tôi đã thử nó nhưng tôi gặp một số rắc rối:

pi@raspberrypi /boot $ zcat /proc/config.gz |grep USBIP
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_HOST=m
# CONFIG_USBIP_DEBUG is not set
pi@raspberrypi /boot $ sudo modprobe usbip-core
pi@raspberrypi /boot $ sudo modprobe usbip-host
pi@raspberrypi /boot $ sudo usbipd -D

pi@raspberrypi /boot $ usbip list -l
Local USB devices
=================
- busid 1-1 (0424:9514)
     1-1:1.0 -> hub
- busid 1-1.1 (0424:ec00)
     1-1.1:1.0 -> smsc95xx
- busid 1-1.3 (0403:6010)
     1-1.3:1.0 -> unknown
     1-1.3:1.1 -> unknown
- busid 1-1.4 (04f2:1126)
     1-1.4:1.0 -> usbhid
- busid 1-1.5 (04f2:1125)
     1-1.5:1.0 -> usbhid
     1-1.5:1.1 -> usbhid

pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.0 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.1 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "add 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.0 failed
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.1 failed
usbip: error: could not bind device to usbip-host
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "del 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
  pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3:1.1
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
  running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:143:[unbind_other]
  problem getting device attributes: No such file or directory
usbip: error: could not unbind driver from device on busid 1-1.3:1.1
pi@raspberrypi /boot $

nó có thể là gì?

Câu trả lời:


3

bạn có thể sử dụng phần mềm usbip này và đây là cách thiết lập phần mềm và sử dụng nó trên cả phía máy chủ và máy khách

Ghi chú:

  1. Trong hướng dẫn này sử dụng server server1.example.com with IP 192.168.0.100client client1.example.com with IP 192.168.0.101, cả chạy Ubuntu Các cài đặt này có thể khác nhau đối với bạn, vì vậy bạn phải thay thế chúng khi thích hợp.

  2. Ngoài ra Tài khoản được sử dụng trong hướng dẫn này là rootnhư vậy nếu một lệnh không hoạt động hoặc sử dụng roothoặc sử dụng sudotrước lệnh

Cài đặt và sử dụng USB / IP trên máy chủ

Chúng tôi có thể cài đặt usbip như sau:

apt-get install usbip

Sau đó, chúng tôi tải các mô-đun hạt nhân usbip:

modprobe usbip

modprobe usbip_common_mod

Để kiểm tra xem chúng có thực sự được tải không, hãy chạy:

lsmod | grep usbip

Đầu ra phải tương tự như cái này:

root@server1:~# lsmod | grep usbip
usbip                  15124  0
usbip_common_mod       13605  1 usbip
root@server1:~#

Để đảm bảo rằng cả hai mô-đun được tải tự động bất cứ khi nào bạn khởi động hệ thống, bạn có thể thêm chúng vào / etc / mô-đun:

vi /etc/modules

[...]
usbip
usbip_common_mod

Bây giờ chúng ta có thể bắt đầu trình nền usbip:

root@server1:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!

Bây giờ hãy gắn thiết bị USB mà bạn muốn xuất sang máy chủ - Tôi đang sử dụng ổ flash USB SanDisk tại đây.

Thực hiện lệnh lsusb

để tìm ID nhà cung cấp / thiết bị tương ứng ở dạng:

Bus XXX Device YYY: ID VendorID:DeviceID

Đầu ra trên máy chủ của tôi như sau:

root@server1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ID nhà cung cấp / thiết bị của ổ flash USB SanDisk của tôi là 0781: 5151.

Bây giờ chạy

usbip_bind_driver --list
root@server1:~# usbip_bind_driver --list
List USB devices
 - busid 1-1 (0781:5151)
     1-1:1.0 -> usb-storage

Như bạn thấy, ID nhà cung cấp / thiết bị của ổ flash USB SanDisk của tôi (0781: 5151) tương ứng với BusID 1-1. Chúng tôi cần điều này BUSIDđể gắn thiết bị USB vào máy chủ:

root@server1:~# usbip_bind_driver --usbip 1-1
** (process:765): DEBUG:  1-1:1.0       -> usb-storage
** (process:765): DEBUG: unbinding interface
** (process:765): DEBUG: write "add 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to usbip, complete!

Thế là xong, giờ chúng ta có thể sử dụng ổ flash USB SanDisk trên máy khách usbip từ xa.

BTW, nếu bạn chạy ...

netstat -tap

... bạn sẽ thấy rằng daemon usbip đang nghe port 3240

vì vậy hãy chắc chắn rằng cổng này không bị chặn bởi tường lửa của bạn:

root@server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      537/sshd
tcp        0      0 *:3240                  *:*                     LISTEN      762/usbipd
tcp        0     52 server1.example.com:ssh 192.168.0.199:4024      ESTABLISHED 667/0
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      537/sshd

Cài đặt và sử dụng USB / IP trên máy khách

Chúng tôi cũng cần cài đặt usbip trên máy khách:

sudo apt-get install usbip

Sau đó, chúng tôi tải vhci-hcdmô-đun hạt nhân:

modprobe vhci-hcd

Để kiểm tra xem nó có thực sự được tải không, hãy chạy:

root@client1:~# lsmod | grep vhci_hcd
vhci_hcd               19800  0
usbip_common_mod       13605  1 vhci_hcd

Để đảm bảo rằng mô-đun được tải tự động bất cứ khi nào bạn khởi động hệ thống, bạn có thể thêm nó vào /etc/modules:

vi /etc/modules

[...]
vhci-hcd

Bây giờ kết nối với máy chủ usbip và nhận danh sách các thiết bị USB có sẵn:

    usbip -l 192.168.0.100
(192.168.0.100 is the IP address of the usbip server.)

Bạn sẽ tìm thấy ổ flash USB SanDisk ở đầu ra (BusID 1-1):

root@client1:~# usbip -l 192.168.0.100
- 192.168.0.100
     1-1: SanDisk Corp. : Cruzer Micro Flash Drive (0781:5151)
        : /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

Để gắn thiết bị đó vào máy khách, hãy chạy:

root@client1:~# usbip -a 192.168.0.100 1-1
8 ports available
port 0 attached

Bây giờ hãy chạy lsusbvà bạn sẽ tìm thấy thiết bị USB từ xa trong đầu ra trên máy khách:

root@client1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bây giờ bạn có thể sử dụng thiết bị USB từ xa như thể nó là một thiết bị USB cục bộ (ví dụ: gắn nó, định dạng, ghi vào nó, đọc mẫu, v.v.).

Tháo thiết bị USB từ xa

Một thiết bị USB từ xa có thể được tháo ra như sau:

khách hàng1:

Chạy...

usbip --port

... Để tìm ra cổng mà thiết bị USB từ xa sử dụng trên máy khách - trong trường hợp này là cổng 00:

root@client1:~# usbip --port
8 ports available

Port 00: <Port in Use> at High Speed(480Mbps)
       SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
       1-1 -> usbip://192.168.0.100:3240/1-1  (remote devid 00010002 (bus/dev 001/002))
       1-1:1.0 used by usb-storage
           /sys/class/bsg/1:0:0:0/device
           /sys/class/scsi_device/1:0:0:0/device
           /sys/class/scsi_disk/1:0:0:0/device
           /sys/class/scsi_host/host1/device
           /sys/class/usb_endpoint/usbdev1.4_ep02/device
           /sys/class/usb_endpoint/usbdev1.4_ep81/device
           /sys/block/sdb/device
Port 01: <Port Available>
Port 02: <Port Available>
Port 03: <Port Available>
Port 04: <Port Available>
Port 05: <Port Available>
Port 06: <Port Available>
Port 07: <Port Available>

Chúng tôi cần số cổng để tháo thiết bị:

usbip -d 00

root@client1:~# usbip -d 00
8 ports available

port 0 detached

Trên máy chủ, chúng tôi sử dụng BUSID (1-1)để liên kết thiết bị USB với hệ thống cục bộ (công tắc - khác liên kết thiết bị với hệ thống cục bộ để thiết bị không còn khả dụng trên mạng nữa):

máy chủ 1:

usbip_bind_driver --other 1-1

root@server1:~# usbip_bind_driver --other 1-1
** (process:7333): DEBUG: write "del 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to other drivers than usbip, complete!

Bây giờ hãy quay lại máy khách và kiểm tra xem thiết bị USB từ xa có còn không:

khách hàng1:

Nếu mọi việc suôn sẻ, nó không nên được liệt kê nữa:

root@client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

Liên kết

http://usbip.sourceforge.net

Nguồn của hướng dẫn (Phía máy chủ)

Nguồn của hướng dẫn (Phía khách hàng)


Lưu ý cho người dùng Ubuntu Trusty (14.04): bạn sẽ cần một hạt nhân được nhập từ Utopic hoặc mới hơn và sử dụng mã nhị phân. Xem để biết thêm thông tin lỗi.launchpad.net/ubfox/+source/usbip/+orms/898003 . Bất kỳ phiên bản Ubuntu cũ nào được hỗ trợ đều không may bị lỗi và xuất xưởng với usbip không hoạt động.
gertvdijk

Kiểm tra câu trả lời này trước khi sử dụng: askubfox.com/a/647071/187689
iman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.