添加系统调用时地址错误

时间:2011-05-14 16:23:08

标签: c kernel system-calls

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

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

    <src folder>/arc/x86/kernel/syscall_table_32.S
    
    .long sys_mycall
    
  2. 我已添加系统电话号码;

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

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

    asmlinkage long sys_mycall(long input) {
        return (input * 2);
    }
    
  5. 我也编辑了Makefile。

  6. 现在编译后,当我通过syscall()使用它时,它会将BAD ADDRESS的错误号设置为14。

    我该怎么办?

2 个答案:

答案 0 :(得分:5)

在x86上,系统调用号244已被get_thread_area()占用,它将第一个参数作为指向struct user_desc的指针:

int get_thread_area(struct user_desc *u_info);

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

答案 1 :(得分:0)

Syscalls查询正在运行的内核。该函数映射到内核中的地址空间。如果您不安装此内核并重新启动计算机,则该地址将无效。