我会一步引导您一步错误使用自定义的系统编译Linux内核模块调用
首先,我编辑的3个文件在我的Linux内核目录
打开
LINUX_DIRECTORY/arch/x86/syscalls/syscall_64.tbl
并添加自定义来电我“M实施 - 使用适当的格式这里声明它们:
LINUX_DIRECTORY/include/linux/syscalls.h
- 使用适当的格式:打开
LINUX_DIRECTORY/Makefile
并添加我存储我的新系统的目录调用到core-y
行:核心-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,而我不知道要改变什么。谢谢