2012/6/20 Jeff Haran <jha...@bytemobile.com> > ** ** > > ** ** > > *From:* 王哲 [mailto:wangzhe5...@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 <jha...@bytemobile.com>**** > > **** > > **** > > *From:* kernelnewbies-boun...@kernelnewbies.org [mailto: > kernelnewbies-boun...@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@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**** > >
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies