#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);
Когда я использовал команду echo 'hello' > /proc/write
Ничего не появилось на терминале. Можете ли вы помочь мне найти ошибки в коде? Строка, которую я на нее наложил, должна появиться на терминале.Создание простой записи только для записи в ядре
Пример:
$ эхо 'привет'>/Proc/написать
привет
Вы не инициализируете 'msg', но вы копируете данные на него. Это сбой ... если вам повезет. – rodrigo
'Строка, которую я пишу на ней, должна отображаться на терминале.' - Нет, 'printk' не выводится на терминал. Он записывает в журнал ядра, который вы можете увидеть через 'dmesg'. – Tsyvarev
Регистрация/var/log/messages. –