Thread (8 messages) 8 messages, 4 authors, 2012-06-20

A confusion about invoking my syscall

From: 王哲 <hidden>
Date: 2012-06-20 08:15:41

2012/6/20 Jeff Haran [off-list ref]
 ** **

** **

*From:* ?? [mailto:wangzhe5004 at gmail.com]
*Sent:* Monday, June 18, 2012 9:32 PM
*To:* Jeff Haran
*Cc:* kernelnewbies
*Subject:* Re: A confusion about invoking my syscall****

** **

** **

2012/6/19 Jeff Haran [off-list ref]****

 ****

 ****

*From:* kernelnewbies-bounces at kernelnewbies.org [mailto:
kernelnewbies-bounces at kernelnewbies.org] *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 at 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? ****

On my system /usr/include/bits/syscall.h, which is being included in your
program because it includes syscall.h.

           83 #define SYS_getpid __NR_getpid  ?so SYS_getpid is replaced
by __NR_getpid. and __NR_getpid was defined in the
kernel(arch/x86/include/asm/unistd_32.h). and my syscall was also defined
there.#define SYS_mysyscall __NR_mysyscall, i don't kown why it doesn't
works.


****

Jeff Haran****
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120620/4ad9e055/attachment-0001.html 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help