我正在编写一个需要打开和读取文件的Linux内核模块。怎么做?
发布于 2017-12-29 09:52:05
你为什么要打开一个文件?
如果这是一个私人模块(就像一些自定义的硬件和模块将不会分发),那么你可以做到这一点,但我的印象是,如果你要提交你的代码到主线,那么它可能不被接受。s。
发布于 2017-12-29 10:33:52
假设你可以得到指针指向relavent函数指针到open
/ read
/ close
系统调用,你可以这样做:
mm_segment_t fs = get_fs();
set_fs(KERNEL_DS);
fd = (*syscall_open)(file, flags, mode);
if(fd != -1) {
(*syscall_read)(fd, buf, size);
(*syscall_close)(fd);
}
set_fs(fs);
你将需要创建syscall_*
我已经显示的函数指针。
发布于 2017-12-29 11:45:07
如果你需要从内核模块读取/写入文件,那么你在架构上会出错。
有一些机制(例如netlink),或者只是注册一个字符设备,以允许一个内核模块和一个用户空间的帮助进程通信。
你也可以实现一个系统调用(或类似的)来获取在用户空间中打开的文件描述符,并从内核中读/写它。
这可能会比试图在内核空间打开文件更整洁。
还有一些已经从内核空间打开文件的东西,你可以看看他们。
https://stackoverflow.com/questions/-100001315
复制相似问题