vfs_write导致内核恐慌

1 人关注

这是我从内核写入文件的代码。(我知道直接从内核读写不是一个好主意,但这只是一个测试)。

static void write_startup_file(char *startstring)
  mm_segment_t oldfs;
  struct file *f;
  loff_t pos=0;
  f = filp_open("/bin/startupcheck",O_WRONLY|O_CREAT, 0644);
  oldfs = get_fs();
  set_fs (KERNEL_DS);
  if(f)
   vfs_write(f,startstring, strlen(startstring), &pos);
   set_fs(oldfs);
   filp_close(f, NULL);
  printk(KERN_CRIT "Unable to open startfile...\n");

而我在另一个函数ourVeryOwnFunction()中调用它,如

if(dbval==NULL) { write_startup_file("FAILED");}

其中dbval是一个正在读取的值。但当我编译内核并运行它时(我在vmware上运行它)。我得到的内核恐慌是here

很明显,我做错了什么。希望得到一些帮助。谢谢。

1 个评论
What happen to old_fs if filp_open fails?
linux
kernel
ubuntu-14.04
file-writing
linuxnoob
linuxnoob
发布于 2017-03-25
2 个回答
rfx
rfx
发布于 2018-11-05
已采纳
0 人赞同

首先,初始化你的 struct file * 指针。不要依靠简单地检查返回的指针和 NULL 。使用 IS_ERR 宏来代替。老实说,一般来说,很难说还有什么问题。读一下这样的内容 http://ytliu.info/notes/linux/file_ops_in_kernel.html or refer to these questions on SO

如何在Linux内核模块中读/写文件?

Linux内核模块中的文件I/O