A confusion about invoking my syscall
From: Matthias Brugger <hidden>
Date: 2012-06-19 09:54:54
On 06/19/2012 06:32 AM, ?? wrote:
2012/6/19 Jeff Haran <jharan at bytemobile.com <mailto:jharan@bytemobile.com>>
__ __
__ __
*From:*kernelnewbies-bounces at kernelnewbies.org
<mailto:kernelnewbies-bounces@kernelnewbies.org>
[mailto:kernelnewbies-bounces at kernelnewbies.org
<mailto:kernelnewbies-bounces@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?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 at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies