<div dir="ltr">Hi Iker Pedrosa,<div><br></div><div>Please look at how to write the Kconfig files. We need to write a new Kconfig file for our own implementation.</div><div><br></div><div>Regards,</div><div>Srinivas G.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jul 23, 2013 at 3:15 PM, Iker Pedrosa <span dir="ltr">&lt;<a href="mailto:ikerpedrosam@gmail.com" target="_blank">ikerpedrosam@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Srinivas Ganji,<br>
<br>
I&#39;ve already done it. It wasn&#39;t very difficult as I have already worked with makefiles. Have you got any other suggestion of an exercise I can do?<br>
<br>
Thanks you very much again<br>
<br>
On Tue, 23 Jul 2013 11:11:16 +0530<br>
<div class="HOEnZb"><div class="h5">Srinivas Ganji &lt;<a href="mailto:srinivasganji.kernel@gmail.com">srinivasganji.kernel@gmail.com</a>&gt; wrote:<br>
<br>
&gt; Hi Iker Pedrosa,<br>
&gt;<br>
&gt; Have you completed with your own directory implementation? If you see any<br>
&gt; issues, please let me know.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Srinivas.<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Jul 20, 2013 at 4:13 PM, Iker Pedrosa &lt;<a href="mailto:ikerpedrosam@gmail.com">ikerpedrosam@gmail.com</a>&gt;wrote:<br>
&gt;<br>
&gt; &gt; Thank you very much to everybody. I&#39;ve tried Sudip Mukherjee&#39;s approach<br>
&gt; &gt; and it has worked (the table is in arch/x86/syscalls/syscall_32.tbl). Now,<br>
&gt; &gt; I&#39;m going to try to create my own directory in kernel source which contains<br>
&gt; &gt; my system call implementation files as Srinivas Ganji has proposed.<br>
&gt; &gt;<br>
&gt; &gt; On Fri, 19 Jul 2013 12:15:44 +0530<br>
&gt; &gt; Srinivas Ganji &lt;<a href="mailto:srinivasganji.kernel@gmail.com">srinivasganji.kernel@gmail.com</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; &gt; Hi Iker Pedrosa,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; In old versions of Linux kernels like 2.6.xx, the approach was different<br>
&gt; &gt; &gt; from Linux version 3.3 on wards.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; There are two different approaches to implement own system call. Each<br>
&gt; &gt; &gt; approach involves several steps. The difference between two approaches<br>
&gt; &gt; is,<br>
&gt; &gt; &gt; in one approach, we implement our system call in already existing file of<br>
&gt; &gt; &gt; kernel sources. In another approach, we created our own directory in<br>
&gt; &gt; kernel<br>
&gt; &gt; &gt; source which contains our system call implementation files. Ans in this<br>
&gt; &gt; &gt; second approach, we need to modify the Kernel Makefiles and Configuration<br>
&gt; &gt; &gt; files to include our newly created directory and its contents. First let<br>
&gt; &gt; us<br>
&gt; &gt; &gt; implement using the first approach.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The following approach was successfully tested in Linux kernel 3.5.7<br>
&gt; &gt; &gt; version sources for x86 32-bit architecture.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Here are the steps to create our own system call in the existing kernel<br>
&gt; &gt; &gt; sources. The paths given below are relative paths from /usr/src/linux.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 1. Generally, add the function (system call) definition in kernel/sys.c<br>
&gt; &gt; &gt; file.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; /* this is the implementation of our system call */<br>
&gt; &gt; &gt; asmlinkage long sys_helloworld(void) {<br>
&gt; &gt; &gt;        printk(KERN_EMERG &quot;Hello, world!\n&quot;);<br>
&gt; &gt; &gt; return 0;<br>
&gt; &gt; &gt; }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 2. Add the function prototype in the header file include/linux/syscalls.h<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; asmlinkage long sys_helloworld(void);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 3. Create an entry in system call table in the<br>
&gt; &gt; &gt; file arch/x86/syscalls/syscall_32.tbl<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 350     i386    helloworld             sys_helloworld<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Note: In my case already table had 349 offsets, so I added it as 350.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 4. If we want to create our own kernel images, then change the<br>
&gt; &gt; EXTRAVERSION<br>
&gt; &gt; &gt; in the main Makefile available at /usr/src/linux<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; EXTRAVERSION = .ownsyscall<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 5. Then, build the modules from the main directory with the following.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; make menuconfig  --- Just save and exit.<br>
&gt; &gt; &gt; make modules<br>
&gt; &gt; &gt; make modules_install<br>
&gt; &gt; &gt; make install<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 6. Now, reboot with our own image.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 7. Write a simple C application for calling the our own system call.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; #include &lt;stdio.h&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; /* sys_helloworld 350 */<br>
&gt; &gt; &gt; int main ()<br>
&gt; &gt; &gt; {<br>
&gt; &gt; &gt; syscall(350); /* 350 is our system calls offset number */<br>
&gt; &gt; &gt; return 0;<br>
&gt; &gt; &gt; }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I hope, you understand it clearly and it helps you. Based on this, you<br>
&gt; &gt; can<br>
&gt; &gt; &gt; practice the second approach. It needs of creating our own directory and<br>
&gt; &gt; &gt; files (C, Makefile, Kconfig) and modifications required in architecture<br>
&gt; &gt; &gt; specific Kconfig.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Regards,<br>
&gt; &gt; &gt; Srinivas.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On Thu, Jul 18, 2013 at 2:34 PM, Iker Pedrosa &lt;<a href="mailto:ikerpedrosam@gmail.com">ikerpedrosam@gmail.com</a><br>
&gt; &gt; &gt;wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi Guys,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I am a newbie to linux kernel and I am trying to do some of the<br>
&gt; &gt; &gt; &gt; exercises/examples of the Linux Kernel Development book by Robert<br>
&gt; &gt; Love. For<br>
&gt; &gt; &gt; &gt; the moment I&#39;m trying to create a system call (Chapter 5) but I am<br>
&gt; &gt; unable<br>
&gt; &gt; &gt; &gt; to do the first step which states the following:<br>
&gt; &gt; &gt; &gt; &quot;Add an entry to the end of the system call table.This needs to be done<br>
&gt; &gt; &gt; &gt; for each architecture that supports the system call (which, for most<br>
&gt; &gt; calls,<br>
&gt; &gt; &gt; &gt; is all the architectures).The position of the syscall in the table,<br>
&gt; &gt; &gt; &gt; starting at zero, is its system call number. For example, the tenth<br>
&gt; &gt; entry<br>
&gt; &gt; &gt; &gt; in the list is assigned syscall number nine.&quot;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; My problem is that I am unable to find the file that holds the table.<br>
&gt; &gt; In<br>
&gt; &gt; &gt; &gt; the book the file that needs to be changed is the entry.S but it no<br>
&gt; &gt; longers<br>
&gt; &gt; &gt; &gt; exists in v3.9. In an example that I have found on the internet, which<br>
&gt; &gt; is<br>
&gt; &gt; &gt; &gt; done using v3.0, the file to change is syscall_table_32.S. But I&#39;ve<br>
&gt; &gt; got the<br>
&gt; &gt; &gt; &gt; same problem, it doesn&#39;t exist. So anybody can help me to find the<br>
&gt; &gt; table? I<br>
&gt; &gt; &gt; &gt; know that I should be using v2.6 of the kernel but I don&#39;t know if that<br>
&gt; &gt; &gt; &gt; version will work with the distribution that I&#39;m using.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The question is also in stackoverflow so if someone wants to answer<br>
&gt; &gt; there<br>
&gt; &gt; &gt; &gt; I won&#39;t have any problem. The link to the page is the following:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; <a href="http://stackoverflow.com/questions/17652555/where-is-the-system-call-table-in-linux-kernel-v3-9" target="_blank">http://stackoverflow.com/questions/17652555/where-is-the-system-call-table-in-linux-kernel-v3-9</a><br>

&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt; Iker Pedrosa &lt;<a href="mailto:ikerpedrosam@gmail.com">ikerpedrosam@gmail.com</a>&gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; Kernelnewbies mailing list<br>
&gt; &gt; &gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt; &gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Iker Pedrosa &lt;<a href="mailto:ikerpedrosam@gmail.com">ikerpedrosam@gmail.com</a>&gt;<br>
&gt; &gt;<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Iker Pedrosa &lt;<a href="mailto:ikerpedrosam@gmail.com">ikerpedrosam@gmail.com</a>&gt;<br>
</font></span></blockquote></div><br></div>