Как определить модуль, который должен запрашивать устройство, только по идентификатору производителя / продукта?

14

Предположим, я знаю числовые идентификаторы продуктов / поставщиков оборудования, которых у меня нет, и я хочу знать, есть ли поддержка для меня в ядре, я могу сделать это (пример USB-приемника Bluetooth):

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*
[...]

Из этого я вижу, какие устройства должны быть востребованы, btusbи мне необходимо заранее знать имя модуля. В некоторых случаях, однако, я не имею понятия о названиях модулей, поддерживающих такое устройство.

Сетевое оборудование - одна из тех категорий, о которой кажется очень сложно узнать. Кроме того , lspciи lsusbимена иногда безрезультатным или просто неправильно. В настоящее время я перебираю все дерево исходников ядра, что не так уж и элегантно.

  • Есть ли способ перечислить все модализы всех модулей (включая встроенные в ядро) за один раз, чтобы я мог найти совпадение?
  • Или, альтернативно, есть ли способ запросить ядро, чтобы предоставить мне модули ядра, требующие такого устройства, которым я на самом деле не владею?

Случаи использования:

  • Пользователи задают здесь вопросы, на которые я могу ответить / обмануть, фактически проверив, что «поддержка включена, если вы обновляетесь до…» или «Попробуйте rmmod module1; modprobe module2, так как module2, кажется, также поддерживает ваше устройство».
  • Проверка поддержки перед покупкой оборудования с предварительным знанием идентификаторов. В дополнение к поиску по идентификаторам, я могу искать отчеты об ошибках в самом модуле ядра.
gertvdijk
источник
Нет действительно простого способа получить эту информацию. Не все USB-устройства заявлены на основании их идентификаторов. Устройства на основе классов (хранилище, HID и многие последовательные и сетевые устройства) идентифицируются на основе интерфейса, который они предоставляют.
Алистер Бакстон
Может быть, USB-ModeSwitch может помочь с этим. если у вас его нет:sudo apt-get install usb-modeswitch
Димитрис Теодоридис
напечатайте lsusb, и вы увидите ID
Димитрис Теодоридис
из вашего вопроса я только что увидел, что вы хотите увидеть id и изменить его, я не прав?
Димитрис Теодоридис
теперь я действительно не понимаю тебя. пожалуйста, объясните свой вопрос, чем я могу понять его лучше, и посмотрите, смогу ли я вам чем-
нибудь

Ответы:

3

Если вы переформулируете проблему как «Как я могу работать modinfoна всех (или некоторых) модулях и выбрать некоторые выходные данные для дальнейшего использования?», Вы можете использовать этот трюк (я оставил команды, которые я использовал, чтобы выяснить, как получить до конечного результата):

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

Этот трюк можно использовать в другом месте, получайте удовольствие!

waltinator
источник