Linux 内核模块 - 创建 proc 文件 - proc_root 未声明错误
我从该 URL 复制并粘贴代码,以使用内核模块创建和读取/写入 proc 文件,但收到 proc_root 未声明的错误。这个例子在几个网站上都有,所以我认为它是有效的。有什么想法为什么我会收到此错误吗?我的 makefile 需要不同的东西吗?下面也是我的 makefile:
创建基本 proc 文件的示例代码(直接复制并粘贴以完成初始测试): http://tldp.org/LDP/lkmpg/2.6/html/lkmpg .html#AEN769
Makefile 我正在使用:
obj-m := counter.o
KDIR := /MY/LINUX/SRC
PWD := $(shell pwd)
default:
$(MAKE) ARCH=um -C $(KDIR) SUBDIRS=$(PWD) modules
I copy and paste code from this URL for creating and reading/writing a proc file using a kernel module and get the error that proc_root is undeclared. This same example is on a few sites so I assume it works. Any ideas why I'd get this error? Does my makefile need something different. Below is my makefile as well:
Example code for a basic proc file creation (direct copy and paste to get initial test done):
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN769
Makefile I'm using:
obj-m := counter.o
KDIR := /MY/LINUX/SRC
PWD := $(shell pwd)
default:
$(MAKE) ARCH=um -C $(KDIR) SUBDIRS=$(PWD) modules
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个例子已经过时了。在当前内核 API 下,传递
NULL
作为 procfs 的根。另外,您应该使用
proc_create()
和适当的const struct file_operations *
,而不是create_proc_entry
。That example is out of date. Under the current kernel API, pass
NULL
for the root of procfs.Also, instead of
create_proc_entry
, you should useproc_create()
with a properconst struct file_operations *
.在 proc 文件系统中创建条目的界面发生了变化。您可以查看 http://pointer-overloading。 blogspot.in/2013/09/linux-creating-entry-in-proc-file.html 了解详细信息
这是一个带有新界面的“hello_proc”示例:
There has been a change in the interface to create an entry in the proc file system. You can have a look at http://pointer-overloading.blogspot.in/2013/09/linux-creating-entry-in-proc-file.html for details
Here is a 'hello_proc' example with the new interface:
更新:
上述接受的答案可能对您有用。它不再适用于 GNU/Linux 5.6.y 及更高版本!从 5.6 开始,
proc_create()
将接受proc_ops
作为参数,而不是file_operations
。字段前面带有proc_
并且proc_ops
中没有owner
字段 (检查此处)。附带说明一下,程序员希望有一个可移植的代码。在这种情况下,相同的代码应该可以在不同版本的 GNU/Linux 上运行。因此,您可能还需要使用
linux/version.h
中的LINUX_VERSION_CODE
、KERNEL_VERSION(5,6,0)
宏。例如,据我所知,除了这些之外,我无法注意到任何其他重大变化:)
Update:
The above accepted answer might have worked for you. It no longer works in GNU/Linux 5.6.y and above! Since 5.6,
proc_create()
will acceptproc_ops
as argument instead offile_operations
. Fields are prepended withproc_
and there's noowner
field inproc_ops
(check here).As a side note, a programmer would wish for a portable code. In this, same code shall work across different versions of GNU/Linux. So, you may also need to use
LINUX_VERSION_CODE
,KERNEL_VERSION(5,6,0)
macros which are inlinux/version.h
. For example,AFAIK apart from these, I couldn't note any other major changes :)