Re: A confusion about invoking my syscall

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/19/2012 06:32 AM, 王哲 wrote:
>
>
> 2012/6/19 Jeff Haran <jharan@xxxxxxxxxxxxxx <mailto:jharan@xxxxxxxxxxxxxx>>
>
>     __ __
>
>     __ __
>
>     *From:*kernelnewbies-bounces@xxxxxxxxxxxxxxxxx
>     <mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx>
>     [mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx
>     <mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx>] *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?

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@xxxxxxxxxxxxxxxxx
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux