USB 장치의 가짜 일련 번호


9

USB를 통해 휴대폰을 PC에 연결했습니다.

를 사용하여 장치 정보를 볼 때

sudo udevadm info --attribute-walk

제품 및 공급 업체 ID가 잘 표시되지만 ATTR {serial} 은 없습니다 . 내가 사용하는 응용 프로그램 (Android adb)에는 장치가 제대로 작동하기 위해 일련 번호를보고해야합니다.

예를 들어 udev 규칙을 사용하여 장치의 일련 번호를 위조 할 수있는 방법이 있습니까?

설명 : USB 장치의 일련 번호 를 얻는 방법이 아니라 일련 번호를 설정 하는 방법 에 대한 질문입니다 .

USB를 통해 일련 번호를보고하지 않는 Android 전화가 있었고 adb 도구는 이것을 너무 좋아하지 않았습니다. 지금까지 이것에 대한 간단한 해결책은없는 것 같습니다. 그러나 개발을 위해 적절한 안드로이드 폰을 구입하는 것은 매우 쉬운 일입니다.


안드로이드 폰인가요? 그렇지 않으면 adb는 작동하지 않습니다.
— Keith

난 추측 실제로 udev에에서이 정보를 얻을하지 않는 ADB합니다. 아마도 sysfs에서 또는 장치에서 직접 아마도 가장 쉬운 방법 인 adb 패치를 고려하십시오.
— derobert

답변:


1

먼저 일련 번호를보고하지 않는 장치가 실제로 문제인지 확인하십시오. adb devices에서 해당 장치에 액세스 할 수있는 권한이없는 경우 일련 번호를 모든 물음표로 표시합니다 /dev/bus/usb/. 또한 adb는 서버를 시작한다는 것을 기억하십시오. 서버를 다시 검사하려면 서버를 종료해야 할 수도 있습니다.

장치에 실제로 문제가 있다고 가정하면 adb 소스 코드를 빠르게 확인했습니다. 이 표시 register_device의 core/adb/usb_linux.c장치에서 일련 번호를 똑바로 읽습니다. core/adb/usb_libusb.c호출 libusb_get_device_descriptor이 장치에서 sysfs를 또는 직접 잡고있는합니다 (libusb를 소스 코드를 확인), 그것을 할 수 있습니다. 불행히도 udev 속임수가 도움이되지 않습니다.

당신의 선택은 다음과 같습니다.

  • 일련 번호없이 adb를 작동시키는 방법을 알아 봅니다. 아마도 패치 adb(오픈 소스입니다). 이것은 스택 오버플로에 대한 추가 질문입니다.
  • 커널 usbfs 드라이버에 패치하여 adb의 요청에 대한 응답을 가짜로 만듭니다. 이것은 나에게 adb를 패치하는 것보다 훨씬 어렵게 들립니다.
  • adb가 libusb를 사용한다고 가정하고 syfs에서 일련 번호를 가짜로 표시하도록 커널을 패치하십시오.
  • 깨진 하드웨어를 수정하십시오.

고마워-이 설명합니다. 필자의 경우 깨진 하드웨어를 수정하는 것이 더 쉬웠습니다 (더 나은 하드웨어 구입).
— Ralf

1

특정 장치의 장치 노드 (예 : / dev / sdb)를 알고 있다면 다음 명령을 사용하여 찾을 수 있습니다. udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

일반적으로 Android 장치의 /etc/udev/rules.d/51-android.rules에서 사용자 지정 규칙을 만들려고하면 lsusb터미널에 쓰면 다음과 같은 내용이 표시됩니다 Bus 002 Device 004: ID 062a:3270 Creative Labs . "ID"다음에 나오는 네 문자 (이 경우 문자)는 해당 파일 내의 062a특정 문자를 나타내는 데 사용 idVendor됩니다.


그것은 udev 규칙을 작성하는 데 도움이되지만 일련 번호를 변경하는 규칙을 작성하는 방법이 있습니까?
— Ralf

특정 전화 번호를 모르지만 내 경험상 udev 규칙이 설정되면 (그리고 adb start-server루트로 실행 하거나 sudo를 사용하여) adb는 자체적으로 일련 번호를 읽을 수 있습니다.
— Drake Clarris

0

아마도 직렬이 아니라 FTDI 일 것이므로 다음과 같이 시도하십시오.

1) 시리얼 가져 오기

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

2) 규칙을 만들고 찾은 일련 번호 또는 FAKE 일련 번호로 XXXXXXXX를 대체하십시오.

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

3) 규칙을 다시로드

sudo udevadm control --reload-rules

.

이 경우이 기사 의 작성자에게 문의 하십시오 .


OP가 직렬 프로토콜에 관한 것이 아니라 USB 장치의 일련 번호에 대해 이야기하고 있다고 생각합니다. 벤더 및 제품 ID와 함께 장치 설명자에서 약간 사용되는 필드입니다. 각 장치마다 고유해야하지만 USB 사양에서는 필수는 아닙니다. 가짜 방법에 대한 답변이 없습니다. 죄송합니다. 아마 커널을 패치했을 것입니다.
— ali1234
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.