On Tue, Jun 19, 2012 at 12:32 PM, 王哲 <wangzhe5...@gmail.com> wrote:
> > > 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? >> >> >> > you can read LKD3 written by Robert Love which describes the process clearly. > > >> Jeff Haran >> **** >> > > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > >
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies