在Linux中,只要有源代码树,在哪里可以找到所有系统调用的源代码?另外,如果我想查找特定系统调用的源代码和程序集,是否可以在终端中键入以下内容 my_system_call?
my_system_call
您需要Linux内核源代码才能查看系统调用的实际源代码。手册页(如果安装在本地系统上)仅包含调用的文档,而不包含调用源本身。
对于您来说不幸的是,系统调用并不仅仅存储在整个内核树中的一个特定位置。这是因为各种系统调用可以引用系统的不同部分(进程管理,文件系统管理等),因此将它们与与该系统的特定部分相关的树的部分分开存储是不可行的。
您可以做的最好的事情就是寻找SYSCALL_DEFINE[0-6]宏。它(显然)用于将给定的代码块定义为系统调用。例如,fs/ioctl.c具有以下代码:
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,我们有以下代码:
ioctl
SYSCALL_DEFINE
getpid(void)
kernel/timer.c
SYSCALL_DEFINE0(getpid) { return task_tgid_vnr(current); }
希望这能使事情变得简单。