title: How do I use a Linux System call from a Linux Kernel Module
body: <p>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 but I can't seem to get the kernel module to compile and run them.</p>
  
  <p>In my user program I include the following code and the system call works:</p>
  
  <pre><code>#include &lt;linux/unistd.h&gt;   
  #define __NR_sys_mycall 343
  
  extern long int _syscall(long int_sysno,...)__THROW;
  
  //and then a simple call is done as such
  long value = syscall(__NR_sys_mycall);
  
  printf("The value is %ld\n",value);
  </code></pre>
  
  <p>But when I try the same thing in my Linux Kernel Module I get a bunch of errors that either say error: implicit declaration of function 'syscall' (if I don't include the _syscall definition) or a long list of errors about syntax if I do...so my assumption is that I need the kernel space version to call the system call. Am I right or wrong?</p>
  
  <pre><code>//My LKM code
  #include &lt;linux/module.h&gt;
  #include &lt;linux/unistd.h&gt;
  #define __NR_sys_mycall 343
  
  static int start_init(void)
  {
     long value = syscall(__NR_sys_mycall);
     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);
  </code></pre>