gpt4 book ai didi

linux - Linux Kernel 5.0.1 中为 x86 arch 定义的系统调用 ID 在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:01 25 4
gpt4 key购买 nike

我正在学习 Linux 系统编程视频教程。

当我到达“如何添加您自己的 Linux 系统调用”部分时,讲师显示所有系统调用 ID(以 __NR 开头的宏)都存在于 arch/x86/include/asm/unistd_32.h 或 unistd_64.h 中(取决于目标)。

但是在我的源代码 (linux-5.0.1) 中我没有看到这些文件,只有一个 unistd.h 不包含系统调用 ID。是这些文件被移到了别处还是 x86 现在没有自己的系统调用表。

编辑:我从 kernel.org 下载了最新的内核源代码,我正在尝试修改它。我在上述位置找不到 unistd_32.h 和 unistd_64.h 文件。我需要先做点什么吗?

最佳答案

Arch Linux 发布 unistd_32.hunistd_64.h/usr/include/asm/ 。除非您正在修改内核以添加新的系统调用,否则只需查看这些 header 即可。

<asm/unistd.h>检查宏以确定它是否包含在 32 位或 64 位代码中(并检查 x32),并使用 #include为目标引入正确的定义集。

在我最新的 x86-64 Arch 系统上:

$ pacman -Fo /usr/include/asm/unistd*
usr/include/asm/unistd_32.h is owned by core/linux-api-headers 4.7-1
usr/include/asm/unistd_64.h is owned by core/linux-api-headers 4.7-1
usr/include/asm/unistd.h is owned by core/linux-api-headers 4.7-1
usr/include/asm/unistd_x32.h is owned by core/linux-api-headers 4.7-1

在内核源代码本身中,从版本 3.3 开始,unistd_32.h供用户空间使用的是从其他文件构建

https://github.com/torvalds/linux/search?q=unistd_32.h&unscoped_q=unistd_32.harch/x86/entry/syscalls/Makefile 中找到这个

$(uapi)/unistd_32.h: $(syscall32) $(syshdr)
$(call if_changed,syshdr)

系统调用表定义于:arch/x86/entry/syscalls/syscall_32.tbl.../syscall_64.tbl

https://github.com/torvalds/linux/tree/6f0d349d922ba44e4348a17a78ea51b7135965b1/arch/x86/entry/syscalls

syscall_32.tbl的内容看起来像:

# some comments
0 i386 restart_syscall sys_restart_syscall __ia32_sys_restart_syscall
1 i386 exit sys_exit __ia32_sys_exit
2 i386 fork sys_fork __ia32_sys_fork
3 i386 read sys_read __ia32_sys_read
...

关于linux - Linux Kernel 5.0.1 中为 x86 arch 定义的系统调用 ID 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55165293/

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