【发布时间】:2014-10-16 18:23:43
【问题描述】:
我会一步一步地引导你完成
首先我在我的 Linux 内核目录中编辑 3 个文件
打开
LINUX_DIRECTORY/arch/x86/syscalls/syscall_64.tbl并添加我正在实施的自定义调用 - 使用适当的格式在这里声明它们:
LINUX_DIRECTORY/include/linux/syscalls.h– 使用适当的格式:-
打开
LINUX_DIRECTORY/Makefile并将我存储新系统调用的目录添加到core-y行:core-y := usr/my_system_call_directory/
这就是我遇到问题的地方。在LINUX_DIRECTORY/my_system_call_directory 中,我添加了一个C 文件,其中包含我的自定义系统调用定义及其对应的Makefile。我将定义留空,因为在内核模块的 C 文件中,我声明了一个外部函数(我的自定义系统调用)并定义了一个单独的函数,该函数设置为我的外部函数:
extern long (*start_shuttle)(void);
long my_start_shuttle(void) {
// stuff here
}
int init_module(void) {
// stuff here
start_shuttle = my_start_shuttle;
// more stuff
}
重新编译内核后,我尝试make 内核模块并得到no definition for start_shuttle 错误。
这是因为我在my_system_call_directory 中将start_shuttle 的定义留空了吗?它应该完全匹配我在内核模块中定义的my_start_shuttle,还是我应该添加一些特别的东西?我提前问了一些愚蠢的问题,因为我的机器重新编译 Linux 需要很长时间,而且我不确定要更改什么。谢谢
【问题讨论】:
标签: c linux linux-kernel system-calls kernel-module