Как найти драйвер (модуль), связанный с устройством SATA в Linux?

Для одного из моих приложений я должен понимать поток драйверов устройства SATA. По моему мнению, драйвер устройства SATA должен находиться в дереве ядра Linux. Я рассказал, как найти модуль драйвера, связанный с устройством в Linux, чтобы найти драйвер устройства для устройства SATA.

$ readlink /sys/block/sda/device/driver ../../../../../../../bus/scsi/d 

Я перешел в указанное выше место, но не нашел файл драйвера устройства.

 usr@usr:/sys/bus/scsi/drivers/sd$ ll total 0 drwxr-xr-x 2 root root 0 Dec 9 17:00 ./ drwxr-xr-x 4 root root 0 Dec 9 17:00 ../ lrwxrwxrwx 1 root root 0 Dec 9 17:47 2:0:1:0 -> ../../../../devices/pci0000:00/0000:00:1f.2/ata3/host2/target2:0:1/2:0:1:0/ --w------- 1 root root 4096 Dec 9 17:47 bind --w------- 1 root root 4096 Dec 9 17:47 uevent --w------- 1 root root 4096 Dec 9 17:47 unbind usr@usr:/sys/bus/scsi/drivers/sd$ 

Пожалуйста, предложите, как я могу видеть драйвер устройства, который фактически загружался для жесткого диска SATA в моей системе.

  • Корневая файловая система vs файловая система раздела
  • Ошибки / исключения ACPI, почему они спам, как их узнать и исправить?
  • Как отслеживаются ошибки ядра Linux?
  • Знайте, какой каталог «mount -o bind», задав ядро ​​(Linux)
  • Идентификатор пользователя в модуле ядра
  • Чтение файлов мониторинга для кеширования
  • Сбой гибернации сбой в linux kernel 4.9.0, Debian 9
  • Ядро Linux удаляет пользовательские коды сканирования клавиатуры
  • 2 Solutions collect form web for “Как найти драйвер (модуль), связанный с устройством SATA в Linux?”

    Используйте udevadm info как описано в другом ответе на указанную вами ссылку. Вот пример с другим grep-вариантом, чтобы уменьшить результат, идя по дереву /sys назад:

     $ udevadm info -a -n /dev/sda | egrep 'looking|DRIVER' looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda': DRIVER=="" looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0': DRIVERS=="sd" looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0': DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0': DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1': DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1f.2': DRIVERS=="ahci" looking at parent device '/devices/pci0000:00': DRIVERS=="" 

    Таким образом, вы можете видеть, что в моей системе /dev/sda отображает SCSI-устройство 0:0:0:0 , которое прикрепляется к ata1 на устройстве PCI 0:00:1f.2 (который является 0:00:1f.2 адаптером)

    Драйвер sd отвечает за обработку блочного устройства, а драйвер ahci отвечает за обработку хост-адаптера SATA.

    Это только пытается ответить на часть вопроса, а именно, как найти код драйвера ядра. Я бы добавил это как комментарий, но это слишком долго для одного.

    Сначала установите пакет исходных файлов ядра Debian.

     apt-get install linux-source-3.16 

    или независимо от соответствующей версии вашего ядра. Затем источник устанавливается в /usr/src/linux-source-3.16.tar.xz .

    Теперь создайте каталог /usr/local/src/linux и скопируйте его там. А именно:

     mkdir /usr/local/src/linux 

    с последующим

     cp -ar /usr/src/linux-source-3.16.tar.xz /usr/local/src/linux 

    Теперь вы можете распаковать его с помощью tar.

     tar xvf linux-source-3.16.tar.xz cd linux-source-3.16 

    Затем запустите find нужного драйвера устройства, скажем:

     /usr/local/src/linux/linux-source-3.16$ find . -name 'sg.c' ./drivers/scsi/sg.c 

    Поэтому водитель, о котором идет речь, находится в

     /usr/local/src/linux/linux-source-3.16/drivers/scsi/sg.c 

    Все модули, перечисленные в lsmod должны находиться в исходном дереве в форме modname.c , где modname – это имя, которое отображается в списке lsmod .

    Interesting Posts

    Xkb: Overlay против HotKeys

    Отображение стандартного вывода фонового процесса в определенном месте терминала

    Имеет выходной сигнал grep для каждого файла

    Отправить массив для функции подоболочки с трубкой?

    Обходной путь для отсутствующей опции rm -I на OSX?

    Мышь обнаружена как клавиатура

    Как перечислить файлы без каталогов и фильтровать по имени (ls options)

    Компиляция CUPS не работает на Cygwin

    понимать обозначение символических ссылок

    Как определить, активна ли заставка на другом сеансе

    Разделите буфер между разделителями tmux / vim

    Как переименовать много файлов в каталоге без изменения их расширений?

    Есть ли способ в Linux иметь одного пользователя, не являющегося пользователем root, проверить, имеет ли другой пользователь, не являющийся пользователем root, права на папку / файл?

    Какой дистрибутив Linux следующий?

    Создание новых файлов в сценарии оболочки с помощью VIM

    Linux и Unix - лучшая ОС в мире.