代码之家  ›  专栏  ›  技术社区  ›  onaclov2000

在Linux中创建系统调用

  •  4
  • onaclov2000  · 技术社区  · 14 年前

    我们今天刚刚有一个期中项目,我的“操作系统”课程,我们被要求实现一个系统调用(我想我们必须编写一段代码来调用它)。

    我知道我需要更新系统调用的表(不记得名称,但没有大的),以及创建一个表将指向的内核模块,但这是否意味着我必须重新编译整个内核,以便内核知道我的模块?

    我已经看到劫持当前系统调用是可能的,但我怀疑如果我这样做的话,我的任务就得不到学分。

    只是想了解一下我的努力程度。

    更新: 好吧,这有点麻烦,他们改变了一些东西,从我相信2.6.32前进,所以当我回到以前的内核版本,具体到我发现的在线教程,这是真的很容易遵循。如果有人在网上看到了这个,并且正在学习一个教程,最初我建议在教程中下载同一个内核,然后在你理解了你在做什么之后再继续。如果你真的很熟悉编译内核等,你可能没有问题,但这是我第一次编译内核,所以编译2个小时,然后发现有些东西不起作用,不得不重新编译,特别是当我不确定自己做错了什么/没有做错什么时。

    3 回复  |  直到 11 年前
        1
  •  3
  •   dbyrne    14 年前

    但这是否意味着我必须重新编译整个内核,以便内核知道我的模块?

    是的,您需要重新编译内核。

        2
  •  4
  •   haylem    14 年前

    你想读:

    • Linux内核编程,第三版 ,

    可能还有更多细节:

    • 了解Linux内核,第三版 国际标准书号10:0-596-00565-2 ,
    • Linux设备驱动程序,第三版 作者Jonathan Corbet,Alessandro Rubini,Greg Kroah Hartman,由OReilly出版, , 国际标准书号13:9780596005900
        3
  •  2
  •   user191776 user191776    14 年前

    我知道我需要更新

    /usr/src/linux/arch/i386/kernel/syscall_table.S

    这是否意味着我必须重新编译 关于我的模块?

    是的,确实如此。

    Just wanted to get a feel for the size of the effort I'll be making.
    

    如果知道作为系统调用的一部分要编写什么代码,就已经完成了。您只需等待内核重新编译的时间。以下是一组说明:

    Implementing a System Call in Linux