LinuxでSATAデバイスに関連するドライバ(モジュール)を見つける方法は?

LinuxでSATAデバイスに関連するドライバ(モジュール)を見つける方法は?

私のアプリケーションの1つについては、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ハードドライブ用のシステムにロードされている実際のデバイスドライバを確認する方法を提案してください。

答え1

udevadm info上記のリンクの他の回答に記載されているように使用してください。以下は、/sysツリーを後ろに移動しながら出力を減らすためにさまざまなgrepバリアントを使用する例です。

$ 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デバイスにマップされたマイシステムがPCIデバイス(ホストアダプタ)0:0:0:0に接続されていることがわかります。ata10:00:1f.2

ドライバはsdブロックデバイスの処理を担当し、ドライバはahciSATAホストアダプタの処理を担当します。

答え2

これは、カーネルドライバコードを見つける方法に関する質問の一部にのみ答えようとします。コメントとして追加しようとしましたが、長すぎました。

まず、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.cmodnamelsmod

関連情報