CDROM函数——函数指针到哪里去了?

CDROM function - where does the function pointer go to?

我正在尝试调试标准 linux CDROMEJECT returns 错误,即使磁盘已弹出。

使用标准弹出命令。

ioctl(FP,CDROMEJECT)

当我查看 cdrom.c 时,我可以看到弹出函数和错误(例如:http://lxr.free-electrons.com/source/drivers/cdrom/cdrom.c#L2303)。我对返回错误代码的位置很好,但你也有这样的行:

cdi->ops->lock_door(cdi, 0)

现在lock_door是一个函数指针(见头文件here)。我的问题是我终生无法弄清楚 lock_door 指针指向哪个函数!我希望它指向一个函数,然后将 SCSI 命令发送到 CD/DVD 驱动器。

我怀疑我遗漏了一些基本知识,但我真的不确定是什么!知道我在哪里找到 struct cdrom_device_ops 中的函数指针指向哪里吗?

如果您对“.lock_door”进行 LXR "Freetext Search" you can see 它被设置为 scsi driver here 如果你点击 sr_lock_door 你发现它在 sr_ioctl.c:

中定义
int sr_lock_door(struct cdrom_device_info *cdi, int lock) {
        Scsi_CD *cd = cdi->handle;
        return scsi_set_medium_removal(cd->device, lock ?
                       SCSI_REMOVAL_PREVENT : SCSI_REMOVAL_ALLOW);
}