【问题标题】:Where's umount system call?umount系统调用在哪里?
【发布时间】:2013-10-01 23:36:54
【问题描述】:

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

但是umount 函数在哪里?找了好久都没找到。

【问题讨论】:

标签: linux-kernel umount


【解决方案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 函数。

【讨论】:

    【解决方案2】:

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

    实现该函数是为了执行内核系统调用,通常是通过一小段汇编代码。与大多数系统调用相反,glibc 并没有简单地将这个系统调用包含在其master list of linux syscalls 中。相反,它为此设置了一些dedicated assembly code。这其中的含义隐藏在很多层的宏展开之后,我刚才无法让预处理器发出最终的汇编代码。

    【讨论】:

      猜你喜欢
      • 2020-03-23
      • 2013-07-13
      • 2019-04-06
      • 2011-09-24
      • 2014-01-22
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多