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

mip*_*adi 19 file-io kernel-module linux-kernel

我正在编写一个需要打开和读取文件的Linux内核模块.实现这一目标的最佳方法是什么?

MBC*_*ook 31

我可以问你为什么要打开文件?

我喜欢关注Linux开发(出于好奇,我不是内核开发人员,我做Java),我之前看过这个问题的讨论.我能够找到关于此的LKML消息,基本上提到它通常是一个坏主意.我几乎肯定LWN在去年覆盖了它,但我很难找到这篇文章.

如果这是一个私有模块(比如某些自定义硬件而且模块不会被分发),那么你可以这样做,但我的印象是,如果你要将你的代码提交到主线那么它可能不会被接受.

Evan Teran提到了sysfs,这对我来说似乎是一个好主意.如果你真的需要做更难的定制的东西,你可以随时制作新的ioctrls.

编辑:

好的,我找到了我要找的文章,它来自Linux Journal.它解释了为什么做这种东西通常是一个坏主意,然后继续告诉你究竟该怎么做.


Eva*_*ran 9

假设您可以获得指向open/ read/ close系统调用的relavent函数指针的指针,您可以执行以下操作:

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);
Run Code Online (Sandbox Code Playgroud)

你需要创建syscall_*我已经展示的" "函数指针.我相信有更好的方法,但我相信这会有效.