A confusion about invoking my syscall

Baoquan He baoquan.he at gmail.com
Tue Jun 19 04:11:28 EDT 2012


On Tue, Jun 19, 2012 at 12:32 PM, 王哲 <wangzhe5004 at gmail.com> wrote:

>
>
> 2012/6/19 Jeff Haran <jharan at bytemobile.com>
>
>>  ** **
>>
>> ** **
>>
>> *From:* kernelnewbies-bounces at kernelnewbies.org [mailto:
>> kernelnewbies-bounces at 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?
>>
>>
>>
> you can read LKD3 written by Robert Love which describes the process
clearly.

>
>
>> Jeff Haran
>>   ****
>>
>
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120619/b2b73ea6/attachment-0001.html 


More information about the Kernelnewbies mailing list