내 휴대폰이 USB를 통해 컴퓨터에 연결되어 있습니다.
장치 정보를 보기 위해 사용하는 경우
sudo udevadm info --attribute-walk
제품 및 공급업체 ID가 제대로 표시되지만 그렇지 않음ATTR{일련번호}. 제가 사용하고 있는 앱(Android adb)이 제대로 작동하려면 기기에서 일련번호를 보고해야 합니다.
예를 들어 udev 규칙을 사용하여 장치의 일련 번호를 위조할 수 있는 방법이 있습니까?
밝히다:문제는 어떻게 하느냐가 아니다얻다USB 장치의 일련 번호이지만 어떻게놓다일련 번호.
USB를 통해 일련번호를 보고하지 않는 Android 휴대폰이 있는데 adb 도구는 이를 별로 좋아하지 않습니다. 아직까지 쉬운 해결책은 없는 것 같습니다. 그러나 이제는 개발에 적합한 Android 휴대폰을 구입하는 것이 쉽습니다.
답변1
먼저 일련번호를 보고하지 않는 장치가 실제로 문제인지 확인하십시오. adb devices
해당 기기에 접근할 수 있는 권한이 없는 경우 일련번호는 전체 물음표로 표시됩니다 /dev/bus/usb/
. 또한 adb가 서버를 시작하므로 다시 조사하려면 서버를 종료해야 할 수도 있습니다.
과연 기기의 문제라고 가정하고 빠르게 adb 소스코드를 확인해보았습니다. 장치에서 일련번호를 직접 읽을 register_device
때 발생합니다 . 이를 수행하기 위한 호출 (libusb 소스 코드 확인)은 sysfs에서 또는 장치에서 직접 가져옵니다. 따라서 불행하게도 어떤 udev 트릭도 도움이 되지 않습니다.core/adb/usb_linux.c
core/adb/usb_libusb.c
libusb_get_device_descriptor
귀하의 옵션은 다음과 같습니다.
- 일련번호 없이 adb를 작동시키는 방법을 알아보세요. 패치되었을 수도 있습니다
adb
(오픈 소스임). 나는 이것이 Stack Overflow에 대한 질문에 더 가깝다고 생각합니다. - adb 요청에 대한 응답을 가짜로 만들기 위해 커널 usbfs 드라이버를 패치했습니다. 이것은 나에게 패치하는 것보다 훨씬 더 어려운 것 같습니다.
- adb가 libusb를 사용한다고 가정하고 syfs에서 일련 번호 위조를 허용하도록 커널을 패치했습니다.
- 손상된 하드웨어를 수리하십시오.
답변2
특정 장치(예: /dev/sdb)에 대한 장치 노드를 알고 있는 경우 다음을 사용하여 찾을 수 있습니다.
udevadm info -a -p $(udevadm info -q path -n /dev/sdb)
일반적으로 /etc/udev/rules.d/51-android.rules에서 Android 장치에 대한 사용자 정의 규칙을 만들려고 하면 lsusb
터미널에 쓰면 다음과 같은 내용이 표시됩니다 Bus 002 Device 004: ID 062a:3270 Creative Labs
. "ID"(이 경우) 뒤의 4개 문자는 062a
해당 파일의 특정 문자를 나타내는 데 사용됩니다.idVendor
답변3
아마도 직렬이 아니라 FTDI이므로 다음을 시도해 볼 수 있습니다.
1) 일련번호 받기
sudo udevadm info --attribute-walk -n /dev/ttyUSB0 | sed -n '/FTDI/,/serial/p'
2) 규칙을 만들고 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
.
이런 경우에는 이 글의 작성자에게 연락해 보시기 바랍니다.기사.