Re: A confusion about invoking my syscall
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-:~/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
Re: A confusion about invoking my syscall
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-:~/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
Re: A confusion about invoking my syscall
On 06/19/2012 06:32 AM, 王哲 wrote: 2012/6/19 Jeff Haran jha...@bytemobile.com mailto:jha...@bytemobile.com __ __ __ __ *From:*kernelnewbies-boun...@kernelnewbies.org mailto:kernelnewbies-boun...@kernelnewbies.org [mailto: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-:~/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? Not sure, but I think the syscalls should be defined in syscall.h which is included by your program. I suppose that this file is part of libc, so there won't be your syscall definition in there. The easiest way would be to define the syscall by yourself. Remember that adding a syscall to the linux kernel is a bad idea. Regards, Matthias 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
RE: A confusion about invoking my syscall
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.commailto:jha...@bytemobile.com From: kernelnewbies-boun...@kernelnewbies.orgmailto:kernelnewbies-boun...@kernelnewbies.org [mailto:kernelnewbies-boun...@kernelnewbies.orgmailto: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-:~/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. Jeff Haran ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
RE: A confusion about invoking my syscall
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-:~/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. Jeff Haran ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
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-:~/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? Jeff Haran ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies