<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1046333380878530823</id><updated>2011-11-27T15:40:04.170-08:00</updated><category term='Adobe'/><category term='Coding'/><category term='jQuery'/><category term='Edge'/><category term='Adobe Flash'/><category term='CSS'/><category term='Technology'/><category term='Portal'/><category term='C'/><category term='Ports'/><category term='UI'/><category term='Kernel'/><category term='Dreamweaver'/><category term='Programming'/><category term='Web'/><category term='Booting'/><category term='Intranet'/><category term='Web Development'/><category term='Flash'/><category term='Designing'/><category term='CSS3'/><category term='Linux'/><category term='Operating Systems'/><category term='Adobe Labs'/><category term='HTML'/><category term='Lenovo'/><category term='Latest Technology'/><category term='JavaScript'/><category term='Device Drivers'/><category term='HTML5'/><title type='text'>My World - iBlog by JC</title><subtitle type='html'>a profound blog about the technologies I am in love with~~</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-3888198568939620127</id><published>2011-09-24T07:57:00.000-07:00</published><updated>2011-09-24T08:05:34.734-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='Designing'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Labs'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Dreamweaver'/><category scheme='http://www.blogger.com/atom/ns#' term='Intranet'/><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Latest Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='Edge'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>The Coder Diaries: Death Knell to Flash!</title><content type='html'>&lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;color:black;background:white; mso-fareast-language:EN-IN"&gt;Working closely with web development technologies enables one to think about more intuitive ways to meet client expectations &amp;amp; delight the end users. UI designs, animations and usability, guide the dynamics to any successful portals project.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;color:black;background:white; mso-fareast-language:EN-IN"&gt;Seven years ago, my first JavaScript code which modified the elements on a page at runtime fascinated me beyond comparison &lt;i&gt;(it still does!)&lt;/i&gt;. Sleepless nights, boundless coding &amp;amp; creativity led to a bunch of innovative designs; yearning deepened and the journey progressed from a juvenile coder to an intermediate with questionable reasoning. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;color:black;background:white; mso-fareast-language:EN-IN"&gt;Soon enough, jQuery came into the picture and everything changed – yet again. Stronger UIs, a better control over page components and the gift of ‘Code Less, Do More...’ gripped the athirst-for-knowledge in me. And before I knew it, I was left with more expectations than just being limited to a mere wrapper around the erstwhile JavaScript.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;color:black;background:white; mso-fareast-language:EN-IN"&gt;A couple of weeks ago, when while working on a project left me with utmost desire to use the forbidden flash components to achieve the desired UI, a vague yet intriguing idea of jQuery-ing the flash components struck my mind. While I was mostly preoccupied with timelines &amp;amp; deliverables, Adobe was preparing the beta release of their next marvel: &lt;a href="http://labs.adobe.com/" target="_blank"&gt;&lt;span style="color:#3333CC"&gt;Edge&lt;/span&gt;&lt;/a&gt;... most aptly termed by the wizards of web development as the ‘Death Knell to Flash!’ With over 50,000 downloads in First 24 hours, the latest from Adobe Labs seems more than promising.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;color:black;background:white; mso-fareast-language:EN-IN"&gt;Edge aims to be a "web motion and interaction design tool that allows web designers to bring animation, similar to that created in Flash Professional, to websites using standards likes HTML5, JavaScript and CSS3." Currently being limited to basic animation and simple page layout, users of timeline-based applications will immediately apprehend Edge's simple UI and timeline for HTML5 animations.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal"&gt;&lt;span style="font-size:12.0pt;font-family:&amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;color:black;background:white; mso-fareast-language:EN-IN"&gt;Here’s hoping that Edge is a success for Adobe and that it emerges as a strong tool for designers and developers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-3888198568939620127?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/3888198568939620127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=3888198568939620127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/3888198568939620127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/3888198568939620127'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2011/09/coder-diaries-death-knell-to-flash.html' title='The Coder Diaries: Death Knell to Flash!'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-1730611034510256915</id><published>2007-12-14T06:53:00.000-08:00</published><updated>2007-12-14T07:27:55.393-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ports'/><title type='text'>Using I/O ports in C programs</title><content type='html'>Routines for accessing I/O ports are in /usr/include/asm/io.h (or linux/include/asm-i386/io.h in the kernel source distribution). The routines there are inline macros, so it is enough to #include ; you do not need any additional libraries.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Permissions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before you access any ports, you must give your program permission to do so by calling the ioperm() function (declared in unistd.h) before any I/O port accesses. The syntax is ioperm(from, num, turn_on), where from is the first port number to give access to, and num the number of consecutive ports to give access to. The last argument is a Boolean value specifying whether to give access to the program to the ports (true (1)) or to remove access (false (0)). ioperm() can only give access to ports 0x000 through 0x3ff; for higher ports, you need to use iopl() (which gives you access to all ports at once).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Accessing the ports&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To input a byte (8 bits) from a port, call inb(port), it returns the byte it got. To output a byte, call outb(value, port) (please note the order of the parameters).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;wait for more ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.copyscape.com/"&gt;&lt;img src="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" alt="Page copy protected against web site content infringement by Copyscape" title="Do not copy content from the page. Plagiarism will be detected by Copyscape." border="0" height="16" width="234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-1730611034510256915?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/1730611034510256915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=1730611034510256915' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/1730611034510256915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/1730611034510256915'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/12/using-io-ports-in-c-programs.html' title='Using I/O ports in C programs'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-3543150369825278663</id><published>2007-12-09T06:50:00.000-08:00</published><updated>2007-12-09T07:10:28.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Device Drivers'/><title type='text'>Character Device Drivers</title><content type='html'>&lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;span style=""&gt;Device drivers are mainly categorized in four different categories namely &lt;/span&gt;&lt;span style=""&gt;&lt;span style="font-size:100%;"&gt;character drivers, block drivers, terminal drivers and streams. Character drivers transmit information from the user to the device (or vice versa) byte per byte. The following figure will make it easy to understand this class of drivers:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_KmXO-OyN_yA/R1wDAxBw34I/AAAAAAAAABE/SMHssnyJ9bQ/s1600-h/devi.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_KmXO-OyN_yA/R1wDAxBw34I/AAAAAAAAABE/SMHssnyJ9bQ/s320/devi.JPG" alt="" id="BLOGGER_PHOTO_ID_5141988186245881730" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height: 150%;"&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;The &lt;/b&gt;&lt;b style=""&gt;&lt;span style=""&gt;file_operations&lt;/span&gt; Structure&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;The &lt;/span&gt;&lt;span class="type"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;file_operations&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; structure is defined in &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;linux/fs.h&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt;, and holds pointers to functions defined by the driver that perform various operations on the device. Each field of the structure corresponds to the address of some function defined by the driver to handle a requested operation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;" &gt;The &lt;/span&gt;&lt;/b&gt;&lt;span class="type"&gt;&lt;b style=""&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;" &gt;file&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b style=""&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;" &gt; structure&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;Each device is represented in the kernel by a &lt;/span&gt;&lt;span class="type"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;file&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; structure, which is defined in &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;linux/fs.h&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt;. It's not the same thing as a &lt;/span&gt;&lt;span class="type"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;FILE&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt;, which is defined by glibc and would never appear in a kernel space function. It represents an abstract open `file' which is represented by a structure named &lt;/span&gt;&lt;span class="type"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;inode&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;" &gt;Registering A Device&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;Adding a driver to your system means registering it with the kernel. This is synonymous with assigning it a major number during the module's initialization. You do this by using the &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;register_chrdev&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; function, defined by &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;linux/fs.h&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div style="border: 1pt solid silver; padding: 9pt 0.25in; background: white none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;  &lt;p class="WW-HTMLPreformatted" style="background: white none repeat scroll 0% 50%; line-height: 150%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;int register_chrdev(unsigned int major, const char *name,struct file_operations *fops);&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:12;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;where &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;unsigned int major&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; is the major number you want to request, &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;const char *name&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; is the name of the device as it'll appear in &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;/proc/devices&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; and &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;struct file_operations *fops&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; is a pointer to the &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;file_operations&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt; table for your driver. A negative return value means the registration failed. &lt;span style=""&gt; &lt;/span&gt;If &lt;span style=""&gt; &lt;/span&gt;you pass a major number of 0 to &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;register_chrdev&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;" &gt;, the return value will be the dynamically allocated major number. The downside is that you can't make a device file in advance, since you don't know what the major number will be. &lt;a name="AEN661"&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;" &gt;Unregistering A Device&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;We can't allow the kernel module to be &lt;span class="application"&gt;rmmod&lt;/span&gt;'ed whenever root feels like it. If the device file is opened by a process and then we remove the kernel module, using the file would cause a call to the memory location where the appropriate function (read/write) used to be. If we're lucky, no other code was loaded there, and we'll get an ugly error message. If we're unlucky, another kernel module was loaded into the same location, which means a jump into the middle of another function within the kernel. The results of this would be impossible to predict, but they can't be very positive.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3 style="line-height: 150%;"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:12;"  &gt;Accessing Device Files&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=";font-family:&amp;quot;;" &gt;Device files are supposed to represent physical devices. Most physical devices are used for output as well as input, so there has to be some mechanism for device drivers in the kernel to get the output to send to the device from processes. This is done by opening the device file for output and writing to it, just like writing to a file. &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="WW-NormalWeb" style="line-height: 150%;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span class="WW-HTMLTypewriter"&gt;&lt;span style="line-height: 150%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.copyscape.com/"&gt;&lt;img src="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" alt="Page copy protected against web site content infringement by Copyscape" title="Do not copy content from the page. Plagiarism will be detected by Copyscape." border="0" height="16" width="234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-3543150369825278663?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/3543150369825278663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=3543150369825278663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/3543150369825278663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/3543150369825278663'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/12/character-device-drivers.html' title='Character Device Drivers'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_KmXO-OyN_yA/R1wDAxBw34I/AAAAAAAAABE/SMHssnyJ9bQ/s72-c/devi.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-5948153235275515286</id><published>2007-11-23T07:59:00.000-08:00</published><updated>2007-11-23T12:52:20.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='Device Drivers'/><title type='text'>Compiling a Device Driver Module</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;In many cases drivers compiled for similar kernel versions will work. Pre-compiled modules in the form of RPMS for popular distributions are frequently available. If a pre-compiled module is not available; you'll have to compile one from the driver source code, or the source code RPM (SRPM).&lt;br /&gt; * Verify that the source code for your current kernel version is installed.&lt;br /&gt; * If you don't have a /usr/include/linux/version.h file, do cd /usr/src/linux; make include/linux/version.h&lt;br /&gt; * Copy the driver source code to a source directory&lt;br /&gt; * Compile the file using the compile-command at the bottom of the driver source file. If a compile-command is not there use the following compile command:&lt;br /&gt;&lt;br /&gt;gcc -DMODULE -D__KERNEL__ -O6 -c driver.c&lt;br /&gt;&lt;br /&gt;* As 'root', test the module by doing "insmod driver.o".&lt;br /&gt; * Install the driver module in the proper location for your distribution. This is usually /lib/modules/kernel-version/net/driver.o. The command to do this is&lt;br /&gt;install -m 644 driver.o /lib/modules/`uname -r`/net/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Testing the New Module&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As 'root', load the module using "insmod driver.o" and execute the appropriate 'route add -net ...' for your local network.&lt;br /&gt;If the networking works correctly, add the module to your system configuration. For Slackware and most other systems, add the insmod command to /etc/rc.d/rc.inet1 or /etc/rc.d/rc.local. RedHat users should add the insmod line to /etc/rc.d/rc.modules or copy driver.o to /lib/modules/`uname -r`/net/ and add the following line to /etc/conf.modules:&lt;br /&gt;&lt;br /&gt;alias eth0 driver&lt;br /&gt;&lt;br /&gt;Consider the following command "/sbin/insmod driver.o full_duplex=1,0,1". This command sets the full_duplex flag for the first and third cards of this type.&lt;br /&gt;To set module parameters when the module is loaded automatically, add the following line to /etc/conf.modules&lt;br /&gt;&lt;br /&gt;alias eth0 driver&lt;br /&gt;&lt;br /&gt;options driver full_duplex=1,0,1 debug=0&lt;br /&gt;&lt;br /&gt;....to be contd. ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.copyscape.com/"&gt;&lt;img src="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" alt="Page copy protected against web site content infringement by Copyscape" title="Do not copy content from the page. Plagiarism will be detected by Copyscape." border="0" height="16" width="234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-5948153235275515286?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/5948153235275515286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=5948153235275515286' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/5948153235275515286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/5948153235275515286'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/11/compiling-device-driver-module.html' title='Compiling a Device Driver Module'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-6425611974872245140</id><published>2007-11-16T03:07:00.000-08:00</published><updated>2007-11-16T11:33:18.725-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Lenovo'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>OpenSuSE 10.3 REVIEW</title><content type='html'>I switch operating systems like any other guy switches his underpants. If today I write/review FreeBSD, tomorrow I might write about Ubuntu. I am an OS lover, so it was very important for me to find an operating system which I can love and develop at the same time! Thanks to Novell's brilliant effort: OpenSuSE (pronounced as Open SooSaa).&lt;br /&gt;My memory with Novell goes back to the time when I first installed SuSE 9(Enterprise Desktop) on my Desktop with minimal requirements. Now I work on my Lenovo 3000 N100 laptop. I have tried several flavors of linux on my notebook but none satisfied my needs so far. I began with Red Hat 9. It was sort of old so I shifted to Fedora Project. I installed Fedora core 4 but again my sound card and the network card was creating dubious issues. After fedora I switched to Mandrake. Mandrake 10.1 was enticing with a nice KDE and GNOME env, but again, it didn't recognize my Wireless card Intel Pro 802.11 a/b/g. I switched to RHEL4 (Red Hat Enterprise Linux) in a hope that this enterprise version be something different and would satisfy my needs, rather it added to my disappointment...This time my touch pad (Synaptics) was creating problems. [ As soon as I place my finger on the touch pad, it sort of traveled the whole screen randomly even when my finger was static on the touchpad]. I completely lost hopes after this.&lt;br /&gt; A week ago one of my Linux enthusiast friend gave me a downloaded copy of OpenSuSE 10.3. Voila! it worked. Yes, finally I found a complete system for my machine. I installed the same copy on my desktop (PIII 1.13 GHz with 384 M RAM). Bravo!! no issues with memory management. With KDE 4 and Yast2, this OS can handle anything you want. Hardware probing is not a problem either, no issues with Wireless card, Network card or the touchpad. The website of OpenSuSE offers any user to search for the software repositories and '1-click install' feature. Extensive online and offline documentation is also available for those who are new to Linux or shifting from Windows to Linux. Apart from this, an integrated Virtualization software to try other Operating systems is also included in OpenSuSE 10.3. I would recommend OpenSuSE to OS enthusiasts right away. Seriously, I was quite troubled with linux installations on my laptop as my projects require kernel dev. Now with this OS, all's well and running ;)&lt;br /&gt;&lt;br /&gt;Wait till next post when I write more about this legendary OS I am in love with!&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-6425611974872245140?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/6425611974872245140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=6425611974872245140' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/6425611974872245140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/6425611974872245140'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/11/opensuse-103-review.html' title='OpenSuSE 10.3 REVIEW'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-5065585225244432014</id><published>2007-10-25T16:42:00.000-07:00</published><updated>2007-11-16T04:02:02.001-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><title type='text'>Task Scheduling in Operating System Kernel</title><content type='html'>Its quite important for all of us to clean up our systems just like we clean our houses in a 'house-keeping' job. A process carries out any task which is placed in the crontab file . The same task can be carried out by a kernel module in two different ways: &lt;br /&gt;1) In first way, the process is put in the crontab file which wakes up the module by a system call, for example by accessing a file or writing to a file. I personally don't refer this mode, however -- we run a new process off of crontab, read a new executable to memory, and all this just to wake up a kernel module which is in memory anyway.&lt;br /&gt;&lt;br /&gt;2) The other way would be to create a function that which can be called once for every interrupt. The way we can do this is by creating a task initially held in a struct tq_struct, which holds a pointer to the function. Then, we can use queue_task to put that task on a 'task list' called tq_timer, which is the list of tasks that are to be executed on the next interrupt. Because we want the function to keep on being executed, we need to put it back on tq_timer whenever it is called, for the next timer interrupt.&lt;br /&gt;&lt;br /&gt;Another thing to be kept in mind is this: When we remove a module by the command rmmod, its reference count is checked first. If it is zero, module_cleanup is called. Next, the module is removed from memory with all its functions. Nobody checks to see if the timer's task list happens to contain a pointer to one of those functions, which will no longer be available. Ages later (from the computer's perspective, from a human perspective it's nothing, less than a hundredth of a second), the kernel has a timer interrupt and tries to call the function on the task list. Unfortunately, the function is no longer there. In most cases, the memory page where it sat is unused, and you get an ugly error message. But if some other code is now sitting at the same memory location, things could get very ugly. Unfortunately, we don't have an easy way to unregister a task from a task list.&lt;br /&gt;&lt;br /&gt;Since cleanup_module can't return with an error code (it's a void function), the solution is to not let it return at all. Instead, it calls sleep_on or module_sleep_on to put the rmmod process to sleep. Before that, it informs the function called on the timer interrupt to stop attaching itself by setting a global variable. Then, on the next timer interrupt, the rmmod process will be woken up, when our function is no longer in the queue and it's safe to remove the module. ;)&lt;br /&gt;thanks. wait for more&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;TABLE&gt;&lt;TR&gt;&lt;TD&gt;&lt;FORM METHOD="GET" ACTION="http://www.digitalpoint.com/tools/adsense-sandbox/"&gt;&lt;B&gt;&lt;FONT SIZE=-1&gt;View AdSense Ads For:&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;&lt;INPUT NAME="url" TYPE="text" SIZE=30&gt;&lt;BR&gt;&lt;FONT SIZE=-2&gt;Brought to you by &lt;A HREF="http://www.digitalpoint.com/"&gt;Digital Point Solutions&lt;/A&gt;&lt;/FONT&gt;&lt;/FORM&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-5065585225244432014?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/5065585225244432014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=5065585225244432014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/5065585225244432014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/5065585225244432014'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/task-scheduling-in-operating-system.html' title='Task Scheduling in Operating System Kernel'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-1854666937228813872</id><published>2007-10-21T23:07:00.001-07:00</published><updated>2007-11-16T04:02:41.285-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><title type='text'>OS concepts: Thread vs. Task</title><content type='html'>I am sure many of us have confused these two terms together. I remember preparing my assignment once in OS, found the copy in cupboard which is like 3 semesters old :D....would like to share it with you all.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A thread is a point of control flow in a task. A task&lt;br /&gt;exists to provide resources for the threads it contains. This split is made to provide&lt;br /&gt;for parallelism and resource sharing.&lt;br /&gt;A thread&lt;br /&gt;&lt;ul&gt;&lt;li&gt;is a point of control flow in a task.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;has access to all of the elements of the containing task.&lt;/li&gt;&lt;li&gt; executes (potentially) in parallel with other threads, even threads within the same task.&lt;/li&gt;&lt;li&gt;has minimal state information for low overhead.&lt;/li&gt;&lt;/ul&gt;A task&lt;br /&gt;&lt;ul&gt;&lt;li&gt;is a collection of system resources. These resources, with the exception of the address space, are referenced by ports. These resources may be shared with other tasks if rights to the ports are so distributed. &lt;/li&gt;&lt;li&gt;provides a large, potentially sparse address space, referenced by virtual address.Portions of this space may be shared through inheritance or external memory management.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;contains some number of threads.&lt;/li&gt;&lt;/ul&gt;Note that a task has no life of its own—only threads execute instructions. &lt;span style="font-style: italic; font-weight: bold;"&gt;When it is &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;said that “task Y does X,” what is really meant is that “a thread contained within &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;task Y does X.”&lt;/span&gt; ;)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-1854666937228813872?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/1854666937228813872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=1854666937228813872' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/1854666937228813872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/1854666937228813872'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/os-concepts-thread-vs-task.html' title='OS concepts: Thread vs. Task'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-6434753183842037395</id><published>2007-10-19T05:43:00.000-07:00</published><updated>2007-11-16T04:03:31.865-08:00</updated><title type='text'>VoIP (Voice over internet protocol)</title><content type='html'>Day before yesterday, I was called up in our HoD's office. He asked me to present a paper for university level Tech. fest organised by Chandigarh Engg. College.&lt;br /&gt;I agreed as I couldn't talk myself out of that.  The topic list included several enticing topics but the one that fascinated me the most was VoIP.&lt;br /&gt;here's a glimpse of the abstract I prepared....&lt;br /&gt;&lt;p class="MsoNormal" style="text-align: center; text-indent: 0.5in;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;u&gt;VoIP&lt;span style=""&gt;  &lt;/span&gt;(Voice over Internet Protocol)&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; text-indent: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;                                                                                    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 3in; text-align: justify; text-indent: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;  &lt;/span&gt;Author: - Jasjeet Chawla&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; text-indent: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;                                            &lt;/span&gt;Student, I.E.T. BHADDAL&lt;span style=""&gt;                                                 &lt;/span&gt;&lt;span style=""&gt;                        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;ABSTRACT: &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; text-indent: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;Voice over Internet Protocol (VoIP) allows you to make telephone calls using an Internet connection instead of a regular telephone line. One of the most important things to point out is that VoIP is not limited to voice communication. In fact, a number of efforts have been made to change this popular marketing term to better reflect the fact that VoIP means voice, video, and data conferencing. VoIP is important because, there is an opportunity to bring about significant change in the way that people communicate. It allows the usage of a single high-speed Internet connection for all voice, video, and data communications, usually termed as convergence. &lt;span style="color:black;"&gt;Virtually every device in the world uses a standard called Real Time Protocol(RTP) for transmitting audio and video packets between communicating computers. Before audio or video media can flow between two computers, various protocols must be employed to find the remote device and to negotiate the means by which media will flow between the two devices. The protocols that are central to this process are commonly referred to as call-signaling protocols, the most popular of which are H.323 and Session Initiation Protocol (SIP) and they both rely on static provisioning. Fundamentally, H.323 and SIP allow users to do the same thing: to establish multimedia communication (audio, video, or other data communication), however, they differ significantly in their design.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-size:100%;color:black;"  &gt;&lt;span style=""&gt;          &lt;/span&gt;In this paper, I intend to present my case studies on two key VoIP enabled software applications viz. SKYPE and X-LITE: &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;Skype&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:13;"&gt;&lt;span style="font-size:100%;"&gt; is a "complete black box" -- that is, it is extremely hard for the lay user to identify what it is doing, or what it might be doing, or how appropriately it is doing it. Skype has been criticized over its use of a proprietary protocol, instead of an open standard like H.323, IAX, or SIP, since this makes it impossible for other providers to interact with the Skype network.&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="font-size:100%;"&gt; &lt;b style=""&gt;X-Lite&lt;/b&gt; provides endpoint VoIP solutions that use internet-based telephony servers within an enterprise LAN (Local Area Network) or VoIP service provider network.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-6434753183842037395?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/6434753183842037395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=6434753183842037395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/6434753183842037395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/6434753183842037395'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/voip-voice-over-internet-protocol.html' title='VoIP (Voice over internet protocol)'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-2582237144144794675</id><published>2007-10-16T00:52:00.000-07:00</published><updated>2007-11-16T04:03:58.642-08:00</updated><title type='text'>Now from here to Where?</title><content type='html'>Well, enough has been said and done about device drivers in linux! I'd love to add something of my own as this is my key field of interest. I have been working with device drivers and kernel modules since early 2k6(my 5th semester).&lt;br /&gt;I personally feel that kernel programming is the next step after you have strong concepts in C programming. 'We must believe in order to acheive.' Yeah that should be the driving phrase if you want to dedicated yourself to kernel programming and OpenSource developer community!&lt;br /&gt;I could have written a lot on Kernel Programming and starting off with device drivers. But due to scarcity of time I have to wind up quickly today on a note that I'll be back with more.&lt;br /&gt;Meanwhile, you all kernelHEADS can go through this article which provides with the basics of &lt;a href="http://www.linuxdevices.com/articles/AT5340618290.html"&gt;Writing Device Drivers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sorry for the small post. I'll surely be back with more.  Take care. Ciao!&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-2582237144144794675?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/2582237144144794675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=2582237144144794675' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/2582237144144794675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/2582237144144794675'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/now-from-here-to-where.html' title='Now from here to Where?'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-8259375830779997794</id><published>2007-10-14T03:50:00.000-07:00</published><updated>2007-11-16T04:04:35.348-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Booting'/><title type='text'>What exactly happens when u boot!</title><content type='html'>&lt;p&gt;In the case of &lt;span style="font-weight: bold;"&gt;Linux&lt;/span&gt;, the following steps are performed to boot the kernel:&lt;/p&gt; &lt;p&gt;&lt;span style="font-weight: bold;"&gt;1)&lt;/span&gt; The boot loader program (e.g. lilo or grub) starts by loading the vmlinuz from disk into memory, then starts the code executing.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 2)&lt;/span&gt; After the kernel image is decompressed, the actual kernel is started. This part of the code was produced from assembler source; it is totally machine specific. Technically at this point the kernel is running. This is the first process (0) and is called swapper. Swapper does some low level checks on the processor, memory and FPU availability, then places the system into protected mode. Paging is enabled.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 3)&lt;/span&gt; Interrupts are disabled (every one) though the interrupt table is set up for later use. The entire kernel is realigned in memory (post paging) and some of the basic memory management structures are created.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 4)&lt;/span&gt; At this point, a function called start_kernel is called. start_kernel is physically located in /usr/src/linux-2.4.18-27.7.x/init/main.c and is really the core kernel function - really the equivalent of the void main(void). main.c itself is virtually the root file for all other source and header files.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 5)&lt;/span&gt; start_kernel sets up the memory, interrupts and scheduling. In effect, the kernel has now has multi-tasking enabled. The console already has had several messages displayed to it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 6) &lt;/span&gt;The kernel command line options are parsed (those passed in by the boot loader) and all embedded device driver modules are initialized.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 7)&lt;/span&gt; Further memory initializations occur, socket/networking is started and further bug checks are performed.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 8)&lt;/span&gt; The final action performed by swapper is the first process creation with fork whereby the init program is launched. Swapper now enters an infinite idle loop.&lt;/p&gt; &lt;p&gt;It is interesting to note that as a linear program, the kernel has finished running! The timer interrupts are now set so that the scheduler can step in and pre-empt the running process. However, sections of the kernel will be periodically executed by other processes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is the boot sequence from a kernel point of view. For a more comprehensive Boot Sequence explanation... you can view my friend's blog &lt;a href="http://nitin-the-napster.blogspot.com/2007/10/magical-linux-boot-sequence.html"&gt;HERE.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://nitin-the-napster.blogspot.com/2007/10/magical-linux-boot-sequence.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-8259375830779997794?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/8259375830779997794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=8259375830779997794' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/8259375830779997794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/8259375830779997794'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/what-exactly-happens-when-u-boot.html' title='What exactly happens when u boot!'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-8539752878300245628</id><published>2007-10-12T19:18:00.000-07:00</published><updated>2007-11-16T04:05:02.925-08:00</updated><title type='text'>Today's assignment: Makefiles for Kernel Modules</title><content type='html'>&lt;p&gt;Lets get straight to the point why I created this blog for. I am not your teacher to take you through the basics of Kernel/C programming under linux. ;) and I consider that people reading my blog have a prior knowledge of programming in C. (&lt;span style="font-style: italic;"&gt;sorry if this is a jump from beginner's level to Novice...This post is for people who want to stop reading and start coding straightaway. Although I will touch on how things are done in the kernel in several places,  that is not my purpose. There are enough good sources which do a better job than  I could have done&lt;/span&gt;!)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   A kernel module is not an independent executable, but an object file which  will be linked into the kernel in runtime. As a result, they should be compiled  with the &lt;tt&gt;-c&lt;/tt&gt; flag. Also, all kernel modules have to be compiled with  certain symbols defined. &lt;a name="130"&gt; &lt;/a&gt;  &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;p&gt; &lt;/p&gt;&lt;li&gt;&lt;tt&gt;__KERNEL__&lt;/tt&gt; -- This tells the header files that this code will be  run in kernel mode, not as part of a user process. &lt;a name="133"&gt; &lt;/a&gt;   &lt;/li&gt;&lt;li&gt;&lt;tt&gt;MODULE&lt;/tt&gt; -- This tells the header files to give the appropriate  definitions for a kernel module. &lt;a name="135"&gt; &lt;/a&gt;   &lt;/li&gt;&lt;li&gt;&lt;tt&gt;LINUX&lt;/tt&gt; -- Technically speaking, this is not necessary. However, if  you ever want to write a serious kernel module which will compile on more than  one operating system, you'll be happy you did. This will allow you to do  conditional compilation on the parts which are OS dependent. &lt;a name="137"&gt; &lt;/a&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There are other symbols which have to be included, or not, depending on the  flags the kernel was compiled with. If you're not sure how the kernel was  compiled, look it up in &lt;tt&gt;/usr/include/linux/config.h&lt;/tt&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;__SMP__&lt;/tt&gt; -- Symmetrical MultiProcessing. This has to be defined if the  kernel was compiled to support symmetrical multiprocessing (even if it's running  just on one CPU). If you use Symmetrical MultiProcessing, there are other things  you need to do...lets say Interrupt handling. ;)&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;tt&gt;CONFIG_MODVERSIONS&lt;/tt&gt; -- If CONFIG_MODVERSIONS was enabled, you need  to have it defined when compiling the kernel module and and to include  &lt;tt&gt;/usr/include/linux/modversions.h&lt;/tt&gt;. This can also be done by the code  itself.&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt; &lt;a name="149"&gt; &lt;/a&gt; &lt;a name="150"&gt; &lt;/a&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;ex &lt;span style="font-size:78%;"&gt;&lt;b&gt;Makefile&lt;/b&gt;&lt;/span&gt; &lt;a name="156"&gt; &lt;/a&gt;&lt;a name="157"&gt; &lt;/a&gt;  &lt;/p&gt;&lt;pre&gt;&lt;br /&gt;# Makefile for a basic kernel module&lt;br /&gt;&lt;br /&gt;CC=gcc&lt;br /&gt;MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX&lt;br /&gt;&lt;br /&gt;hello.o: hello.c /usr/include/linux/version.h&lt;br /&gt;$(CC) $(MODCFLAGS) -c hello.c&lt;br /&gt;echo insmod hello.o to turn it on&lt;br /&gt;echo rmmod hello to turn if off&lt;br /&gt;echo&lt;br /&gt;echo X and kernel programming do not mix.&lt;br /&gt;echo Do the insmod and rmmod from outside X.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:100%;"&gt;&lt;span style=""&gt;So, now the only thing left is to su to root , and then insmod&lt;br /&gt;hello and rmmod hello to your heart's content.&lt;br /&gt;While you do it, notice your new kernel module in /proc/modules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:georgia;font-size:130%;"  &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:georgia;"&gt;oops...seems much for the day...lol...never mind ...&lt;br /&gt;i will be back with more! &lt;/span&gt;&lt;span style="font-family:georgia;"&gt;tc all. keep reading. Adios!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-8539752878300245628?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/8539752878300245628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=8539752878300245628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/8539752878300245628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/8539752878300245628'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/todays-assignment-makefiles-for-kernel.html' title='Today&apos;s assignment: Makefiles for Kernel Modules'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-4296514575737237414</id><published>2007-10-11T05:21:00.000-07:00</published><updated>2007-11-16T04:05:29.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Understanding the Kernel: basics!</title><content type='html'>Several online definitions can be found on proprietary websites viz. Wiki, about....etc. The one that appeals to me the most defines the Kernel of an OS as the part of the operating system that loads first, and in the main memory. Because it stays in memory, it is important for the kernel to be as small as possible while still providing all the essential services required by other parts of the operating system and applications.&lt;br /&gt;&lt;br /&gt;To me, a simple definition would do : &lt;span style="font-style: italic;"&gt;Kernel is the core or the crux of the operating system! It is the only link between the hardware and the software&lt;/span&gt;. Seems simple to understand, no?? Well....look at this diagram of the Linux kernel, and you'll be able to adjudicate for yourself. ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://computerkb.co.uk/tmp/packages_all.png"&gt;Diagram of the linux kernel.&lt;/a&gt; (click to view and enlarge)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KmXO-OyN_yA/Rw4bOpYl1hI/AAAAAAAAAAg/u_259DnK94I/s1600-h/Kernel.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_KmXO-OyN_yA/Rw4bOpYl1hI/AAAAAAAAAAg/u_259DnK94I/s320/Kernel.png" alt="" id="BLOGGER_PHOTO_ID_5120059764807947794" border="0" /&gt;&lt;/a&gt;The kernel's primary purpose is to manage the computer's resources and allow other programs to run and use these resources, these resources include the &lt;span style="font-weight: bold;"&gt;CPU&lt;/span&gt;, the main &lt;span style="font-weight: bold;"&gt;Memory (RAM)&lt;/span&gt;, and the &lt;span style="font-weight: bold;"&gt;I/O devices&lt;/span&gt;. &lt;br /&gt;Typically, the kernel is responsible for memory management, process &amp;amp; task management and disk management. These concepts are the base for a Kernel development (KernelDev) which I shan't explain here.&lt;br /&gt;Furthermore, the aforesaid tasks are done differently by different kernels, depending on their &lt;a href="http://en.wikipedia.org/wiki/Kernel_%28computer_science%29#Kernel-wide_design_approaches"&gt;&lt;span style="font-style: italic;"&gt;design and implementation&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;My projects have been keeping me on my toes so i feel this brief introduction to OS Kernel will fill you up for the day. Although, more can be read online. &lt;a href="http://en.wikipedia.org/wiki"&gt;Wikipedia &lt;/a&gt;is the best online documentation for everything. Wait till my next post. Adieu~!&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.copyscape.com/"&gt;&lt;IMG SRC="http://banners.copyscape.com/images/cs-gr-3d-234x16.gif" ALT="Page copy protected against web site content infringement by Copyscape" TITLE="Do not copy content from the page. Plagiarism will be detected by Copyscape." WIDTH="234" HEIGHT="16" BORDER="0"&gt;&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-4296514575737237414?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/4296514575737237414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=4296514575737237414' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/4296514575737237414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/4296514575737237414'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/understanding-kernel-basics.html' title='Understanding the Kernel: basics!'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KmXO-OyN_yA/Rw4bOpYl1hI/AAAAAAAAAAg/u_259DnK94I/s72-c/Kernel.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1046333380878530823.post-2269470607049285029</id><published>2007-10-10T03:27:00.000-07:00</published><updated>2007-10-25T15:22:40.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Introduction</title><content type='html'>Its been a long time that my friends and colleagues have been asking me to write. I always had something or the other to say. Well, come on, anyone is not so busy to invest 5 minutes on a blog entry daily. So, finally I am here posting my first entry. As you all might have guessed, yes, I am a final year student of Computer Science &amp;amp; Engineering. This one's for you folks. I intend to be regular with my posting, on everything I know or have known so far, about technology, life and other determinant aspects.&lt;br /&gt;   My special thanks to several people who have inspired me to write either by direct word of mouth or by their successful blogs/sites : &lt;a href="http://thevirtualside.blogspot.com/"&gt;Puneet Chawla&lt;/a&gt;, &lt;a href="http://nitin-the-napster.blogspot.com/"&gt;Nitin&lt;/a&gt; , &lt;a href="http://www.ankurlekhi.com/"&gt;Ankur&lt;/a&gt; .&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;br /&gt;   I have been working on the linux kernel for about an year now. Written couple of device drivers and tweaked plenty of modules in &lt;a href="http://www.minix3.org/"&gt;MINIX OS.&lt;/a&gt;&lt;br /&gt;Will write more about everything related to the mysterious OS and its Kernel in the upcoming posts.&lt;br /&gt;Have a great day ;)&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-2879071-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1046333380878530823-2269470607049285029?l=kernelcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kernelcoder.blogspot.com/feeds/2269470607049285029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1046333380878530823&amp;postID=2269470607049285029' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/2269470607049285029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1046333380878530823/posts/default/2269470607049285029'/><link rel='alternate' type='text/html' href='http://kernelcoder.blogspot.com/2007/10/introduction.html' title='Introduction'/><author><name>JC</name><uri>http://www.blogger.com/profile/09885936276671900455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-MTSIuxGUR_c/Tn3y7sHksSI/AAAAAAAAAKk/GArwUW0v23o/s220/IMG_0391.JPG'/></author><thr:total>2</thr:total></entry></feed>
