Thread (8 messages) 8 messages, 4 authors, 2012-06-20

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help