Re: A confusion about invoking my syscall

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Tue, Jun 19, 2012 at 12:32 PM, 王哲 <wangzhe5004@xxxxxxxxx> wrote:


2012/6/19 Jeff Haran <jharan@xxxxxxxxxxxxxx>

 

 

From: kernelnewbies-bounces@xxxxxxxxxxxxxxxxx [mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of ??
Sent: Monday, June 18, 2012 6:40 PM
To: kernelnewbies
Subject: A confusion about invoking my syscall

 

Hello everyone:

         I append a simple syscall in kernel. and the function is as follows:

  asmlinkage  long sys_mysyscall(long data)
 {
          printk("This is my syscall!\n");
          return data;
  }

and i test it sucessfully in user space . and the test program:

   #include <linux/unistd.h>                                                                                                                               
   #include <syscall.h>
   #include <sys/types.h>
   #include <stdio.h>
  
  
  
   int main(void)
   {
   long n = 0,m = 0,pid1,pid2;
   n = syscall(345,190);// #define __NR_mysyscall          345
   printf("n = %ld\n",n);
   pid1 = syscall(SYS_getpid);  //getpid
   printf("pid = %ld\n",pid1);
   pid2 = syscall(20);  //getpid
   printf("pid = %ld\n",pid2);
   return 0;
  }
and the result:
n = 190
pid = 4097
pid = 4097

but if the test program is:
#include <linux/unistd.h>
#include <syscall.h>
#include <sys/types.h>
#include <stdio.h>



int main(void)
{
 long n = 0,m = 0,pid1,pid2;
 n = syscall(345,190);// #define __NR_mysyscall          345
 printf("n = %ld\n",n);
 m = syscall(SYS_mysyscall,190);
 printf("m = %ld\n",m);
 pid1 = syscall(SYS_getpid);  //getpid
 printf("pid = %ld\n",pid1);
 pid2 = syscall(20);  //getpid
 printf("pid = %ld\n",pid2);
 return 0;
}
and the result:
wanny@wanny-C-Notebook-XXXX:~/syscall/src$ gcc test1.c
test1.c: In function ‘main’:
test1.c:13:14: error: ‘SYS_mysyscall’ undeclared (first use in this function)
test1.c:13:14: note: each undeclared identifier is reported only once for each function it appears in


why i can't invoke my syscall with "SYS_mysyscall"?

Thanks in advance!

Because it appears you never defined the symbol SYS_mysyscall.

 I think so,but where shoud i defne the  symbol SYS_mysyscall ? 

  and where is the symbol SYS_getpid defined? 

  

you can read LKD3 written by Robert Love which describes the process clearly.  
 

Jeff Haran
 



_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux