Linux源代码中的mount API在哪里实现?
Where does mount API implemented in Linux source code?
我是 Linux 内核的新手,我从 GitHub 上的 repo 克隆了 Linux 源代码。我找不到文件 sys/mount.h
也找不到 mount
函数。
你知道这个文件在源代码中的什么位置吗?我在哪里可以找到它的实现?
如果您不知道系统调用在内核中的何处实现,可以使用一般步骤顺序找到它。您需要将内核源代码下载到您的机器上。
首先找出系统调用需要的参数数量。例如。 mount(2)需要五个参数。
由于mount(2)需要5个参数,在内核源码中搜索SYSCALL_DEFINE5(mount
:
grep -nr 'SYSCALL_DEFINE5(mount'
这需要一段时间才能 运行,但它最终会找到:
./fs/compat.c:92:COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
./fs/namespace.c:3026:SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
因此,您要查找的系统调用位于 ./fs/namespace.c 中的第 3026 行。(我使用的是 Linux 4.19.99,因此行号可能在你的内核上有所不同。)
我是 Linux 内核的新手,我从 GitHub 上的 repo 克隆了 Linux 源代码。我找不到文件 sys/mount.h
也找不到 mount
函数。
你知道这个文件在源代码中的什么位置吗?我在哪里可以找到它的实现?
如果您不知道系统调用在内核中的何处实现,可以使用一般步骤顺序找到它。您需要将内核源代码下载到您的机器上。
首先找出系统调用需要的参数数量。例如。 mount(2)需要五个参数。
由于mount(2)需要5个参数,在内核源码中搜索SYSCALL_DEFINE5(mount
:
grep -nr 'SYSCALL_DEFINE5(mount'
这需要一段时间才能 运行,但它最终会找到:
./fs/compat.c:92:COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
./fs/namespace.c:3026:SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
因此,您要查找的系统调用位于 ./fs/namespace.c 中的第 3026 行。(我使用的是 Linux 4.19.99,因此行号可能在你的内核上有所不同。)