J'essaye de déboguer un problème où le standard CDROMEJECT de Linux renvoie une erreur même si le disque éjecté.Fonction CDROM - où va le pointeur de fonction?
Commande d'éjection standard utilisée.
ioctl(FP,CDROMEJECT)
Quand je regarde le cdrom.c je peux voir la fonction d'éjection et les erreurs (par exemple: http://lxr.free-electrons.com/source/drivers/cdrom/cdrom.c#L2303). Je suis très bien avec où les codes d'erreur sont renvoyés, mais vous avez aussi des lignes comme ceci:
cdi->ops->lock_door(cdi, 0)
maintenant lock_door
est un pointeur de fonction (voir fichier d'en-tête here). Mon problème est que je ne peux pas pour la vie-de-moi comprendre quelle fonction le pointeur lock_door
pointe à! Je m'attendrais à ce que cela pointe vers une fonction qui envoie ensuite une commande SCSI au lecteur de CD/DVD.
Je soupçonne que je manque un peu fondamental mais vraiment pas sûr de quoi! Toute idée où je trouve où les pointeurs de fonction dans struct cdrom_device_ops pointent vers?
Merci. Ce que je ne comprends pas entièrement, c'est comment sont liés le cdrom.c et le pilote scsi (sr.c). Par exemple: si j'appelle ioctl (fp, CDROMEJECT), alors comment est invoqué le code dans sr.c? – SimpleOne
C'est probablement l'inverse. Votre ioctl commence dans [sr.c] (http://lxr.free-electrons.com/source/drivers/scsi/sr.c#L542) sr_block_ioctl() qui [appelle] (http: //lxr.free- electrons.com/source/drivers/scsi/sr.c#L568) cdrom_ioctl() qui appelle cdrom_ioctl_eject() qui appelle lock_door(). Les opérations semblent être définies [ici] (http://lxr.free-electrons.com/source/drivers/scsi/sr.c#L701) à la sonde. – meuh