在 Linux 中,如果我有源代码树,在哪里可以找到所有系统调用的源代码?另外,如果我想查找特定系统调用的源代码和程序集,我可以在终端中输入类似的内容my_system_call
?
您需要 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);
}
希望事情能澄清一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)