Как найти функции scsi_host_template для блочного устройства? - PullRequest
0 голосов
/ 26 апреля 2020

Я искал путь ввода-вывода ядра Linux, и ближе к функции в scsi_dispatch_cmd() вызывается код драйвера

rtn = host->hostt->queuecommand(host, cmd);

Итак, для моего блочного устройства, например /dev/sda/, есть ли способ узнать, какой hostt или scsi_host_template он использует. Я хочу проверить, какая функция queuecommand указывает на ..

1 Ответ

2 голосов
/ 27 апреля 2020

Так же, как набросок размышлений на эту тему.
В моей машине для USB-накопителя я вижу это:

$ ls -l /dev/sdg
brw-rw---- 1 root disk 8, 96 Apr 27 01:21 /dev/sdg
$ ll /sys/dev/block/8\:96/device/drive
lrwxrwxrwx 1 root root 0 Apr 27 01:32 /sys/dev/block/8:96/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd

Поэтому обычно такие блочные устройства обрабатываются через обычные Linux драйвер диска scsi . Что связано, например, с обработкой usb:

$ lsmod | grep sd
sd_mod                 49152  13
scsi_mod              225280  5 sd_mod,usb_storage,libata,uas,sg

В этом конкретном случае мы можем увидеть связь между командой queue и упомянутым диском:

$ grep queuecommand /proc/kallsyms
ffffffffc052be60 t uas_queuecommand [uas]
ffffffffc0582ad0 t queuecommand [usb_storage]

Сейчас, находясь в Linux source dir :

$ grep -rnI '\.queuecommand =' | grep usb
drivers/usb/storage/uas.c:846:  .queuecommand = uas_queuecommand,
drivers/usb/storage/scsiglue.c:609: .queuecommand =         queuecommand,

Надеюсь, это поможет вам.

...