Linux device driver ioctl

Ich schreibe einen chardev-treiber für eigene Hardware. Dazu habe ich als fileoperations folgende als relevant definiert:

struct file_operations vpu_driver_operations = {
.owner = THIS_MODULE,
.open = vpu_Open,
.release = vpu_Release,
.llseek = vpu_Llseek,
.read = vpu_Read,
.write = vpu_Write,
.ioctl = vpu_ioctl,
};

Ich linke diesen Treiber fest in den Kernel und erzeuge beim Start ein devicenode mit Major 41

In meiner Applikation benutze ich nun also ein FILE *vpu_fd = fopen("/dev/vpu", „rw“);
–> Klappt.

In dem Treiber selbst, lasse ich mir messages generieren, um zu sehen, an welchen Stellen mein Treiber durchlaufen
wird und auch, welche Adressen z.B. mit lseek gesetzt werden oder welche commands und arguments ein ioctl bekommt.

Seltsam ist nun, dass mein ioctl aufgerufen wird, direkt zwischen open und close, obwohl ich
dies in meiner Applikation gar nicht explizit mache…

Die Parameter sind dabei: cmd 0x5401, arg 0xeff8e4

Dieses 0x5401 ist im Linux-kernel definiert als

MGSL_MAGIC
TCGETS
TTY_MAGIC

Kann der MOD_INC_USE_COUNT damit etwas zu tun haben? Wer ruft das auf??

Hingegen wird mein oictl aber NICHT aufgerufen, wenn ich dies explizit in meiner Applikation tue…

Aus meinem user-prog kann ich offenbar nicht einfach so vpu_status = ioctl(vpu_fd, 0x414, 0);
aufrufen, denn der erwartet ja einen integer als ersten parameter (filedescriptor)…
Ich habe jedoch beim open nur einen Filepointer bekommen. Ich erhalte natürlich eine warning, und es wird
nicht die ioctl aufgerufen, welche ich implementiert habe, denn das würde ich ja im LOG sehen wegen printk…
Es wird anscheinend gar keine ioctl funktion aufgerufen bzw. der Aufruf kommt eben nicht bei der von mir
implementierten funktion an…

Haben Sie da eine gute Referenz im Internet oder besser noch eine Idee, was ich hier falsch mache?

Habe es auch mit fcntl versucht. Keine Warning mehr allerdings immernoch kein Aufruf meines Treibers…

Hallo Joe,

Ich schreibe einen chardev-treiber für eigene Hardware.
Haben Sie da eine gute Referenz im Internet oder besser noch
eine Idee, was ich hier falsch mache?

Keine Idee, nur einen (hoffentlich) guten Internet-Link:
http://ezs.kr.hsnr.de/lectures/treiber/html/book1.html

Viel Erfolg
Klaus Bernstein