相关疑难解决方法(0)

从内核写入文件

我想从内核空间写入一个日志文件.我可以创建,打开和关闭文件(/var/log/my_kern_module.log),但如果我尝试写入内容,我的模块崩溃...所以我知道内核空间的读/写文件很糟糕,但我必须这样做它在这个模块中.你有什么建议可以帮助我吗?谢谢

在这里,您可以找到在我的内核模块上执行写入的代码.它代码运行到一个线程(kthread)

mutex_lock(&gl_mtx_writelog);
      printk(KERN_EMERG "Readed : %s\n", buffer);

      fd = filp_open("/var/log/my_kern_module.log", O_CREAT | O_WRONLY | O_APPEND, S_IRWXU);
      if (!IS_ERR (fd)) {
        fs = get_fs();
        set_fs(KERNEL_DS);

        do_sync_write(fd, buffer, readed, 0);

        set_fs(fs);
        filp_close(fd, NULL);
      }
      mutex_unlock(&gl_mtx_writelog);
Run Code Online (Sandbox Code Playgroud)

所以,我试过使用fd-> f_op-> write(...),但模块也崩溃了.

BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<c10df83a>] do_sync_write+0x6a/0xe0
*pde = 00000000
Oops: 0000 [#1] SMP
last sysfs file: /sys/module/snd_mixer_oss/initstate
Modules linked in: trigger_server snd_seq_dummy snd_seq_oss snd_seq_midi_event s                          nd_seq snd_seq_device snd_pcm_oss snd_mixer_oss ipv6 pcmcia pcmcia_core agpgart                           lp fuse ppdev …
Run Code Online (Sandbox Code Playgroud)

c linux kernel

5
推荐指数
1
解决办法
6872
查看次数

标签 统计

c ×1

kernel ×1

linux ×1