Как найти драйвер (модуль), связанный с устройством 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 в моей системе.

  • Установка USB_QUIRK_CONFIG_INTF_STRINGS во время выполнения
  • Ядро Linux: не следует делать <manufacturername> defconfig, чтобы получить тот же файл .config?
  • Как вы исправляете ядро?
  • Как «раскодировать» сокет домена unix?
  • Поиск через меню make menuconfig меню конфигурации
  • Ядро Linux удаляет пользовательские коды сканирования клавиатуры
  • О исполняемых файлах в Linux
  • Какая часть ядра 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 .

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