Número de série falso do dispositivo USB


9

Eu tenho um telefone celular conectado ao meu PC via USB.

Ao visualizar as informações do dispositivo usando

sudo udevadm info --attribute-walk

os IDs do produto e do fornecedor aparecem bem, mas não há ATTR {serial} . Um aplicativo que estou usando (Android adb) precisa que o dispositivo relate um número de série para funcionar corretamente.

Existe alguma maneira de falsificar o número de série do dispositivo, por exemplo, usando uma regra do udev?

Esclarecimento: A questão não é sobre como obter o número de série do dispositivo USB, mas como definir o número de série.

Eu tinha um telefone Android que não informava um número de série por USB, e a ferramenta adb não gostou muito disso. Até agora, parece não haver uma solução simples para isso. No entanto, há dias em que é muito fácil comprar um telefone Android adequado para desenvolvimento.


É um telefone Android? Caso contrário, o adb não funcionará.
Keith

Eu estou supondo que adb não realmente obter esta informação a partir udev. Provavelmente a partir do sysfs ou diretamente do dispositivo. Considere corrigir o adb, provavelmente a abordagem mais fácil.
Derobert

Respostas:


1

Primeiro, verifique se o dispositivo que não está relatando um número de série é realmente o problema. adb deviceslistará o número de série como todos os pontos de interrogação se ele não tiver permissão para acessar o dispositivo correspondente em /dev/bus/usb/. Lembre-se também de que o adb inicia um servidor; talvez seja necessário eliminá-lo para que ele seja analisado novamente.

Supondo que realmente seja um problema com o dispositivo, verifiquei rapidamente o código-fonte adb. Aparece register_deviceem core/adb/usb_linux.clê o número de série diretamente do dispositivo. core/adb/usb_libusb.cchamadas libusb_get_device_descriptorpara fazer isso, que (verificando o código-fonte libusb) o agarra do sysfs ou diretamente do dispositivo. Infelizmente, nenhum truque do udev vai ajudar.

Suas escolhas parecem ser:

  • descobrir como fazer o adb funcionar sem um número de série. Possivelmente, patch adb(é de código aberto). Esta é uma pergunta mais para Stack Overflow, eu acho.
  • patch para o driver usbfs do kernel para falsificar uma resposta à solicitação do adb. Isso parece muito mais difícil do que corrigir o adb para mim.
  • corrija o kernel para permitir falsificar o número de série no syfs, assumindo que o adb esteja usando o libusb.
  • conserte o hardware quebrado.

Obrigado - isso explica tudo. No meu caso, corrigir o hardware quebrado foi mais fácil (comprar um hardware melhor).
Ralf

1

Se você conhece o nó do dispositivo específico (por exemplo, / dev / sdb), pode procurar com o seguinte comando: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Normalmente, se você está tentando criar uma regra personalizada no /etc/udev/rules.d/51-android.rules para dispositivos Android, escrever lsusbno seu terminal exibirá algo como Bus 002 Device 004: ID 062a:3270 Creative Labs . Os quatro caracteres após "ID" - nesse caso, seriam - são 062ausados ​​para indicar o específico idVendornesse arquivo.


Isso ajuda a escrever regras do udev, mas existe alguma maneira de escrever uma regra que altere o número de série?
Ralf

Não sei para o seu telefone em particular, mas, na minha experiência, depois que as regras do udev forem definidas (e você executar adb start-servercomo root ou usando o sudo), o adb poderá ler o número de série por conta própria.
quer tocar hoje

0

Provavelmente não é serial, mas FTDI, então você pode tentar desta maneira:

1) Obter o serial

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

2) Crie a regra e substitua o XXXXXXXX pelo serial encontrado ou pelo serial FAKE

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

3) Recarregar as regras

sudo udevadm control --reload-rules

.

No caso, tente entrar em contato com o autor deste artigo .


Não acho que o OP esteja falando do protocolo serial, mas do número de série do dispositivo USB. Esse é um campo pouco usado no descritor do dispositivo, juntamente com os IDs do fornecedor e do produto. Ele deveria ser exclusivo para cada dispositivo, mas não é obrigatório na especificação USB. Não há resposta para como fingir, desculpe. Eu provavelmente consertar o kernel ...
ali1234
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.