我正在编写一个需要打开和读取文件的Linux内核模块.实现这一目标的最佳方法是什么?
我可以问你为什么要打开文件?
我喜欢关注Linux开发(出于好奇,我不是内核开发人员,我做Java),我之前看过这个问题的讨论.我能够找到关于此的LKML消息,基本上提到它通常是一个坏主意.我几乎肯定LWN在去年覆盖了它,但我很难找到这篇文章.
如果这是一个私有模块(比如某些自定义硬件而且模块不会被分发),那么你可以这样做,但我的印象是,如果你要将你的代码提交到主线那么它可能不会被接受.
Evan Teran提到了sysfs,这对我来说似乎是一个好主意.如果你真的需要做更难的定制的东西,你可以随时制作新的ioctrls.
编辑:
好的,我找到了我要找的文章,它来自Linux Journal.它解释了为什么做这种东西通常是一个坏主意,然后继续告诉你究竟该怎么做.
假设您可以获得指向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);
你需要创建syscall_*
我已经展示的" "函数指针.我相信有更好的方法,但我相信这会有效.