我已下载内核2.6.38-5并想添加系统调用。 我做了以下事情:
我已将系统调用添加到系统调用表中;
<src folder>/arc/x86/kernel/syscall_table_32.S
.long sys_mycall
我已添加系统电话号码;
<src folder>/include/asm-generic/unistd.h
#define __NR_mycall 244
__SYSCALL(__NR_mycall, sys_mycall)
我已将原型添加到syscalls.h
;
<src follder>/include/linux/syscalls.h
asmlinkage long sys_mycall(long input);
而且,这是我的系统调用;
asmlinkage long sys_mycall(long input) {
return (input * 2);
}
我也编辑了Makefile。
现在编译后,当我通过syscall()
使用它时,它会将BAD ADDRESS
的错误号设置为14。
我该怎么办?
答案 0 :(得分:5)
在x86上,系统调用号244已被get_thread_area()占用,它将第一个参数作为指向struct user_desc
的指针:
int get_thread_area(struct user_desc *u_info);
您传递的是数字而不是指针,内核正在尝试将其解释为指针,它确定它指向您的流程之外,然后返回-EFAULT
。
答案 1 :(得分:0)
Syscalls查询正在运行的内核。该函数映射到内核中的地址空间。如果您不安装此内核并重新启动计算机,则该地址将无效。