我不能';我在Linux内核中找不到proc_create_data函数的定义,或者我找到了它,但没有理解它
形势 为了更好地理解Linux内核,我将遵循以下步骤 这里有一个编写自定义/proc接口的示例。下面是上面链接的示例代码片段-我不能';我在Linux内核中找不到proc_create_data函数的定义,或者我找到了它,但没有理解它,c,linux,linux-kernel,C,Linux,Linux Kernel,形势 为了更好地理解Linux内核,我将遵循以下步骤 这里有一个编写自定义/proc接口的示例。下面是上面链接的示例代码片段-custom proc.c: #包括 #包括 #包括 #包括 #包括 #包括 #在C语言中,宏将被文本扩展,人们可以像函数一样使用它 如果我在这里应用它,那么在所有的扩展之后,我将 /include/linux/proc_fs.h: #省略 外部结构proc_dir_项({NULL;}) custom proc.c #省略 proc=({NULL;}) 我觉得这不太对
custom proc.c
:
#包括
#包括
#包括
#包括
#包括
#包括
#在C语言中,宏将被文本扩展,人们可以像函数一样使用它
如果我在这里应用它,那么在所有的扩展之后,我将
/include/linux/proc_fs.h
:
#省略
外部结构proc_dir_项({NULL;})
custom proc.c
#省略
proc=({NULL;})
我觉得这不太对
我对编程并不陌生,但对C不熟悉。我阅读了Brian W.Kernighan和Dennis m.Ritchie的《C编程语言》
,但对宏的解释与上面的链接相同
问题(主菜:)
如何理解内核中定义的proc\u create\u data
函数
我不是在寻找一个非常详细的技术答案,只是一种解释代码的方法,这样我就可以按照示例进行操作,并能够在需要时阅读更多的内核代码
配菜
我在某处听说,尽管内核是用C编写的,但它与“普通”C有一些不同。不过,我不确定这是真的还是差异的程度
如果这是“C语言的内核版本”所使用的技巧,那么如果有人知道这些技巧的解释链接,这将是很有帮助的
我已经查看了以下资源,但找不到此类信息:
- Linux内核开发-Robert Love
- Linux系统编程-Robert Love
NULL
的语句。请注意,({…})
是一个-不要在代码中使用不可移植的扩展,而更喜欢使用静态内联
函数。语句表达式的返回值是使用的最后一个表达式的值-NULL
如果从用户配置中定义了CONFIG\u PROC\u FS
,则PROC/generic.c
与任何其他函数一样定义函数,包括PROC\u FS.h
在内的源文件参见函数声明,而不查看宏
我在Linux内核中找不到proc_create_数据函数的定义
无需担心-导致本答案中提到的所有3个定义。网络上甚至有多个索引内核源代码浏览器,举个例子(但我现在在lxr上看到了内部错误)。如果没有,您可以使用或为计算机上的源代码编制索引,然后浏览代码
如何理解内核中定义的proc_create_data函数
与任何其他功能一样。否,宏不使用声明展开-编译器会看到宏或函数声明,具体取决于是否启用了PROC\u FS
我在某处听说,尽管内核是用C编写的,但它与“普通”C有一些不同
Linux内核专门针对GNU GCC编译器,所以它倾向于使用,有时标记为GNU C。?
#省略
部分非常重要……我看到你正在编辑,所以我不想弄乱你的帖子:你应该链接到第102行的proc#u create_data
,并且在链接中使用v5.9.1
而不是最新的
,否则它们将来会断开。不用担心-一切都好:pThanks@KamilCuk。像你这样的人就像内核领域的奇才,没有他们,像我这样的用户领域居民就无法进入内核。
#ifdef CONFIG_PROC_FS
extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
struct proc_dir_entry *,
const struct proc_ops *,
void *);
#else /* CONFIG_PROC_FS */
#define proc_create_data(name, mode, parent, proc_ops, data) ({NULL;})
#endif