Thiết lập hệ thống USB-Over-IP Server And Client với Ubuntu 10.04

QuanTriMang.com - Trong bài viết sau, Quản Trị Mạng sẽ giới thiệu với các bạn cách xây dựng, thiết lập hệ thống USB-over-IP server với Ubuntu 10.04 cũng như USB-over-IP client (cùng hoạt động trong môi trường Ubuntu 10.04). Dự án USB/IP được phát triển để áp dụng vào hệ thống chia sẻ các thiết bị hoặc dữ liệu bằng USB qua hệ thống mạng IP. Để chia sẻ các thiết bị USB với đầy đủ thuộc tính, chức năng, hệ thống USB/IP đống gói thêm mô hình “USB I/O messages” vào trong quá trình luân chuyển TCP/IP giữa các máy tính với nhau. Mô hình USB-over-IP này rất hữu ích với các hệ thống thử nghiệm trên máy ảo, ví dụ nếu hệ thống hiện tại không được phép truy cập và can thiệt vào phần cứng của nền tảng host, thì USB-over-IP có thể giúp bạn thực hiện điều đó.

Lưu ý sơ bộ

Trong bài thử nghiệm này chúng ta sử dụng hệ điều hành Ubuntu 10.04 server và client. Máy server có địa chỉ host name server1.example.com và IP 192.168.0.100, máy client với client1.example.com và IP 192.168.0.101, tất cả đều là Ubuntu 10.04. Với hệ thống của bạn thì cần phải thay đổi lại những thông số trên cho phù hợp với bài viết.

Cài đặt và sử dụng USB / IP trên server

Với server1, cài đặt usbip như sau:

aptitude install usbip

Sau đó tải module usbip kernel:

modprobe usbip

modprobe usbip_common_mod

Để kiểm tra lại rằng chúng đã được tải đầy đủ hay chưa, chạy lệnh sau:

lsmod | grep usbip

Kết quả trả về sẽ có dạng như sau nếu thành công:

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

Nếu muốn những module này tự động nạp khi hệ thống khởi động, hãy ghép chúng vào /etc/modules:

vi /etc/modules

[...]
usbip
usbip_common_mod

Bây giờ chúng ta có thể kích hoạt usbip daemon:

usbipd -D

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

Tiếp theo, gắn thiết bị USB cần chia sẻ tới server (tại đây chúng ta sử dụng thiết bị SanDisk USB). Gõ lệnh sau:

lsusb

để tìm thông tin nhà sản xuất, cung cấp cho thiết bị Vendor/Device ID theo mẫu:

Bus XXX Device YYY: ID VendorID:DeviceID

Kết quả tại đây như sau:

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

root@server1:~#

Như tại đây, tham số Vendor/Device ID của SanDisk USB (0781:5151) tương ứng với BUSID 1-1. Chúng ta cần thông số BUSID để gắn với thiết bị USB của server:

usbip_bind_driver --usbip 1-1

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!
root@server1:~#

Và tại thời điểm này, chúng ta có thể sử dụng SanDisk USB trên hệ thống usbip remote client. Nếu bạn sử dụng lệnh:

netstat -tap

bạn sẽ thấy usbip daemon đang “lắng nghe” trên cổng 3240, do đó hãy đảm bảo rằng cổng này không bị chặn bởi firewall:

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
root@server1:~#


Cài đặt và sử dụng USB / IP trên client

Với client1, chúng ta cũng phải cài đặt usbip như trên server:

aptitude install usbip

Sau đó tải module vhci-hcd kernel:

modprobe vhci-hcd

Để kiểm tra lại xem chúng đã được tải hay chưa, sử dụng lệnh sau:

lsmod | grep vhci_hcd

lsmod | grep vhci_hcd

và đây là kết quả trả về:

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

Tương tự như trên, gán những module này vào /etc/modules để hệ thống tự động nạp các module này khi khởi động:

vi /etc/modules

[...]
vhci-hcd

Tiếp theo, kết nối vào usbip server và liệt kê danh sách các thiết bị USB thích hợp:

usbip -l 192.168.0.100

(192.168.0.100 là địa chỉ IP của usbip server)

Và bạn sẽ thấy SanDisk USB trong danh sách trả về (với thông số 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)

root@client1:~#

Để gán thiết bị này vào hệ thống client, sử dụng lệnh sau:

usbip -a 192.168.0.100 1-1

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

port 0 attached
root@client1:~#

Tiếp theo, gõ lệnh:

lsusb

và bạn sẽ thấy thiết bị USB remote trong danh sách hiển thị trên hệ thống client:

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
root@client1:~#

Và bạn có thể thực hiện các thao tác như trên thiết bị USB ngay trên máy tính vậy (ghi, đọc, format … dữ liệu)

Tách thiết bị USB từ xa

Nếu muốn tách bỏ USB, với hệ thống client1 chúng ta sử dụng câu lệnh sau:

usbip --port

để tìm được cổng mà thiết bị USB đang sử dụng trên máy client – trong bài thử nghiệm này là 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>
root@client1:~#

Và điền đúng thông số của cổng đó:

usbip -d 00

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

port 0 detached
root@client1:~#

Còn đối với hệ thống server, chúng ta sẽ sử dụng tham số BUSID (1-1) để gắn USB vào hệ thống local (thông số --other để chuyển đổi qua lại giữa các thiết bị của hệ thống local mà không tồn tại trên hệ thống mạng):

Với server1:

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!
root@server1:~#

Kiểm tra lại trên hệ thống client xem thiết bị USB đó còn tồn tại hay không. Với client1:

lsusb

Nếu tất cả quy trình chính xác, không gặp vấn đề gì cả thì bạn sẽ thấy kết quả liệt kê trong danh sách tương tự như sau:

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

Trên đây là 1 số bước cơ bản để thiết lập, cấu hình và sử dụng hệ thống USB-Over-IP Server And Client trong Ubuntu 10.04. Chúc các bạn thành công!

Thứ Ba, 31/08/2010 10:02
31 👨 526