Como identificar o módulo que deveria reivindicar um dispositivo apenas pelo fornecedor / ID do produto?

14

Suponha que eu conheça os IDs numéricos de produtos / fornecedores de hardware que não possuo aqui e deseje saber se há suporte para mim no kernel, posso fazer isso (exemplo de receptor bluetooth USB):

modinfo btusb
filename:       /lib/modules/3.7.5-030705-generic/kernel/drivers/bluetooth/btusb.ko
[...]
alias:          usb:v0A5Cp*d*dc*dsc*dp*icFFisc01ip01in*
alias:          usb:v0489p*d*dc*dsc*dp*icFFisc01ip01in*
alias:          usb:v413Cp8197d*dc*dsc*dp*ic*isc*ip*in*
[...]

A partir disso, posso ver quais dispositivos devem ser reivindicados btusbe exige que eu saiba o nome do módulo com antecedência. Em alguns casos, no entanto, não tenho idéia do nome do (s) módulo (s) que suporta esse dispositivo.

O hardware de rede é uma dessas categorias que parece muito difícil de descobrir. Além disso, os nomes lspcie lsusbàs vezes são inconclusivos ou simplesmente errados. Atualmente, estou pesquisando por toda a árvore de fontes do kernel, o que não é tão elegante.

  • Existe uma maneira de listar todas as modalidades de todos os módulos (incluindo o incorporado no kernel) de uma só vez, para que eu possa encontrar uma correspondência?
  • Ou, como alternativa, existe uma maneira de consultar o kernel para fornecer os módulos do kernel que reivindicam um dispositivo que eu não possuo?

Casos de uso:

  • Usuários fazendo perguntas aqui, com as quais eu posso responder / enganar, verificando se "existe suporte se você atualizar para ..." ou "Tente rmmod module1; modprobe module2 como module2 parece também suportar seu dispositivo".
  • Verificando o suporte antes de comprar o hardware com conhecimento prévio dos IDs. Além de pesquisar com os IDs, posso procurar relatórios de erros no próprio módulo do kernel.
gertvdijk
fonte
Não existe realmente uma maneira fácil de obter essas informações. Nem todos os dispositivos USB são reivindicados com base em seus IDs. Os dispositivos baseados em classe (armazenamento, HID e muitos dispositivos seriais e de rede) são identificados com base na interface que eles fornecem.
Alistair Buxton
talvez o usb-modeswitch possa ajudar com isso. se você não o possui:sudo apt-get install usb-modeswitch
Dimitris Theodoridis
digite lsusb e você verá o ID
Dimitris Theodoridis
da sua pergunta, acabei de ver que você quer ver o id e alterá-lo, estou errado?
Dimitris Theodoridis
agora eu realmente não te entendo. por favor, explique sua pergunta do que eu posso entendê-lo melhor e ver se eu realmente pode ajudá-lo
Dimitris Theodoridis

Respostas:

3

Se você reafirmar o problema como "Como posso executar modinfoem todos (ou alguns) módulos e selecionar parte da saída para uso posterior?", Você poderá usar este truque (deixei os comandos que usei para descobrir como obter para o resultado final):

ls /lib/modules
ls /lib/modules/$(uname -r)
ls /lib/modules/$(uname -r)/kernel
find  /lib/modules/$(uname -r)/kernel -type f -name '*.ko' -print
for i in $( !! ) ; do
for i in $( find  /lib/modules/$(uname -r)/kernel -type f -name '*.ko' -print ) ; do
   j=${i##.*/}
   j=${j%%.ko}
   echo $j
   modinfo $i | egrep 'filename:|alias:'
   echo ""
   done

Este truque pode ser usado em outro lugar, divirta-se!

waltinator
fonte