私のアプリケーションの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
に接続されていることがわかります。ata1
0:00:1f.2
ドライバはsd
ブロックデバイスの処理を担当し、ドライバはahci
SATAホストアダプタの処理を担当します。
答え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.c
modname
lsmod