filp_open给出没有操作指针的文件指针?

时间:2018-05-21 08:04:36

标签: linux module linux-kernel

我正在尝试创建一个内核模块,它要求我在内核空间中打开一个文件。我正在使用filp_open用于此目的,下面是我试图调试的代码snipet。

struct file *f =  NULL;
mm_segment_t oldfs;
oldfs = get_fs();
set_fs(get_ds());
f = filp_open("/home/abhijeet/project/in",O_RDONLY,0);
set_fs(oldfs);
if(!f->f_op->read)
      printk(KERN_INFO "File System does not allow reads.\n");

我收到“文件系统不允许读取”。错误。我在内核4.4.131

的虚拟机中执行此操作

1 个答案:

答案 0 :(得分:0)

  1. 为什么get_fs / set_fs跳舞?
  2. 为什么你认为你需要从内核打开文件
  3. 您缺少错误检查,并且无理由地将文件设置为NULL
  4. 如果你查看如何实现阅读,你会发现:
  5. __ vfs_read从4.17rc5开始(不要有4.4方便,但可能会有类似的东西):

    <a-marker type='pattern' url='patterns/w.patt'>
    </a-marker>
    

    如您所见 - &gt; read不是从文件中读取的唯一方法。你为什么检查这个指针?

    从内核模块中读取文件通常是个坏主意。请解释一下你需要什么。