How do I use a Linux System call from a Linux Kernel Module

前端 未结 2 1975
生来不讨喜
生来不讨喜 2020-12-19 09:03

I am having some difficulty calling a system call from inside a Linux Kernel Module. The system calls have been tested and work properly from a standard c user space program

相关标签:
2条回答
  • 2020-12-19 09:35

    Most of system calls uses asmlinkage , which means find the arguments on the stack rather than registers. Make sure that , when you call system call , pass the arguments on stack.

    Also lot many system calls just uses copy_from_user. If you pass kernel address into such system call , they do fail.

    0 讨论(0)
  • 2020-12-19 09:37

    You can directly call sys_mycall.

    #include <linux/module.h>
    #include <linux/unistd.h>
    
    
    static int start_init(void)
    {
       long value = sys_mycall (pass_arguments)
       printk("The value is %ld\n",value);
    
       return 0;
    }
    
    static void finish_exit(void)
    {
          printk("Done!\n");
    }
    
    module_init(start_init);
    module_exit(finish_exit);
    
    0 讨论(0)
提交回复
热议问题