"name"参数在syscall_32.tbl linux文件中的含义是什么?

cra*_*der 2 system-calls linux-kernel

我正在为Linux Fedora添加一些自定义系统调用,我目前正在尝试更新"syscall_32.tbl".唯一的打嗝是我不太确定name调用表的字段意味着什么.

这是我们刚刚弥补的吗?在我们决定调用此特定系统调用的名称中?

例如,表的结构是:

<number> <abi> <name> <entry point> <compat entry point>
Run Code Online (Sandbox Code Playgroud)

这个<name>部分是我们决定的参数,只是进入那里?或者它是更具体的东西,如系统调用所在的文件名?

Las*_*lko 6

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

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

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

syscall_32.tbl:

350     i386    finit_module            sys_finit_module
Run Code Online (Sandbox Code Playgroud)

unistd_32.h:

#define __NR_finit_module 350
Run Code Online (Sandbox Code Playgroud)

syscalls_32.h:

__SYSCALL_I386(350, sys_finit_module, sys_finit_module)
Run Code Online (Sandbox Code Playgroud)