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

时间:2013-06-20 16:08:06

标签: c linux linux-kernel system-calls

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

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

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

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

2 个答案:

答案 0 :(得分:15)

你不能。

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

答案 1 :(得分:3)

当然,你可以。

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

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

  1. 在任何系统调用条目({{1>)上展开现有的系统调用表(sys_call_tableia32_sys_call_table)和补丁系统调用限制检查指令(在x86上通常为cmp) },system_call等...)
  2. 复制现有的系统调用表,根据需要展开它们,修补系统调用调度指令(通常在x86上为ia32_system_all),以指向任何系统调用项的表的复制和补丁系统调用限制检查指令。 / LI>

    有关详细信息,请参阅此修订:

    Implementing Linux System Call using LKM

    How do 32-bit applications make system calls on 64-bit Linux?

    :)