Ich habe eine Art von Zeichen-Gerät implementiert und ich brauche Hilfe mit copy_ from_user Funktion.Linux Kernel: copy_from_user - Struktur mit Zeigern
Ich habe eine Struktur:
struct my_struct{
int a;
int *b;
};
ich es im User-Space initialisieren und übergeben Zeiger auf mein char Gerät my_struct Funktion ‚schreiben‘. In der Funktion "Schreiben" des Space-Zeichens des Kernels werfe ich es von einem * char auf diese Art von Struktur um. Ich ordne Speicher für eine Struktur mit kmalloc und tun copy_from_user
hinein.
Es ist in Ordnung für einfache 'int a', aber es kopiert nur Zeiger (Adresse) von b-Wert, nicht Wert von b, so bin ich jetzt im Kernel Space und ich arbeite mit einem Zeiger, der auf zeigt ein Benutzerraumspeicher. Ist das falsch und ich sollte nicht direkt auf User Space Zeiger zugreifen und ich muss copy_from_user
jeden einzelnen Zeiger in meiner Struktur und dann jeden Zeiger in "lesen" -Funktion mit copy_to_user
Funktion zurück kopieren?
Ich würde auch darauf hinweisen, dass ich an keine syscalls oder ioctls denken kann, die Strukturen mit Zeigern in ihnen nehmen. Selbst diejenigen, die Zeichenfolgen haben, werden stattdessen eine Reihe von Zeichen in der Struktur haben. Die Tatsache, dass es sehr ärgerlich ist, Code für jedes Zeigerelement zu schreiben, könnte damit etwas zu tun haben. :-) – asveikau
@asveikau: 'readv()' und 'writev()'? – caf