如何找到块设备的scsi_host_template函数?

问题描述 投票:0回答:1

我在查看Linux内核的IO路径,在最下面的函数中的 scsi_dispatch_cmd()驱动程序代码被调用

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

所以,对于我这样的块状设备 /dev/sda/有什么方法可以找到哪些 hosttscsi_host_template 它正在使用。我想检查一下哪个函数 queuecommand 是指向...

c linux-kernel kernel linux-device-driver scsi
1个回答
2
投票

只是作为对这个问题的思考草图。在我的U盘的机器上,我可以看到这样的情况。

$ 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

在这个特殊的情况下,我们可以看到队列命令和所述驱动器之间的关系。

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

现在,在Linux的源码目录下,我们可以看到queuecommand和所述驱动器之间的关系。

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

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.