Linux kernel 什么是;名称“;syscall_32.tbl linux文件中的参数mean?

Linux kernel 什么是;名称“;syscall_32.tbl linux文件中的参数mean?,linux-kernel,system-calls,Linux Kernel,System Calls,我正在向LinuxFedora添加一些自定义系统调用,目前我正在尝试更新“syscall_32.tbl”。唯一的问题是我不太确定call table的name字段是什么意思 这是我们编造的吗?就像我们决定称之为这个特定系统调用的名称一样 例如,表的结构是: <number> <abi> <name> <entry point> <compat entry point> 对于部分,这是一个我们决定并输入的参数吗?或者是系统调用所在的

我正在向LinuxFedora添加一些自定义系统调用,目前我正在尝试更新“syscall_32.tbl”。唯一的问题是我不太确定call table的
name
字段是什么意思

这是我们编造的吗?就像我们决定称之为这个特定系统调用的名称一样

例如,表的结构是:

<number> <abi> <name> <entry point> <compat entry point>


对于
部分,这是一个我们决定并输入的参数吗?或者是系统调用所在的文件名等更具体的内容

内核中有一个系统调用表,列出了所有系统调用及其实现函数。用户land通过指定系统调用的索引号来请求系统调用。因此,这个索引号必须在内核编译和用户代码编译之间匹配。由于该列表易于维护,因此引入了您找到的系统调用表,并从中自动生成代码。该表关联了系统调用:它们的索引号、要在用户区中使用的名称以及实现系统调用的内核函数名。从该表中,
Makefile
生成头文件

有一个头文件
syscalls\u xx.h
,它定义了内核中的表(它通过索引列出了实现系统调用的所有内核函数)

还有另一个头文件
unistd_xx.h
,它为用户land提供
#define
,按名称列出syscall索引号。您询问的名称字段将进入此列表,用户可通过此列表引用此系统调用:
\uuuu NR\uu
。此头文件被复制并在用户空间代码中使用,以便可以通过名称引用syscall索引号(请参阅glibc源代码,了解如何使用它们)

syscall_32.tbl:

350     i386    finit_module            sys_finit_module
unistd_32.h:

#define __NR_finit_module 350
syscalls_32.h:

__SYSCALL_I386(350, sys_finit_module, sys_finit_module)

您还可以在strace源代码中使用系统调用的完整列表及其相对系统调用号。e、 g对于i386系统,以下是链接:


几年前我尝试过,如果不重新编译内核,系统调用是不可能扩展的。你在写一个模块吗?好的,这些名称基本上就是映射到系统调用的用户和函数名。所以我可以编写一个c文件并使用name*(*所需参数),其中name是一个特定的系统调用名,而不是入口点名。。。对吗?不,你不必。这些名称是#define标签中使用的字符串。您可以随意命名您的用户空间函数-在该函数中,您将使用该头文件中的#define标签,而不是其他任何地方。