filp_open不使用O_RDWR或O_WRONLY

时间:2014-11-12 23:35:24

标签: file kernel kernel-module vfs

我正在尝试使用内核中的filp_open函数在/proc/.../mynode下打开一个文件。我可以在使用O_RDONLY标志时打开它,但它不能与O_RDWR或O_WRONLY一起使用;事实上它打破了我的设备的启动顺序。

有谁知道这是什么问题?

代码:

struct file* file_open(const char* path, int flags, int rights) {
    struct file* filp = NULL;
    mm_segment_t oldfs;
    int err = 0;
    oldfs = get_fs();
    set_fs(get_ds());

    filp = filp_open(path, flags, rights);

    set_fs(oldfs);
    if(IS_ERR(filp)) {
        err = PTR_ERR(filp);
        return NULL;
    }
    return filp;
}

我这样称呼这个方法:

struct file *fp = NULL;
fp = file_open("/proc/.../mynode", O_WRONLY,0);

1 个答案:

答案 0 :(得分:1)

我无法理解为什么在错误检查之前启用地址转换。你已经在内核地址空间中调用了filp_open(假设get_ds将你带到那里),因此它在同一空间进行错误检查。这可能是filp被转换为某个随机地址以及为什么设备启动顺序中断的原因。如果在查看此问题后问题仍然存在,则目标文件sys可能没有此文件的写入权限。