【问题标题】:How to find a definition of a specific syscall in Linux sources?如何在 Linux 源代码中找到特定系统调用的定义?
【发布时间】:2013-01-10 15:06:23
【问题描述】:

我最近想看看open() 系统调用是如何在 Linux 内核中实现的。查看系统调用表表明我正在寻找的函数的名称是sys_open(),所以我为它寻找了它。但是我找不到任何声明,我能得到的最接近的是fs/open.c 中的do_sys_open。它是否以某种方式翻译成这个功能?我可能错过了什么?

【问题讨论】:

    标签: c linux kernel system-calls


    【解决方案1】:

    不,do_sys_open 不是sys_open 的实现,它只是openopenat 的通用代码。

    Syscall 函数名称,总是sys_something,由有趣的预处理器宏生成(SYSCALL_DEFINEn,其中n 是参数的数量)。

    如你所见(非常接近do_sys_open):

    SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
    {
            long ret;
            ....
    

    这个open系统调用的代码。

    【讨论】:

    • 谢谢,正是我想要的!为了将来参考,找出这些警告的最简单方法是什么?它在某个地方的文档中吗?
    • 好像没有文档记录(就是网上有一些解释,不比我的更官方)。当您查看交叉引用的 linux 源代码时很容易弄清楚:lxr.linux.no/#linux+v3.7.4/fs/open.clxr.free-electrons.com/ident?i=sys_open(您只需要足够的好奇心来一直查找未知的宏,以及一些直觉告诉哪里可以期待有趣的事情)。
    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2012-10-04
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多