Und schon wieder fehlt mir die Doku (cdrom.c)

Langsam kireg ich ne Kriese. C/++ auf Linux ist ja grausam. Entweder es gibt einfach keine Doku oder ich find die Seite nicht. Ich suche schon seit ner geschlagenen Stunde nach einer Dokumentation für cdrom.h. Ich brauch den .so Namen, in dem die Methoden implementiert sind. Nur finde ich da nichts zu…

man methodenname

In der cdrom.h sind keine Methoden sondern nur defines … wozu ne .so?!

Btw. reden wir jetzt von der cdrom.h im Linux-Kernel Source? Die passende cdrom.c ist unter /drivers/cdrom/cdrom.c

Und wenn das nicht gerade als Modul kompiliert (wäre möglich, glaube aber nicht, dass es dass wird), dann ist das im Kernel drinnen. Du brauchst nur die cdrom.h includen, da du die Definitionen und Structs brauchst. Der Rest ist reines ioctl Gedöns und läuft im Kernel ab.

http://leapster.org/linux/cdrom/
https://www.kernel.org/doc/Documentation/ioctl/cdrom.txt

Wofür brauchst du denn die .so-Datei? Die sollte da sein und gut ist. Das entscheidende File ist die h-Datei.

Wie gesagt, cdrom.h ist Kernelgedöns, wo du eben nur die .h Datei brauchst damit du die ganzen defines und structs hast, und man per open() und ioctl() alles steuern kann. Der Rest ist im Kernel einkompiliert oder als Modul geladen. Da wird es keine .so geben.

Sorry, konnte erst jetzt reingucken. Ich hab hier alles in C++ stehen, muss es aber nach JNA porten. Daher brauche ich den Namen der .so Datei :smiley:

TL;DR: Es gibt keine .so

Ein bisschen Code, was du da hast wäre nicht schlecht. Denn die einzige mir bekannte cdrom.h ist die des Kernels und kein Highlevelstuff der in eine Library kompiliert werden könnte. Aber wie gesagt, es gibt dazu keine .so Datei. Das ist ein ioctl-Kernelinterface, die Implementierungen liegen alle im Kernel(modul) und du kannst diese Methoden nicht mal direkt aufrufen, sondern musst eben entsprechend über ioctl() auf einer Device-Datei arbeiten. Bitte schau dir die cdrom.h genau an. Dort sind nur defines und structs. Jetzt kommt zwar ein aber da sind ja auch Methodendeklarationen, aaaaaber diese sind alle in einen #ifdef __KERNEL__ und somit wirklich nur im Kernelcode verfügbar. Wenn schon müsstest du selbst einen JNA-Wrapper schreiben, der die ioctl()-Calls ausführt.

… Auf die Idee mit ioctl bin ich jetzt nicht gekommen :smiley: Im C++ Code rufe ich auch alles über ioctl auf. Hier ist ja wieder ein Problem: Welche .so enthält ioctl(), damit ich es via JNA rufen kann?

Auch dafür brauchst du keine .so, ist ja Kernelgedöns.

und wie linke ich das? irgendwas muss ja von JNA geladen werden. In C++ hab ich ja einfach die header Dateien

Gar nicht. ioctl() und Konsorten sind system calls, die werden vom gcc automatisch mit dem passenden syscall im Kernel verbunden. Du musst dir einen C++ Wrapper schreiben, welcher das ioctl Gedöns macht und die Funktionen für JNA anbietet.

in dem Du Dir eine .so erstellst :slight_smile:

Bzw. schon mal einfach “java ioctl” in Google eingegeben? Vielleicht ist das was: http://robotics.francisparker.org/javadoc/com/sun/squawk/platform/posix/natives/Ioctl.html

Da kann ich ja direkt bei JNI bleiben und sagen, dass das proten unnötig ist xD

@groggy meinen Link angeschaut?

kommt das so in etwa hin?

[quote=mogel]Zitat von groggy
Da kann ich ja direkt bei JNI bleiben und sagen, dass das proten unnötig ist und ich habe irgendwie keine Lust dazu, kann mir das nicht jemand machen
kommt das so in etwa hin?[/quote]

So faul bin ich jetzt nicht… Ich krieg das schon hin. Nur hab ich erst eben mit der Doku verstanden dass ich ioctl nutzen muss und nicht direkt cdrom.h und dessen .so (gibt ja keine). Trotzdem, welchen Vorteil erreiche ich nun durch das porten?Im enteffekt ja keinen.