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

14

Suponha que eu conheça os IDs numéricos de produto / fornecedor de hardware que eu não tenho aqui e quero saber se há suporte para mim no kernel, eu 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 por btusb e é necessário que eu saiba o nome do módulo de antemão. Em alguns casos, no entanto, não tenho a menor idéia sobre o (s) nome (s) do (s) módulo (s) que suportam esse dispositivo.

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

  • Existe uma maneira de listar todas as modalias de todos módulos (incluindo o embutido no kernel) de uma só vez, para que eu possa encontrar uma correspondência?
  • Ou, alternativamente, existe uma maneira de consultar o kernel para me fornecer os módulos do kernel que reivindicam tal dispositivo que eu realmente não possuo?

Casos de uso:

  • Usuários que fazem perguntas aqui com as quais posso responder / dupe verificando realmente que "o suporte está ativo se você atualizar para ..." ou "Tente o rmmod module1; modprobe module2 como module2 parece suportar também o seu dispositivo". / li>
  • Verificando o suporte antes de comprar 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.
por gertvdijk 04.02.2013 / 14:26

1 resposta

3

Se você reafirmar o problema como "Como posso executar modinfo em todos (ou alguns) módulos e selecionar alguma saída para uso posterior?", você poderia usar esse truque (deixei os comandos que usei para descobrir como chegar ao 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

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

    
por waltinator 06.04.2013 / 21:21

Tags