9

我想实现我自己的系统调用。(见下面的链接)

http://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

但是添加新的系统调用需要内核编译。

如何在不重新编译Linux内核的情况下实现自己的系统调用?

4

2 回答 2

15

你不能。

如果不重新编译内核,你所能做的就是构建和加载内核模块,内核模块不能添加新的系统调用。

于 2013-06-20T16:08:59.453 回答
4

你当然可以。

简而言之,您需要修补正在运行的内核。

至少有两种方法可以添加新的系统调用:

  1. 扩展现有系统调用表(sys_call_table和)并在任何系统调用条目(等...)处ia32_sys_call_table修补系统调用限制检查指令(通常cmp在 x86 上)system_callia32_system_all
  2. 复制现有系统调用表,根据需要扩展它们,修补系统调用调度指令(通常call在 x86 上)以指向表的副本,并在任何系统调用条目处修补系统调用限制检查指令。

有关详细信息,请参阅此答案:

使用 LKM 实现 Linux 系统调用

32 位应用程序如何在 64 位 Linux 上进行系统调用?

:)

于 2013-06-21T04:29:28.960 回答