Số sê-ri giả của thiết bị USB


9

Tôi có một điện thoại di động được kết nối với PC thông qua USB.

Khi xem thông tin thiết bị bằng

sudo udevadm info --attribute-walk

id sản phẩm và nhà cung cấp hiển thị tốt, nhưng không có ATTR {serial} . Một ứng dụng tôi đang sử dụng (Android adb) cần thiết bị báo cáo số sê-ri để hoạt động chính xác.

Có cách nào để tôi có thể giả mạo số sê-ri của thiết bị, ví dụ bằng cách sử dụng quy tắc udev không?

Làm rõ: Câu hỏi không phải là làm thế nào để có được số sê-ri của thiết bị USB, mà là về cách đặt số sê-ri.

Tôi đã có một điện thoại Android không báo cáo số sê-ri qua USB và công cụ adb không thích điều này quá nhiều. Cho đến nay dường như không có bất kỳ giải pháp đơn giản nào cho việc này. Tuy nhiên, có những ngày rất dễ dàng để mua một chiếc điện thoại Android thích hợp để phát triển.


Nó có phải là điện thoại Android không? Nếu không, adb sẽ không hoạt động.
Keith

Tôi đoán rằng adb không thực sự có được thông tin này từ udev. Có lẽ là từ sysfs thay thế, hoặc trực tiếp từ thiết bị. Xem xét vá adb, có lẽ là cách tiếp cận dễ dàng nhất.
derobert

Câu trả lời:


1

Đầu tiên, đảm bảo rằng thiết bị không báo cáo số sê-ri thực sự là vấn đề. adb devicessẽ liệt kê số sê-ri dưới dạng tất cả các dấu hỏi nếu không có quyền truy cập vào thiết bị tương ứng bên dưới /dev/bus/usb/. Cũng nên nhớ adb khởi động một máy chủ, bạn có thể cần phải giết nó để đưa nó vào thăm dò lại.

Giả sử nó thực sự là một vấn đề với thiết bị, tôi đã nhanh chóng kiểm tra mã nguồn adb. Nó xuất hiện register_devicetrong số core/adb/usb_linux.cđọc số sê-ri trực tiếp từ thiết bị. core/adb/usb_libusb.cgọi libusb_get_device_descriptorđể làm điều đó, mà (kiểm tra mã nguồn libusb) lấy nó từ sysfs hoặc trực tiếp từ thiết bị. Vì vậy, không có mánh khóe udev sẽ giúp đỡ, thật không may.

Sự lựa chọn của bạn dường như là:

  • Tìm hiểu làm thế nào để adb hoạt động mà không cần số sê-ri. Có thể, vá adb(nó là nguồn mở). Đây là một câu hỏi nhiều hơn cho Stack Overflow, tôi nghĩ vậy.
  • vá lỗi trình điều khiển usbfs kernel để giả mạo phản hồi yêu cầu của adb. Điều này nghe có vẻ khó hơn nhiều so với việc vá adb cho tôi.
  • vá kernel để cho phép giả mạo serial # trong syfs, giả sử adb đang sử dụng libusb.
  • sửa chữa phần cứng bị hỏng.

Cảm ơn - điều này giải thích nó. Trong trường hợp của tôi, sửa chữa phần cứng bị hỏng là dễ dàng hơn (mua phần cứng tốt hơn).
Ralf

1

Nếu bạn biết nút thiết bị của thiết bị cụ thể (ví dụ / dev / sdb), bạn có thể tra cứu nó bằng lệnh sau: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Thông thường, nếu bạn đang cố gắng tạo quy tắc tùy chỉnh trong /etc/udev/rules.d/51-android.rules cho thiết bị Android, viết lsusbvào thiết bị đầu cuối của bạn sẽ hiển thị như thế nào Bus 002 Device 004: ID 062a:3270 Creative Labs . Bốn ký tự sau "ID" - trong trường hợp này sẽ là 062a- được sử dụng để chỉ ra cụ thể idVendortrong tệp đó.


Điều đó giúp viết các quy tắc udev, nhưng có cách nào để viết một quy tắc thay đổi số sê-ri không?
Ralf

Không biết cho điện thoại cụ thể của bạn, nhưng theo kinh nghiệm của tôi một khi quy tắc udev được đặt (và bạn chạy adb start-serverdưới quyền root hoặc sử dụng sudo), adb sẽ có thể tự đọc số sê-ri.
Drake Clarris

0

Có lẽ nó không phải là nối tiếp mà là FTDI, vì vậy bạn có thể thử theo cách này:

1) Nhận nối tiếp

sudo udevadm info --attribute-walk -n /dev/ttyUSB0  | sed -n '/FTDI/,/serial/p'

2) Tạo quy tắc và thay thế XXXXXXXX bằng sê-ri bạn tìm thấy hoặc sê-ri FAKE

sudo echo 'SUBSYSTEM=="tty", ATTRS{serial}=="XXXXXXXX", GROUP="users", MODE="0660", SYMLINK+="myusbphone"' | sudo tee /etc/udev/rules.d/99-myusbphone.rules

3) Tải lại các quy tắc

sudo udevadm control --reload-rules

.

Trong trường hợp cố gắng liên hệ với tác giả của này bài viết .


Tôi không nghĩ OP đang nói về giao thức nối tiếp nhưng số sê-ri của thiết bị USB. Đó là một trường ít được sử dụng trong bộ mô tả thiết bị cùng với ID nhà cung cấp và sản phẩm. Nó được coi là duy nhất cho mỗi thiết bị nhưng không bắt buộc trong thông số kỹ thuật USB. Không có câu trả lời cho làm thế nào để giả nó, xin lỗi. Có lẽ tôi sẽ vá kernel ...
ali1234
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.