<br><br><div class="gmail_quote">On 5 July 2011 21:33, Greg Freemyer <span dir="ltr">&lt;<a href="mailto:greg.freemyer@gmail.com">greg.freemyer@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;">
<div class="im">On Tue, Jul 5, 2011 at 9:43 AM, Mandeep Sandhu<br>
&lt;<a href="mailto:mandeepsandhu.chd@gmail.com">mandeepsandhu.chd@gmail.com</a>&gt; wrote:<br>
</div><div class="im">&gt;&gt; Let me simplify the question.<br>
&gt;<br>
&gt; I&#39;ll attempt to answer your questions...for my own edification! :)<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; 1) What are the FIVE classic system calls for interfacing with a<br>
&gt;&gt; character device.  (ie. If it did not exist in 1970, don&#39;t list it).<br>
&gt;<br>
&gt; open/close/read/write/seek?...and the infamous ioctl.<br>
<br>
</div>You listed 6.  Historically character devices don&#39;t seek.  So drop<br>
that one to get to 5.<br>
<br>
(And yes, you can find char devices that implement seek, but ioctl is<br>
far more common.  And when I learned UNIX 30 years ago, it was just<br>
the basic 5 I&#39;m pretty sure that actually have matching driver code..)<br>
<br>
That is, drivers don&#39;t implement seek.  seek() just sets a offset<br>
variable tracked in the kernel.  The driver is not even woken up when<br>
the happens.<br>
<br>
That is if userspace did:<br>
<br>
open()<br>
seek(1)<br>
seek(2)<br>
seek(3)<br>
write()<br>
<br>
The driver would get invoked for open, and again for write.  When<br>
write is invoked, the offset field would have a 3 in it.  The driver<br>
has no way to even know seek(1) and seek(2) calls were made.<br>
<br>
So if you read a kernel book, you&#39;ll find seek() gets very little<br>
attention.  It&#39;s really just a glorified way to say offset=value;<br>
<div class="im"><br>
&gt;&gt; 2) Which of the 5 is still heavily used in the kernel but is<br>
&gt;&gt; discouraged for new drivers being accepted into the linux kernel?<br>
&gt;<br>
&gt; I&#39;m guessing this is ioctl&#39;s...because now the preferred way to<br>
&gt; communicate/give commands to a device is via sysfs?<br>
<br>
</div>Correct, ioctl is no longer preferred, but it is definitely still<br>
used.  And the ext4 team is still adding new ioctl commands despite it<br>
being discouraged.<br>
<br>
(I don&#39;t know why they are able to do that, but I know they do.)<br>
<div class="im"><br>
<br>
&gt;&gt; 3) Name at least 3 alternatives that have been routinely used for<br>
&gt;&gt; out-of-band communication in the Linux kernel since 2000.<br>
&gt;<br>
&gt; ioctl&#39;s, profs/sysfs, netlink sockets maybe?<br>
<br>
</div>Yes, except procfs and sysfs are 2 different solutions, so you named 4.<br>
<br>
As of 2011, both ioctl&#39;s and procfs are discouraged for new &quot;device driver&quot; use.<br>
<br>
ioctl&#39;s will likely be around forever just because there are so many<br>
legacy ioctl implementations that need to be supported.  Think of<br>
stty.  That is a hugely complex ioctl based tool that I seriously<br>
doubt ever gets rewritten with a new kernel interface.<br>
<br>
procfs on they other hand will hopefully lose all the non-process<br>
specific users, but keep the process specific ones.  That is, the<br>
current preference is /proc should only have info related to running<br>
processes, not all the other miscellaneous stuff.  I don’t think there<br>
is yet an effort to remove those other files, but hopefully there will<br>
be gone at some point.<br>
<br>
One thing to keep in mind is that anything that interfaces with<br>
userspace is part of the kernel ABI and becomes very hard to change /<br>
get rid of.<br>
<br>
That actually means that any patches / driver submissions that impact<br>
on the kernel / userspace interface get a extra hard look.<br>
<br>
It also means a perspective employer will want to make sure you really<br>
understand the userspace / kernel interface.  It is just too hard to<br>
throw out a implementation once accepted by LKML.  Even in a embedded<br>
world where the driver is not sent upstream you want the kernel ABI to<br>
be as stable as possible.  Otherwise you have to always be ensuring<br>
your kernel and userspace apps are compatible versions.<br>
<br>
&gt;<br>
&gt; Thanks,<br>
&gt; -mandeep<br>
&gt;<br>
<br>&gt;Hope that helps at least someone in a future interview<br></blockquote><div><br>This is good. One more addition from my side which is not necessarily the answer to Greg&#39;s question: Bottom Halves are discouraged now days in driver.<br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<font color="#888888">Greg<br>
</font><div><div></div><div class="h5"><br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</div></div></blockquote></div><br>