Hello everyone:<br><br> I append a simple syscall in kernel. and the function is as follows:<br><br> asmlinkage long sys_mysyscall(long data)<br> {<br> printk("This is my syscall!\n");<br> return data;<br>
}<br><br>and i test it sucessfully in user space . and the test program:<br><br> #include <linux/unistd.h> <br>
#include <syscall.h><br> #include <sys/types.h><br> #include <stdio.h><br> <br> <br> <br> int main(void)<br> {<br> long n = 0,m = 0,pid1,pid2;<br> n = syscall(345,190);// #define __NR_mysyscall 345<br>
printf("n = %ld\n",n);<br> pid1 = syscall(SYS_getpid); //getpid<br> printf("pid = %ld\n",pid1);<br> pid2 = syscall(20); //getpid<br> printf("pid = %ld\n",pid2);<br> return 0;<br>
}<br>and the result:<br>n = 190<br>pid = 4097<br>pid = 4097<br><br>but if the test program is:<br>#include <linux/unistd.h><br>#include <syscall.h><br>#include <sys/types.h><br>#include <stdio.h><br>
<br><br><br>int main(void)<br>{<br> long n = 0,m = 0,pid1,pid2;<br> n = syscall(345,190);// #define __NR_mysyscall 345<br> printf("n = %ld\n",n);<br> m = syscall(SYS_mysyscall,190);<br> printf("m = %ld\n",m);<br>
pid1 = syscall(SYS_getpid); //getpid<br> printf("pid = %ld\n",pid1);<br> pid2 = syscall(20); //getpid<br> printf("pid = %ld\n",pid2);<br> return 0;<br>}<br>and the result:<br>wanny@wanny-C-Notebook-XXXX:~/syscall/src$ gcc test1.c <br>
test1.c: In function ‘main’:<br>test1.c:13:14: error: ‘SYS_mysyscall’ undeclared (first use in this function)<br>test1.c:13:14: note: each undeclared identifier is reported only once for each function it appears in<br><br>
<br>why i can't invoke my syscall with "SYS_mysyscall"?<br><br>Thanks in advance!<br><br><br> <br>