你的系统调用在哪里?

时间:2013-10-01 23:36:54

标签: linux-kernel umount

在文件util-linux-2.17.2/mount/umount.cline #246中,它写为res = umount (node);

但是umount函数位于何处?我搜索了这么多,但没找到。

2 个答案:

答案 0 :(得分:1)

umount 函数是libc系统库的一部分。您可以使用例如objdump -T /lib/libc.so.6 | grep umount。其中一个输出列中的.text条目将指示该函数(及其兄弟umount2)在该库中定义,作为可执行代码的符号(与全局变量相对)。

该函数用于执行内核系统调用,通常通过一小段汇编代码。与大多数系统调用相反,glibc不仅仅在其master list of linux syscalls中包含此系统调用。相反,它有一些dedicated assembly code。这意味着隐藏在宏扩展的许多层之后,我现在无法让预处理器发出最终的汇编代码。

答案 1 :(得分:1)

umount是对libc中同名库函数的调用。该函数依次调用umount系统调用。通过阅读系统调用的工作原理,可以找到库函数如何调用内核来执行特定函数。此链接可能会帮助您完成How do system calls work?

过程

如果您想知道系统调用umount的位置,请下载最新的内核。转到文件fs / namespace.c。在那里你会找到

  

SYSCALL_DEFINE2(umount,char __user *,name,int,flags)

  

SYSCALL_DEFINE1(oldumount,char __user *,name)

定义umount和oldumount函数。