• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Im Kernelmodul in eine Datei schreiben

ArminI

Newbie
Hallo,
versuche gerade in einem LKM eine Datei anzulegen und in diese zu schreiben.
Das anlegen hat mit filp_open funktioniert. Leider kann ich keine Funktion finden mit der ich aus einem Kernel Space Buffer in die Datei schreiben kann.

Grüße

Armin
 

Spasswolf

Member
filp_open gibt dir ja eine struct file, in die du mit
Code:
ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
schreiben kannst. Das Problem ist aber das vfs_write aus einem userspace buffer schreibt. Also könnte man doch mit copy_to_user den kernelspace buffer in einen userspace buffer kopieren.
 
OP
A

ArminI

Newbie
Hallo,
so habe ich es auch gemacht.
Ich frage mich nur warum dieser "Umweg" über den Userspace notwendig ist.


Danke und Grüße

Armin
 
ArminI schrieb:
Ich frage mich nur warum dieser "Umweg" über den Userspace notwendig ist.
1. Gute Frage, frag doch mal LKML.
2. Irgendwas muss entweder (a) anders nicht gehen oder (b) fundamental kaputt ("broken design") sein, dass du vfs_* brauchst.
Code:
static const char kbuf[] = "Hello World";
mm_segment_t oldfs = get_fs();
loff_t pos;

set_fs(KERNEL_DS);
vfs_write(filp, kbuf, strlen(kbuf), &pos);
set_fs(oldfs);
Unschön, aber geht.
 
OP
A

ArminI

Newbie
Hallo,

Code:
static const char kbuf[] = "Hello World";
mm_segment_t oldfs = get_fs();
loff_t pos;

set_fs(KERNEL_DS);
vfs_write(filp, kbuf, strlen(kbuf), &pos);
set_fs(oldfs);
Unschön, aber geht.

genau dass habe ich gesucht, vielen Dank.

Habe zuvor mit Anforderung von User Space hantiert (mmap). Ist so deutlich einfacher.


Grüße

Armin
 
Oben