模块运行时碰撞系统



我需要编写一个模块来创建一个文件并以一定的频率输出一个铭文。我实现了它。但当这个模块运行时,在某个时刻系统崩溃,不再打开。

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/kernel.h>
#include <linux/timer.h>
MODULE_LICENSE("GPL");
#define BUF_LEN 255
#define TEXT "Hello from kernel modn"
int g_timer_interval = 10000;
static struct file *i_fp;
struct timer_list g_timer;
loff_t offset = 0;
char buff[BUF_LEN + 1] = TEXT;
void timer_rest(struct timer_list *timer)
{
mod_timer(&g_timer, jiffies + msecs_to_jiffies(g_timer_interval));
i_fp = filp_open("/home/hajol/Test.txt", O_RDWR | O_CREAT, 0644);
kernel_write(i_fp, buff, strlen(buff), &offset);
filp_close(i_fp, NULL);
}

static int __init kernel_init(void)
{
timer_setup(&g_timer, timer_rest, 0);
mod_timer(&g_timer, jiffies + msecs_to_jiffies(g_timer_interval));
return 0;
}
static void __exit kernel_exit(void)
{
pr_info("Ending");
del_timer(&g_timer);
}
module_init(kernel_init);
module_exit(kernel_exit);

当系统崩溃时,您应该从内核获得一条非常详细的错误消息,让您知道发生这种情况的位置和原因("oops"消息(:

  1. 阅读错误消息
  2. 再读一遍
  3. 理解它的含义(这通常需要从步骤1开始几次:-(

我突然想到的一件事是,您不会对filp_open的返回值进行任何错误检查。因此,您可以很好地将NULL指针(或错误指针(输入到kernel_write中。

相关内容

  • 没有找到相关文章

最新更新