<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:SimSun;
        mso-fareast-language:ZH-CN;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        mso-fareast-language:ZH-CN;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";
        mso-fareast-language:ZH-CN;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
</span><span lang="ZH-CN" style="font-size:10.0pt">王瘢雹哲</span><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> [mailto:wangzhe5004@gmail.com]
<br>
<b>Sent:</b> Wednesday, June 20, 2012 1:16 AM<br>
<b>To:</b> Jeff Haran<br>
<b>Cc:</b> kernelnewbies<br>
<b>Subject:</b> Re: A confusion about invoking my syscall<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">2012/6/20 Jeff Haran <<a href="mailto:jharan@bytemobile.com" target="_blank">jharan@bytemobile.com</a>><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
</span><span lang="JA" style="font-size:10.0pt;mso-fareast-language:JA">王瘢雹哲</span><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> [mailto:<a href="mailto:wangzhe5004@gmail.com" target="_blank">wangzhe5004@gmail.com</a>]
<br>
<b>Sent:</b> Monday, June 18, 2012 9:32 PM<br>
<b>To:</b> Jeff Haran<br>
<b>Cc:</b> kernelnewbies<br>
<b>Subject:</b> Re: A confusion about invoking my syscall</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"> <o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">2012/6/19 Jeff Haran <<a href="mailto:jharan@bytemobile.com" target="_blank">jharan@bytemobile.com</a>><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:kernelnewbies-bounces@kernelnewbies.org" target="_blank">kernelnewbies-bounces@kernelnewbies.org</a> [mailto:<a href="mailto:kernelnewbies-bounces@kernelnewbies.org" target="_blank">kernelnewbies-bounces@kernelnewbies.org</a>]
<b>On Behalf Of </b>??<br>
<b>Sent:</b> Monday, June 18, 2012 6:40 PM<br>
<b>To:</b> kernelnewbies<br>
<b>Subject:</b> A confusion about invoking my syscall</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt">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 <span lang="ZH-CN">‘</span>main<span lang="ZH-CN">’</span>:<br>
test1.c:13:14: error: <span lang="ZH-CN">‘</span>SYS_mysyscall<span lang="ZH-CN">’</span> 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!<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">Because it appears you never defined the symbol SYS_mysyscall.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> I think so,but where shoud i defne the symbol SYS_mysyscall ?</span><span style="color:#888888"> </span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D"> and where is the symbol </span><span style="color:#888888">SYS_getpid defined? </span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:#1F497D">On my system /usr/include/bits/syscall.h, which is being included in your program because it includes syscall.h.</span><o:p></o:p></p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> 83 #define SYS_getpid __NR_getpid <span lang="ZH-CN">
,</span>so SYS_getpid is replaced by __NR_getpid. and __NR_getpid was defined in the kernel(arch/x86/include/asm/unistd_32.h). and my syscall was also defined there.#define SYS_mysyscall __NR_mysyscall, i don't kown why it doesn't works.<br>
<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">My sources contain no reference to SYS_mysyscall nor __NR_mysyscall, so I assume you’ve added them to the Linux include files that you built your module from.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">User space programs like your main() program above generally aren’t going to include Linux source tree include files. When you include <syscall.h> from a user
space program in a typical development environment, the compiler is by default going to look for syscall.h in /usr/include, not in the Linux source tree where presumably you’ve made your modifications. Of course you can always tell the compiler to look there
using the –I command line option to gcc, if you want to. The usual practice however is to keep kernel code and user code include files completely separate. That means some duplication of effort, like having to define SYS_mysyscall in two different places,
but that’s the usual practice because most people aren’t building kernels and thus haven’t installed the kernel source include files.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Jeff Haran<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</div>
</div>
</div>
<font face="monospace"></font></body>
</html>