Linux kernel create\u proc\u read\u条目返回NULL,但CONFIG\u proc\u FS=y

Linux kernel create\u proc\u read\u条目返回NULL,但CONFIG\u proc\u FS=y,linux-kernel,linux-device-driver,kernel-module,porting,procfs,Linux Kernel,Linux Device Driver,Kernel Module,Porting,Procfs,我正在从事32位到64位内核模块移植项目。旧的内核版本是2.6.18,目标是2.6.32 旧内核模块通过以下函数在/proc/sys/net//path下创建文件: if (create_proc_read_entry("/sys/net/<module_name>/<proc_file_name>", 0, NULL, read_proc, NULL) == NULL){ ...} if(create_proc_read_entry(“/sys/net/”,0,NUL

我正在从事32位到64位内核模块移植项目。旧的内核版本是2.6.18,目标是2.6.32

旧内核模块通过以下函数在/proc/sys/net//path下创建文件:

if (create_proc_read_entry("/sys/net/<module_name>/<proc_file_name>", 0, NULL, read_proc, NULL) == NULL){ ...}
if(create_proc_read_entry(“/sys/net/”,0,NULL,read_proc,NULL)==NULL{…}
在构建2.6.32内核之前,我在.CONFIG文件中将CONFIG_PROC_FS设置为“y”

然而,尽管内核版本2.6.32的proc_fs.h具有与内核版本2.6.18相同的“create_proc_read_entry”和.CONFIG文件中的“CONFIG_proc_fs=y”,但返回值始终为NULL,当我使用modprodbe命令加载模块时,它会使模块崩溃。如果我注释掉subject函数调用,则加载模块时不会出现任何问题,并且模块工作时不会出现任何问题


我错过什么了吗?我是否应该坚持使用CONFIG\u PROC\u FS标志?

创建\u PROC\u read\u条目
即使启用了procfs,也可能会失败。例如,除最后一个路径组件外,所有路径组件都应存在。可能您以前没有创建过目录
/sys/net/
。(如果您创建这个目录,最好使用相对路径在其下创建文件)。您提到的目录是在我加载模块时创建的。问题是,旧模块创建必要的proc文件没有任何问题。我知道您的问题是从一个内核版本移植到新版本。但为什么不让代码变得更好呢?相对路径比绝对路径更短更清晰。顺便说一句,使用以
/
开头的路径对我来说似乎很奇怪:在任何情况下,路径都应该是相对的,因为根目录的名称是
/proc
。您是否可以尝试
create\u proc\u read\u条目(“,0,read\u proc,NULL)
module\u root\u条目
是module之前为
/sys/net/
路径创建的条目。这是您需要在procfs核心模块中进行黑客攻击和打印的地方。