添加系统调用时地址错误

Maj*_*imi 14 c kernel system-calls

我已下载内核2.6.38-5并想添加系统调用.我做了以下事情:

  1. 我已将系统调用添加到系统调用表中;

    <src folder>/arc/x86/kernel/syscall_table_32.S
    
    .long sys_mycall
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我添加了系统电话号码;

    <src folder>/include/asm-generic/unistd.h
    
    #define __NR_mycall 244
    __SYSCALL(__NR_mycall, sys_mycall)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我已将原型添加到syscalls.h;

    <src follder>/include/linux/syscalls.h
    
    asmlinkage long sys_mycall(long input);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 而且,这是我的系统调用;

    asmlinkage long sys_mycall(long input) {
        return (input * 2);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 我也编辑了Makefile.

现在编译之后,当我通过syscall()它使用它时,我将BAD ADDRESSerrno设置为14.

我该怎么办?

nin*_*alj 5

在x86上,get_thread_area()已经采用了系统调用号244 ,它将第一个参数作为指向以下内容的指针struct user_desc:

int get_thread_area(struct user_desc *u_info);
Run Code Online (Sandbox Code Playgroud)

您正在传递一个数字而不是一个指针,内核正在尝试将其解释为指针,它确定它指向您的进程之外,然后返回-EFAULT.