Lưu ý
Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.
- Bản gốc:
- Người dịch:
Google Translate (machine translation)
- Phiên bản gốc:
8541d8f725c6
Cảnh báo
Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.
Giao thức USB/IP¶
Ngành kiến trúc¶
Giao thức USB/IP tuân theo kiến trúc máy chủ/máy khách. Máy chủ xuất Thiết bị USB và khách hàng nhập chúng. Trình điều khiển thiết bị cho xuất khẩu Thiết bị USB chạy trên máy khách.
Khách hàng có thể yêu cầu danh sách các thiết bị USB đã xuất. Để có được danh sách máy khách mở kết nối TCP/IP tới máy chủ và gửi OP_REQ_DEVLIST gói trên đầu kết nối TCP/IP (vì vậy OP_REQ_DEVLIST thực tế có thể được gửi thành một hoặc nhiều phần ở lớp vận chuyển cấp thấp). Máy chủ gửi lại gói OP_REP_DEVLIST liệt kê các thiết bị USB đã xuất. Cuối cùng Kết nối TCP/IP bị đóng.
- máy chủ ảo điều khiển máy chủ usb
“khách hàng” “máy chủ”
- (nhập thiết bị USB) (xuất thiết bị USB)
ZZ0000ZZ ZZ0001ZZ ZZ0002ZZ ZZ0003ZZ ZZ0004ZZ ZZ0005ZZ ZZ0006ZZ
Khi khách hàng biết danh sách các thiết bị USB đã xuất, nó có thể quyết định sử dụng một thiết bị của họ. Đầu tiên, máy khách mở kết nối TCP/IP tới máy chủ và gửi gói OP_REQ_IMPORT. Máy chủ trả lời bằng OP_REP_IMPORT. Nếu quá trình nhập thành công, kết nối TCP/IP vẫn mở và sẽ được sử dụng để chuyển lưu lượng URB giữa máy khách và máy chủ. Khách hàng có thể gửi hai loại gói: USBIP_CMD_SUBMIT để gửi URB và USBIP_CMD_UNLINK để hủy liên kết URB đã gửi trước đó. Những câu trả lời của máy chủ có thể lần lượt là USBIP_RET_SUBMIT và USBIP_RET_UNLINK.
- máy chủ ảo điều khiển máy chủ usb
“khách hàng” “máy chủ”
- (nhập thiết bị USB) (xuất thiết bị USB)
ZZ0000ZZ ZZ0001ZZ ZZ0002ZZ ZZ0003ZZ ZZ0004ZZ ZZ0005ZZ ZZ0006ZZ ZZ0007ZZ ZZ0008ZZ ZZ0009ZZ ZZ0010ZZ ZZ0011ZZ ZZ0012ZZ ZZ0013ZZ ZZ0014ZZ ZZ0015ZZ ZZ0016ZZ ZZ0017ZZ ZZ0018ZZ ZZ0019ZZ ZZ0020ZZ ZZ0021ZZ ZZ0022ZZ ZZ0023ZZ ZZ0024ZZ ZZ0025ZZ ZZ0026ZZ ZZ0027ZZ ZZ0028ZZ ZZ0029ZZ ZZ0030ZZ ZZ0031ZZ ZZ0032ZZ ZZ0033ZZ ZZ0034ZZ ZZ0035ZZ ZZ0036ZZ ZZ0037ZZ ZZ0038ZZ ZZ0039ZZ ZZ0040ZZ
Đối với UNLINK, lưu ý rằng sau khi USBIP_RET_UNLINK thành công, URB đã được hủy liên kết bài nộp sẽ không có USBIP_RET_SUBMIT tương ứng (điều này được giải thích trong hàm stub_recv_cmd_unlink của driver/usb/usbip/stub_rx.c).
- máy chủ ảo điều khiển máy chủ usb
“khách hàng” “máy chủ”
- (nhập thiết bị USB) (xuất thiết bị USB)
ZZ0000ZZ ZZ0001ZZ ZZ0002ZZ ZZ0003ZZ ZZ0004ZZ ZZ0005ZZ ZZ0006ZZ ZZ0007ZZ ZZ0008ZZ ZZ0009ZZ ZZ0010ZZ ZZ0011ZZ ZZ0012ZZ ZZ0013ZZ ZZ0014ZZ ZZ0015ZZ ZZ0016ZZ ZZ0017ZZ ZZ0018ZZ ZZ0019ZZ ZZ0020ZZ ZZ0021ZZ ZZ0022ZZ ZZ0023ZZ ZZ0024ZZ ZZ0025ZZ ZZ0026ZZ ZZ0027ZZ ZZ0028ZZ ZZ0029ZZ ZZ0030ZZ
Các trường nằm trong thứ tự byte mạng (big endian) có nghĩa là quan trọng nhất byte (MSB) được lưu trữ ở địa chỉ thấp nhất.
Phiên bản giao thức¶
Phiên bản USBIP được ghi lại là v1.1.1. Sự biểu diễn nhị phân của điều này phiên bản trong tiêu đề thư là 0x0111.
Điều này được xác định trong tools/usb/usbip/configure.ac
Định dạng tin nhắn¶
- OP_REQ_DEVLIST:
Truy xuất danh sách các thiết bị USB đã xuất.
ZZ0000ZZ Chiều dài ZZ0001ZZ Mô tả | +============+=========+================================================================================================================================== Phiên bản ZZ0002ZZ 2 ZZ0003ZZ USBIP | +----------+--------+-------------+---------------------------------------------------+ ZZ0004ZZ 2 ZZ0005ZZ Mã lệnh: Truy xuất danh sách USB đã xuất | Thiết bị ZZ0006ZZ ZZ0007ZZ. | +----------+--------+-------------+---------------------------------------------------+ ZZ0008ZZ 4 ZZ0009ZZ Trạng thái: chưa sử dụng, sẽ được đặt thành 0 | +----------+--------+-------------+---------------------------------------------------+
- OP_REP_DEVLIST:
Trả lời kèm theo danh sách các thiết bị USB đã xuất.
Offset |
Length |
Value |
Description |
|---|---|---|---|
0 |
2 |
USBIP version |
|
2 |
2 |
0x0005 |
Reply code: The list of exported USB devices. |
4 |
4 |
0x00000000 |
Status: 0 for OK |
8 |
4 |
n |
Number of exported devices: 0 means no exported devices. |
0x0C |
From now on the exported n devices are described, if any. If no devices are exported the message ends with the previous “number of exported devices” field. |
||
256 |
path: Path of the device on the host exporting the USB device, string closed with zero byte, e.g. “/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-2” The unused bytes shall be filled with zero bytes. |
||
0x10C |
32 |
busid: Bus ID of the exported device, string closed with zero byte, e.g. “3-2”. The unused bytes shall be filled with zero bytes. |
|
0x12C |
4 |
busnum |
|
0x130 |
4 |
devnum |
|
0x134 |
4 |
speed |
|
0x138 |
2 |
idVendor |
|
0x13A |
2 |
idProduct |
|
0x13C |
2 |
bcdDevice |
|
0x13E |
1 |
bDeviceClass |
|
0x13F |
1 |
bDeviceSubClass |
|
0x140 |
1 |
bDeviceProtocol |
|
0x141 |
1 |
bConfigurationValue |
|
0x142 |
1 |
bNumConfigurations |
|
0x143 |
1 |
bNumInterfaces |
|
0x144 |
m_0 |
From now on each interface is described, all together bNumInterfaces times, with the following 4 fields: |
|
1 |
bInterfaceClass |
||
0x145 |
1 |
bInterfaceSubClass |
|
0x146 |
1 |
bInterfaceProtocol |
|
0x147 |
1 |
padding byte for alignment, shall be set to zero |
|
0xC + i*0x138 + m_(i-1)*4 |
The second exported USB device starts at i=1 with the path field. |
- OP_REQ_IMPORT:
Yêu cầu nhập (đính kèm) thiết bị USB từ xa.
ZZ0000ZZ Chiều dài ZZ0001ZZ Mô tả | +============+=========+================================================================================================================================== Phiên bản ZZ0002ZZ 2 ZZ0003ZZ USBIP | +----------+--------+-------------+---------------------------------------------------+ ZZ0004ZZ 2 ZZ0005ZZ Mã lệnh: nhập thiết bị USB từ xa. | +----------+--------+-------------+---------------------------------------------------+ ZZ0006ZZ 4 ZZ0007ZZ Trạng thái: chưa sử dụng, sẽ được đặt thành 0 | +----------+--------+-------------+---------------------------------------------------+ ZZ0008ZZ 32 ZZ0009ZZ busid: busid của thiết bị được xuất trên | Máy chủ từ xa ZZ0010ZZ ZZ0011ZZ. Các giá trị có thể được lấy | ZZ0012ZZ ZZ0013ZZ từ trường thông báo OP_REP_DEVLIST.busid. | ZZ0014ZZ ZZ0015ZZ Một chuỗi được đóng bằng 0, các byte không được sử dụng | ZZ0016ZZ ZZ0017ZZ sẽ được điền bằng số không. | +----------+--------+-------------+---------------------------------------------------+
- OP_REP_IMPORT:
Trả lời nhập (đính kèm) thiết bị USB từ xa.
ZZ0000ZZ Chiều dài ZZ0001ZZ Mô tả | +============+=========+================================================================================================================================== Phiên bản ZZ0002ZZ 2 ZZ0003ZZ USBIP | +----------+--------+-------------+---------------------------------------------------+ ZZ0004ZZ 2 ZZ0005ZZ Mã trả lời: Trả lời nhập. | +----------+--------+-------------+---------------------------------------------------+ ZZ0006ZZ 4 ZZ0007ZZ Trạng thái: | ZZ0008ZZ ZZ0009ZZ | ZZ0010ZZ ZZ0011ZZ - 0 là OK | ZZ0012ZZ ZZ0013ZZ - 1 lỗi | +----------+--------+-------------+---------------------------------------------------+ ZZ0014ZZ ZZ0015ZZ Từ giờ trở đi sẽ có thông tin chi tiết về | Thiết bị ZZ0016ZZ ZZ0017ZZ, nếu trường trạng thái trước đó là OK (0), | ZZ0018ZZ ZZ0019ZZ nếu không thì phản hồi sẽ kết thúc bằng trường trạng thái. | +----------+--------+-------------+---------------------------------------------------+ Đường dẫn ZZ0020ZZ 256 ZZ0021ZZ: Đường dẫn của thiết bị trên máy chủ xuất | Thiết bị ZZ0022ZZ ZZ0023ZZ USB, chuỗi được đóng bằng 0 byte, ví dụ: | ZZ0024ZZ ZZ0025ZZ “/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-2” | ZZ0026ZZ ZZ0027ZZ Các byte không sử dụng sẽ được điền bằng 0 | ZZ0028ZZ ZZ0029ZZ byte. | +----------+--------+-------------+---------------------------------------------------+ ZZ0030ZZ 32 ZZ0031ZZ busid: ID bus của thiết bị đã xuất, chuỗi | ZZ0032ZZ ZZ0033ZZ được đóng bằng 0 byte, ví dụ: “3-2”. Chưa sử dụng | Các byte ZZ0034ZZ ZZ0035ZZ sẽ được lấp đầy bằng các byte bằng 0. | +----------+--------+-------------+---------------------------------------------------+ ZZ0036ZZ 4 ZZ0037ZZ busnum | +----------+--------+-------------+---------------------------------------------------+ ZZ0038ZZ 4 ZZ0039ZZ phát triển | +----------+--------+-------------+---------------------------------------------------+ ZZ0040ZZ 4 ZZ0041ZZ tốc độ | +----------+--------+-------------+---------------------------------------------------+ ZZ0042ZZ 2 ZZ0043ZZ idVendor | +----------+--------+-------------+---------------------------------------------------+ ZZ0044ZZ 2 ZZ0045ZZ idSản phẩm | +----------+--------+-------------+---------------------------------------------------+ ZZ0046ZZ 2 ZZ0047ZZ bcdThiết bị | +----------+--------+-------------+---------------------------------------------------+ ZZ0048ZZ 1 ZZ0049ZZ bDeviceClass | +----------+--------+-------------+---------------------------------------------------+ ZZ0050ZZ 1 ZZ0051ZZ bDeviceSubClass | +----------+--------+-------------+---------------------------------------------------+ ZZ0052ZZ 1 ZZ0053ZZ bGiao thức thiết bị | +----------+--------+-------------+---------------------------------------------------+ ZZ0054ZZ 1 ZZ0055ZZ bConfigurationValue | +----------+--------+-------------+---------------------------------------------------+ ZZ0056ZZ 1 ZZ0057ZZ bNumConfigurations | +----------+--------+-------------+---------------------------------------------------+ ZZ0058ZZ 1 ZZ0059ZZ bNumGiao diện | +----------+--------+-------------+---------------------------------------------------+
Bốn lệnh sau đây có một tiêu đề cơ bản chung được gọi là ‘usbip_header_basic’ và các tiêu đề của chúng, được gọi là ‘usbip_header’ (trước tải trọng transfer_buffer), có cùng độ dài, do đó cần có phần đệm.
usbip_header_basic:
ZZ0000ZZ Chiều dài ZZ0001ZZ +============+=========+================================================================================================================== ZZ0002ZZ 4 ZZ0003ZZ +----------+--------+---------------------------------------------------+ ZZ0004ZZ 4 ZZ0005ZZ ZZ0006ZZ ZZ0007ZZ ZZ0008ZZ ZZ0009ZZ +----------+--------+---------------------------------------------------+ ZZ0010ZZ 4 ZZ0011ZZ ZZ0012ZZ ZZ0013ZZ ZZ0014ZZ ZZ0015ZZ ZZ0016ZZ ZZ0017ZZ devnum); | ZZ0018ZZ ZZ0019ZZ +----------+--------+---------------------------------------------------+ ZZ0020ZZ 4 ZZ0021ZZ ZZ0022ZZ ZZ0023ZZ ZZ0024ZZ ZZ0025ZZ ZZ0026ZZ ZZ0027ZZ ZZ0028ZZ ZZ0029ZZ ZZ0030ZZ ZZ0031ZZ +----------+--------+---------------------------------------------------+ ZZ0032ZZ 4 ZZ0033ZZ ZZ0034ZZ ZZ0035ZZ ZZ0036ZZ ZZ0037ZZ +----------+--------+---------------------------------------------------+
- USBIP_CMD_SUBMIT:
Gửi URB
ZZ0000ZZ Chiều dài ZZ0001ZZ +============+=========+================================================================================================================== ZZ0002ZZ 20 ZZ0003ZZ +----------+--------+---------------------------------------------------+ ZZ0004ZZ 4 ZZ0005ZZ ZZ0006ZZ ZZ0007ZZ ZZ0008ZZ ZZ0009ZZ ZZ0010ZZ ZZ0011ZZ ZZ0012ZZ ZZ0013ZZ ZZ0014ZZ ZZ0015ZZ ZZ0016ZZ ZZ0017ZZ +----------+--------+---------------------------------------------------+ ZZ0018ZZ 4 ZZ0019ZZ ZZ0020ZZ ZZ0021ZZ +----------+--------+---------------------------------------------------+ ZZ0022ZZ 4 ZZ0023ZZ ZZ0024ZZ ZZ0025ZZ ZZ0026ZZ ZZ0027ZZ +----------+--------+---------------------------------------------------+ ZZ0028ZZ 4 ZZ0029ZZ ZZ0030ZZ ZZ0031ZZ +----------+--------+---------------------------------------------------+ ZZ0032ZZ 4 ZZ0033ZZ ZZ0034ZZ ZZ0035ZZ +----------+--------+---------------------------------------------------+ ZZ0036ZZ 8 ZZ0037ZZ ZZ0038ZZ ZZ0039ZZ +----------+--------+---------------------------------------------------+ ZZ0040ZZ và ZZ0041ZZ ZZ0042ZZ ZZ0043ZZ ZZ0044ZZ ZZ0045ZZ ZZ0046ZZ ZZ0047ZZ ZZ0048ZZ ZZ0049ZZ +----------+--------+---------------------------------------------------+ ZZ0050ZZ và ZZ0051ZZ +----------+--------+---------------------------------------------------+
- USBIP_RET_SUBMIT:
Trả lời việc gửi URB
ZZ0000ZZ Chiều dài ZZ0001ZZ +============+=========+================================================================================================================== ZZ0002ZZ 20 ZZ0003ZZ +----------+--------+---------------------------------------------------+ ZZ0004ZZ 4 ZZ0005ZZ ZZ0006ZZ ZZ0007ZZ +----------+--------+---------------------------------------------------+ ZZ0008ZZ 4 ZZ0009ZZ ZZ0010ZZ ZZ0011ZZ +----------+--------+---------------------------------------------------+ ZZ0012ZZ 4 ZZ0013ZZ ZZ0014ZZ ZZ0015ZZ ZZ0016ZZ ZZ0017ZZ +----------+--------+---------------------------------------------------+ ZZ0018ZZ 4 ZZ0019ZZ ZZ0020ZZ ZZ0021ZZ +----------+--------+---------------------------------------------------+ ZZ0022ZZ 4 ZZ0023ZZ +----------+--------+---------------------------------------------------+ ZZ0024ZZ 8 ZZ0025ZZ +----------+--------+---------------------------------------------------+ ZZ0026ZZ và ZZ0027ZZ ZZ0028ZZ ZZ0029ZZ ZZ0030ZZ ZZ0031ZZ ZZ0032ZZ ZZ0033ZZ ZZ0034ZZ ZZ0035ZZ +----------+--------+---------------------------------------------------+ ZZ0036ZZ và ZZ0037ZZ +----------+--------+---------------------------------------------------+
- USBIP_CMD_UNLINK:
Hủy liên kết URB
ZZ0000ZZ Chiều dài ZZ0001ZZ +============+=========+================================================================================================================== ZZ0002ZZ 20 ZZ0003ZZ +----------+--------+---------------------------------------------------+ ZZ0004ZZ 4 ZZ0005ZZ +----------+--------+---------------------------------------------------+ ZZ0006ZZ 24 ZZ0007ZZ +----------+--------+---------------------------------------------------+
- USBIP_RET_UNLINK:
Trả lời hủy liên kết URB
ZZ0000ZZ Chiều dài ZZ0001ZZ +============+=========+================================================================================================================== ZZ0002ZZ 20 ZZ0003ZZ +----------+--------+---------------------------------------------------+ ZZ0004ZZ 4 ZZ0005ZZ ZZ0006ZZ ZZ0007ZZ ZZ0008ZZ ZZ0009ZZ ZZ0010ZZ ZZ0011ZZ ZZ0012ZZ ZZ0013ZZ +----------+--------+---------------------------------------------------+ ZZ0014ZZ 24 ZZ0015ZZ +----------+--------+---------------------------------------------------+
EXAMPLE¶
- Dữ liệu sau được thu thập từ dây bằng Thiết bị giao diện con người (HID)
tải trọng
- CmdIntrIN: 00000001 00000d05 0001000f 00000001 00000001 00000200 00000040 ffffffff 00000000 00000004 00000000 00000000
- CmdGiới thiệu: 00000001 00000d06 0001000f 00000000 00000001 00000000 00000040 ffffffff 00000000 00000004 00000000 00000000
ffffffff860008a784ce5ae2123763000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000
Vào lại: 00000003 00000d06 00000000 00000000 00000000 00000000 00000040 ffffffff 00000000 00000000 00000000 00000000 RetIntrIn: 00000003 00000d05 00000000 00000000 00000000 00000000 00000040 ffffffff 00000000 00000000 00000000 00000000
ffffffff860011a784ce5ae2123763612891b102010000040000000000000000 000000000000000000000000000000000000000000000000000000000000000000000