在Linux中创建系统调用

4
我们今天在我的“操作系统”课程中获得了一个期中项目,我们被要求实现一个系统调用(我想我会写一段代码来调用它)。
我知道我需要更新系统调用表(记不清名字了,但没关系),以及创建一个内核模块,使表指向它,但这意味着我必须重新编译整个内核,以便内核知道我的模块吗?
我看到可以劫持当前的系统调用,但我怀疑如果我那样做,我就无法得到任务分数。
只是想了解一下我将会付出的努力规模。
更新: 事实上有点麻烦,从我相信2.6.32开始他们改变了一些东西,所以当我回到一个之前的内核版本,特定于我找到的在线教程时,就很容易跟进。如果有人在线上捕捉到这个并正在遵循教程,我建议最初下载教程中相同的内核,然后从那里开始,一旦你了解了自己在做什么。如果你真的很熟悉编译内核等,你可能不会有问题,但这是我第一次编译内核,所以编译2个小时后发现某些东西不起作用,不得不重新开始,尤其是当我不确定自己做对了还是错了时,这真的很痛苦。

重新编译内核部分时,我建议您从您的发行版中获取源代码和.config,而不是使用来自kernel.org的源代码创建自己的.config。如果您无法正确设置硬件的.config,这样做可能会给您带来更多麻烦。 - jonescb
3个回答

4
您想阅读的是:
  • Michael Beck(作者),Harald Bohme(作者),Mirko Dziadzka(作者),Ulrich Kunitz(作者),Robert Magnus(作者),Dirk Verworner(作者),Claus Schroter(作者)所著的《Linux Kernel Programming, Third Edition》(平装本),由Addison-Wesley(Pearson Education)出版,ISBN-10: 0201719754ISBN-13: 978-0201719758

可能还需要更多细节:

  • Daniel P. Bovet和Marco Cesati所著的《Understanding the Linux Kernel, Third Edition》,由O’Reilly出版,ISBN 10: 0-596-00565-2ISBN 13: 9780596005658
  • Jonathan Corbet,Alessandro Rubini和Greg Kroah-Hartman所著的《Linux Device Drivers, Third Edition》,由O’Reilly出版,ISBN 10: 0-596-00590-3ISBN 13: 9780596005900

我有《设备驱动程序》第二版的书,而第三版可以免费在线阅读,是一本非常有趣的书! - onaclov2000
我提到的第一个是如果你想进入Linux内核开发领域最好的选择。它很好地涵盖了操作系统本身的设计,并引导你亲自进行黑客攻击。 - haylem

3

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

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


到目前为止看起来不错,我在学校时会更仔细地检查一下,现在看起来好像已经解决了!--你以前做过这个吗?在你的意见中,它很困难吗?从我的角度来看似乎并不困难,但我从未尝试过,所以我不确定。 - onaclov2000
我认为你应该没问题。编译内核大约需要5分钟左右,除非你使用的是古老的硬件。 - dbyrne
嗯,我确实进行了“yestoallconfig”(或类似的操作),然后执行了一次make命令,已经持续了至少30分钟。我的机器配置是3.2Ghz的双处理器,大约有4GB的内存...再说一遍,我是从头开始编译的,如果这有帮助的话。 - onaclov2000
是的,我猜编译时间会根据你的配置有相当大的差异。最终花了多长时间? - dbyrne

3

我明白我需要更新系统调用表格

路径为/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.

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接