我在哪里可以找到系统调用源代码?

问题描述 投票:30回答:3

在Linux中,只要拥有源代码树,在哪里可以找到所有系统调用的源代码?另外,如果我要查找特定系统调用的源代码和程序集,是否可以在终端输入类似my_system_call的内容?

c linux assembly linux-kernel system-calls
3个回答
36
投票

您需要Linux内核源代码才能查看系统调用的实际源代码。手册页(如果安装在本地系统上)仅包含调用的文档,而不包含调用源本身。

不幸的是,系统调用并不存储在整个内核树中的一个特定位置。这是因为各种系统调用可以引用系统的不同部分(进程管理,文件系统管理等),因此将它们与与该系统的特定部分相关的树的部分分开存储是不可行的。] >

您可以做的最好的事情是寻找SYSCALL_DEFINE[0-6]宏。它(显然)用于将给定的代码块定义为系统调用。例如,fs/ioctl.c具有以下代码:

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}

这样的定义意味着ioctl系统调用已声明,并接受三个参数。 SYSCALL_DEFINE旁边的数字表示自变量的数量。例如,对于在getpid(void)中声明的kernel/timer.c,我们有以下代码:

SYSCALL_DEFINE0(getpid)
{
        return task_tgid_vnr(current);
}

希望可以将事情清除一些。


2
投票

从应用程序的角度来看,system call是由kernel完成的基本操作和原子操作。


2
投票

我知道它已经很旧了,但是我也在寻找_system_call()的来源并找到了这个花絮

© www.soinside.com 2019 - 2024. All rights reserved.