#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include<linux/sched.h>
#include <asm/uaccess.h>
#include <linux/slab.h>
char *msg;
ssize_t write_proc(struct file *filp,const char *buf,size_t count,loff_t *offp)
{
copy_from_user(msg,buf,count);
printk(KERN_INFO "%s",msg);
return count;
}
struct file_operations proc_fops = {
write: write_proc
};
int proc_init (void) {
proc_create("write",0,NULL,&proc_fops);
return 0;
}
void proc_cleanup(void) {
remove_proc_entry("write",NULL);
}
MODULE_LICENSE("GPL");
module_init(proc_init);
module_exit(proc_cleanup);
Wenn ich den Befehl echo 'hello' > /proc/write
verwendet, erscheint nichts am Terminal. Kannst du mir helfen, Fehler im Code zu finden? Die Zeichenfolge, auf der ich mich geschrieben habe, sollte auf dem Terminal erscheinen.Erstellen eines einfachen Nur-Schreib-Proc-Eintrags im Kernel
Beispiel:
$ echo 'Hallo'>/proc/schreiben
hallo
Sie initialisieren 'msg' nicht, aber Sie kopieren Daten dorthin. Das wird zusammenbrechen ... wenn du Glück hast. – rodrigo
'Die Zeichenfolge, die ich darauf geschrieben habe, sollte am Terminal angezeigt werden. - Nein,' printk' wird nicht am Terminal ausgegeben. Es schreibt in das Kernel-Protokoll, das Sie über 'dmesg' sehen können. – Tsyvarev
Einchecken/var/log/messages. –