【问题标题】:where is the implementation of functions in syscalls.h within linux kernellinux内核中syscalls.h中函数的实现在哪里
【发布时间】:2013-05-28 18:49:21
【问题描述】:

我正在寻找linux内核syscalls.h中定义的函数的实现代码。比如我在syscalls.h文件中看到如下函数原型

asmlinkage long sys_gethostname(char __user *name, int len);
asmlinkage long sys_sethostname(char __user *name, int len);
asmlinkage long sys_setdomainname(char __user *name, int len);
asmlinkage long sys_newuname(struct new_utsname __user *name);
asmlinkage long sys_uname(struct old_utsname __user *);
asmlinkage long sys_olduname(struct oldold_utsname __user *);

但是我在我的 linux 源目录中找不到实际的实现。我对sys_uname 函数的实现特别感兴趣。有人可以帮我在 linux 源代码树的哪里找到它吗?我正在使用 ubuntu 12.10。

【问题讨论】:

    标签: linux kernel system-calls


    【解决方案1】:

    定义很难找到,因为它们使用宏。

    grep sys_uname **/*.[ch]
    

    找到了一些用途,但没有实现。但是寻找SYSCALL_DEFINE 和...

    grep 'SYSCALL_DEFINED.*uname' **/*.[ch]
    

    你会得到这个:

    kernel/sys.c:SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name)
    kernel/sys.c:SYSCALL_DEFINE1(uname, struct old_utsname __user *, name)
    kernel/sys.c:SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
    

    不能保证将来某个时候不会重新设计宏,除此之外还有其他类似的东西很难找到,所以我用了一个技巧来寻找东西:去一棵树实际上编译了一个内核,并 grep 目标文件。

    nm -A **/*.o | grep sys_uname
    

    结果(去掉了无聊的东西)是:

    kernel/built-in.o:000000000001258b T sys_uname
    kernel/sys.o:00000000000023df T sys_uname
    vmlinux.o:00000000000391a3 T sys_uname
    

    vmlinux.o 基本上是整个内核,所以当然 sys_uname 在那里。这并不能告诉我们任何事情。 built-in.o 在由该目录中链接在一起的所有目标文件组成的任何目录中(不包​​括模块 - 只是内置的),所以也忽略它。如果您收到任何带有U 且没有地址的行,请忽略这些行。剩下的就是答案:kernel/sys.o 是目标文件,所以kernel/sys.c 是源文件。

    如果您正在寻找纯粹是宏的东西的实现,或者实际上并未包含在已编译内核的配置中,则此方法将失败,因为它不会在目标文件中。

    【讨论】:

      【解决方案2】:

      它们是自动生成的。请参阅(例如,对于 x86)arch/x86/syscalls 中的代码。具体使用 sys_uname(),您会注意到实际上有几种实现(sys_olduname、sys_uname、sys_newuname),具体取决于调用进程的系统调用号和处理器模式。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2020-07-19
      • 2015-05-05
      • 1970-01-01
      • 2016-11-29
      • 2013-07-13
      • 2015-02-26
      相关资源
      最近更新 更多