首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在linux内核4.x中添加系统调用

如何在linux内核4.x中添加系统调用
EN

Unix & Linux用户
提问于 2015-08-18 08:14:10
回答 1查看 8.4K关注 0票数 3

我试图使用linux内核4.1.6添加一个系统调用,但我能找到的所有文档都是针对旧版本的。有没有人知道它是如何在新内核中完成的,或者有什么好的参考资料?

应该有三个步骤:

  1. 添加到系统调用表中。我已经计算出他们现在使用arch/x86/syscalls/syscall_64.tbl,而不是entry.S,所以我在里面放了一些东西。
  2. 添加到asm/unistd.h文件中。很明显,unistd.h文件现在是自动生成的,所以我们不必手动更新它?所以我没有为这个步骤做任何事情,因为这个文件不存在。https://stackoverflow.com/questions/10988759/arch-x86-include-asm-unistd-h-vs-include-asm-generic-unistd-h
  3. 将syscall编译到内核中。我已经将实际的系统调用代码添加到内核/sys.c中,正如一本基于内核2.6的书( Robert编写的linux内核开发书)中所建议的那样。我又编译了内核。

然后,我按照书中的建议编写了一个客户机程序,但是当我试图编译它时,它写的是未知类型的名称'helloworld‘。我的程序和这本书不一样,但结构是一样的。

代码语言:javascript
复制
#include <stdio.h>

#define __NR_helloworld 323 
__syscall0(long, helloworld)

int main()
{
    printf("I will now call helloworld syscall:\n");
    helloworld();

    return 0;
}

互联网(和可用的书籍)似乎严重缺乏这些信息--或者谷歌并不像它想象的那么聪明。无论如何,任何帮助都是非常感谢的。

谢谢。~

~

~

EN

回答 1

Unix & Linux用户

发布于 2015-08-18 08:29:47

那么假设老师希望人们阅读源,而不仅仅是从互联网上剪切和粘贴,这可以说是一项精心设计的作业。(也就是说,linux内核代码读起来不太好。确保您知道如何使用etags,因为通常您必须对宏进行三个层次的跟踪才能了解发生了什么。)

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/223888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档