Как найти модуль ядра для данного устройства?

Когда «Vim: поймал смертельный сигнал HUP», за которым следует «Vim: сохранение файлов». , все редактируемые файлы сохраняются в файлах подкачки. Согласно руководству vim :

The name of the swap file is normally the same as the file you are editing,
with the extension ".swp".
- On Unix, a '.' is prepended to swap file names in the same directory as the
  edited file.  This avoids that the swap file shows up in a directory
  listing.
- On MS-DOS machines and when the 'shortname' option is on, any '.' in the
  original file name is replaced with '_'.
- If this file already exists (e.g., when you are recovering from a crash) a
  warning is given and another extension is used, ".swo", ".swn", etc.
- An existing file will never be overwritten.
- The swap file is deleted as soon as Vim stops editing the file.

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

ls -la .filename.swp
5
23.12.2018, 20:47
2 ответа

PCI ID 1022 :43b9 — это контроллер USB 3.1 xHCI набора микросхем AMD X370 Series. Идентификатор подсистемы PCI 1b21 :1142 предполагает, что на самом деле это может быть контроллер ASMedia ASM1042A USB 3, возможно, интегрированный в набор микросхем AMD.

Для большинства микросхем контроллера USB 3.x подходит модуль драйвера xhci_pci, который зависит от модуля xhci_hcd. Оба эти модуля являются частью стандартного ядра Linux, поэтому они должны быть доступны во всех современных дистрибутивах Linux. Соответствующие параметры конфигурации ядра — CONFIG_USB_XHCI_PCIи CONFIG_USB_XHCI_HCD.

Многие дистрибутивы включают файл конфигурации ядра как /boot/config-<kernel version number>. Итак, вы можете запустить эту команду:

$ grep XHCI /boot/config-$(uname -r)
CONFIG_USB_XHCI_HCD=m
CONFIG_USB_XHCI_PCI=m
# CONFIG_USB_XHCI_PLATFORM is not set

Здесь и xhci_hcd, и xhci_pciсконфигурированы так, чтобы быть доступными как модули. Если бы в строках вместо этого было написано ...=y, поддержка USB 3 была бы скомпилирована в основное ядро.

PCI ID 1022 :43b5, ID подсистемы 1b21 :1062 — это контроллер AHCI SATA (или eSATA ), на который уже распространяется модуль ahci.

Идентификаторы PCI можно найти в Репозитории идентификаторов PCI .

Если драйвер указан с помощью идентификаторов производителя/продукта, вы можете использовать /sbin/modprobe -c | grep '<vendor ID>.*<product ID>'. Если вы получите такую ​​строку, значит, вы нашли совпадение:

alias pci:v0000<vendor ID>:d0000<product ID>sv... <module name>

Эта информация поступает из /lib/modules/modules.alias[.bin], которая генерируется командой depmodиз информации о поддержке устройств, встроенной в сами модули ядра (, определенной в исходном коде с помощью MODULE_DEVICE_TABLEмакроса ). Вы также можете использовать modinfo <module name> | grep aliasдля просмотра аппаратной поддержки, заявленной конкретным модулем.

Однако не все модули указаны с помощью идентификаторов поставщиков/продуктов. Некоторые драйверы охватывают весь класс устройств; например, модуль xhci_pciзаявляет о поддержке базового класса PCI 0x0C, подкласса 0x03, интерфейса 0x30..., который соответствует «контроллеру последовательной шины», «контроллеру USB» и «XHCI» соответственно.Это выражается как

alias:          pci:v*d*sv*sd*bc0Csc03i30*

Обратите внимание, что обычно вам не нужно выполнять какой-либо из этих поисков вручную, если только вы не занесли некоторые модули в черный список или автоматическое -определение не дало сбой по какой-либо причине. Например, когда ядро ​​Linux обнаружит контроллер USB 3 оригинального постера, оно вызовет (эквивалент )выполнения следующей команды:

modprobe pci:v00001022d000043b9sv1b21sd1142bc0Csc03i30

, который содержит идентификаторы всех производителей оборудования/устройств/классов/подклассов/интерфейсов, доступных для устройства. Если один из псевдонимов с подстановочными знаками в записи в конфигурации modprobeсовпадает с этой строкой, соответствующий модуль будет загружен автоматически.

Для USB-устройств (и вообще для любых автопроверочных шин )существует аналогичная система псевдонимов модулей и репозиторий USB ID.

Если в вашей системе не скомпилирован соответствующий модуль, лучше всего использовать репозиторий идентификаторов PCI для идентификации устройства или чипа, используемого в нем. Иногда в записи репозитория указывается модуль ядра Linux, который будет поддерживать его. Если такой информации нет, возможно, вам придется погуглить, используя модель устройства/чипа; обычно это позволит вам найти любые альтернативные/экспериментальные модули драйверов, которые еще не имеют (? )был включен в стандартное ядро.

11
27.01.2020, 20:32

Если модуль не встроен в ядро ​​(на RedHat 7 и его вариантах, XHCI _HCD загружается не как модуль, а как часть базового образа ), вы можете посмотреть на modules.aliasesдля вашего ядра.

напр.

% grep 1B21 /lib/modules/$(uname -r)/modules.alias
alias pci:v00001B21d00000612sv*sd*bc*sc*i* ahci
alias pci:v00001B21d00000611sv*sd*bc*sc*i* ahci
alias pci:v00001B21d00000602sv*sd*bc*sc*i* ahci
alias pci:v00001B21d00000601sv*sd*bc*sc*i* ahci

В этом файле мы видим значения идентификатора "v"endor и идентификатора устройства "d" и соответствующий модуль ("ahci" ), который необходимо загрузить.

Мы можем убедиться, что этот модуль обрабатывает эти драйверы:

% modinfo /usr/lib/modules/3.10.0-957.1.3.el7.x86_64/kernel/drivers/ata/ahci.ko.xz
filename:       /usr/lib/modules/3.10.0-957.1.3.el7.x86_64/kernel/drivers/ata/ahci.ko.xz
version:        3.0
license:        GPL
description:    AHCI SATA low-level driver
author:         Jeff Garzik
retpoline:      Y
rhelversion:    7.6
srcversion:     4BCC52C20C316AF69F3584A
....
alias:          pci:v00001B21d00000612sv*sd*bc*sc*i*
alias:          pci:v00001B21d00000611sv*sd*bc*sc*i*
alias:          pci:v00001B21d00000602sv*sd*bc*sc*i*
alias:          pci:v00001B21d00000601sv*sd*bc*sc*i*
...
depends:        libahci,libata
intree:         Y
vermagic:       3.10.0-957.1.3.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        E7:CE:F3:61:3A:9B:8B:D0:12:FA:E7:49:82:72:15:9B:B1:87:9C:65
sig_hashalgo:   sha256
parm:           marvell_enable:Marvell SATA via AHCI (1 = enabled) (int)

Значения в файле modules.aliasсоответствуют:

 v     (vendor)
 d     (device)
 sv    (subvendor)
 sd    (subdevice)
 bc    (bus class)
 sc    (bus subclass)
 i     (interface)
5
27.01.2020, 20:32

Теги

Похожие вопросы