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