【发布时间】:2013-06-17 14:22:11
【问题描述】:
我想实现自己的系统调用。 (见下面的链接)
http://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/
但是添加新的系统调用需要内核编译。
如何在不重新编译Linux内核的情况下实现自己的系统调用?
【问题讨论】:
标签: c linux linux-kernel system-calls
我想实现自己的系统调用。 (见下面的链接)
http://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/
但是添加新的系统调用需要内核编译。
如何在不重新编译Linux内核的情况下实现自己的系统调用?
【问题讨论】:
标签: c linux linux-kernel system-calls
你不能。
如果不重新编译内核,你所能做的就是构建和加载内核模块,而内核模块不能添加新的系统调用。
【讨论】:
ioctl(),但你不能添加全新的系统调用。
当然可以。
简而言之,您需要修补正在运行的内核。
至少有两种方法可以添加新的系统调用:
system_call、ia32_system_all 等处)扩展现有系统调用表(sys_call_table 和 ia32_sys_call_table)并修补系统调用限制检查指令(通常是 x86 上的 cmp)。 ..)call)以指向表的副本,并在任何系统调用条目处修补系统调用限制检查指令。详情请参阅此答案:
Implementing Linux System Call using LKM
How do 32-bit applications make system calls on 64-bit Linux?
:)
【讨论】: