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);
}
我正在尝试调试标准 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);
}