gpt4 book ai didi

linux-kernel - syscall_32.tbl linux 文件中的 "name"参数是什么意思?

转载 作者:行者123 更新时间:2023-12-04 05:07:32 24 4
gpt4 key购买 nike

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

这是我们编出来的东西吗?就像我们决定调用这个特定系统调用的名称一样?

例如表的结构是:

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

对于 <name>部分这是我们决定并直接输入的参数吗?或者它是更具体的东西,比如系统调用所在的文件名?

最佳答案

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

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

还有一个头文件unistd_xx.h , 它提供了 #define用于用户空间,按名称列出系统调用索引号。您询问的name 字段将进入此列表,通过它用户空间可以引用此系统调用:__NR_<xxx> .这个头文件被复制并在用户空间代码中使用,以便可以通过名称引用系统调用索引号(请参阅 glibc 源代码,了解它们的使用方式)。

系统调用_32.tbl:

350     i386    finit_module            sys_finit_module

unistd_32.h:

#define __NR_finit_module 350

系统调用_32.h:

__SYSCALL_I386(350, sys_finit_module, sys_finit_module)

关于linux-kernel - syscall_32.tbl linux 文件中的 "name"参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19648470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com