<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>coding &#187; kernel</title>
	<atom:link href="http://www.coding.com.br/category/kernel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coding.com.br</link>
	<description>have you coded today?</description>
	<lastBuildDate>Fri, 23 Jul 2010 02:37:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Licenças para módulos no Linux</title>
		<link>http://www.coding.com.br/kernel/licencas-para-modulos-no-linux/</link>
		<comments>http://www.coding.com.br/kernel/licencas-para-modulos-no-linux/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 03:29:29 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[kernel]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=1083</guid>
		<description><![CDATA[O arquivo /usr/src/linux/include/linux/module.h define as licenças aceitáveis para um módulo (ou driver) seja reconhecido como software livre.

GPL - GNU Public License v2 or later
GPL v2 - GNU Public License v2
GPL and additional rights - GNU Public License v2 rights and more
Dual BSD/GPL - GNU Public License v2  or BSD license choice
Dual MIT/GPL - GNU Public License v2 or MIT license choice
Dual MPL/GPL [...]]]></description>
			<content:encoded><![CDATA[<p>O arquivo <em>/usr/src/linux/include/linux/module.h</em> define as licenças aceitáveis para um módulo (ou <em>driver</em>) seja reconhecido como software livre.</p>
<ul>
<li><strong>GPL</strong> - <em>GNU Public License v2 or later</em></li>
<li><strong>GPL v2</strong> - <em>GNU Public License v2</em></li>
<li><strong>GPL and additional rights</strong> - <em>GNU Public License v2 rights and more</em></li>
<li><strong>Dual BSD/GPL</strong> - <em>GNU Public License v2  or BSD license choice</em></li>
<li><strong>Dual MIT/GPL</strong> - <em>GNU Public License v2 or MIT license choice</em></li>
<li><strong>Dual MPL/GPL</strong> -<em> GNU Public License v2 or Mozilla license choice</em></li>
</ul>
<div id="_mcePaste">Também há um espaço (infelizmente) para licenças proprietárias:</div>
<div>
<ul>
<li><strong>Proprietary <em>- </em></strong><em>Non free products<br />
</em></li>
</ul>
</div>
<p>Como vocês podem notar, há componentes que podem ser definidos com licenças duplas, contudo quando executado no Linux apenas a GPL é relevante. Algumas razões para definir a licença:</p>
<ol>
<li><span id="result_box" class="short_text"><span>O </span><em>modinfo</em><span> pode  mostrar informações para usuários que desejam avaliar as licenças dos módulos sua instalação.</span></span></li>
<li><span id="result_box" class="short_text"><span><span id="result_box" class="short_text">A comunidade  pode ignorar relatórios de <em>bugs</em> dos módulos proprietários.</span></span></span></li>
<li><span id="result_box" class="short_text"><span><span id="result_box" class="short_text">Os fabricantes podem fazer o mesmo com suas próprias políticas.</span></span></span></li>
</ol>
<p>Para inserir a licença, basta colocar no seu código-fonte a macro  &#8221;MODULE_LICENCE&#8221;. Exemplo:</p>
<pre>  MODULE_LICENCE("GPL");</pre>
<p>Lembre-se que alguns recursos do <em>kernel</em> são disponíveis apenas se seu código é livre.</p>
<p>Um exemplo é o <strong>sysfs</strong> (através da macro EXPORT_SYMBOL_GPL) que por questões de manutenção e consistência exige que você licencie seu módulo em alguma licença compatível com a GPL.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/kernel/licencas-para-modulos-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kthreads (1)</title>
		<link>http://www.coding.com.br/kernel/kthreads-1/</link>
		<comments>http://www.coding.com.br/kernel/kthreads-1/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 04:18:15 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=958</guid>
		<description><![CDATA[Creating a thread at kernel-space
Now that I know that somebody at Academia reads my posts   I&#8217;ll put code with a _little_ documentation information together. Today we will do a quick review about kernel threads or to be more precisely, a way to perform some operations in the background. Kernel threads are standard process [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;"><em>Creating a thread at kernel-space</em></p>
<p style="text-align: justify;">Now that I know that <a href="http://kindman.org/blog/2009/12/12/academia-motivation/" target="_blank">somebody</a> at Academia reads my posts <img src='http://www.coding.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  I&#8217;ll put code with a _little_ <span style="text-decoration: line-through;">documentation</span> information together. Today we will do a quick review about <em>kernel threads </em>or to be more precisely, a way to perform some operations in the background. <em>Kernel threads</em> are standard process that:</p>
<ol>
<li>Exist solely in kernel-space.</li>
<li>Don&#8217;t have an address space.</li>
<li>Don&#8217;t context switch to user-space.</li>
<li>Are schedulable and preemptable as normal process.</li>
</ol>
<p>And let&#8217;s see an example:</p>
<pre><span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/init.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/module.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/sched.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/delay.h&gt;</span></strong></span>

<strong>static</strong> <strong>int</strong> <span style="color: #2040a0;">thread3</span><span style="color: #4444ff;">(</span><strong>void</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">unused</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>

	<strong>int</strong> <span style="color: #2040a0;">count3</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
	<strong>while</strong> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">count3</span> <span style="color: #4444ff;">&lt;</span> <span style="color: #ff0000;">1000</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
		<span style="color: #2040a0;">msleep</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">100</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
		<span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Thread 3: %d<span style="color: #77dd77;">\n</span>"</span>, <span style="color: #2040a0;">count3</span><span style="color: #4444ff;">+</span><span style="color: #4444ff;">+</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<span style="color: #4444ff;"><strong>}</strong></span>
	<strong>return</strong> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span> 

<strong>static</strong> <strong>int</strong> <span style="color: #2040a0;">thread2</span><span style="color: #4444ff;">(</span><strong>void</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">unused</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>

	<strong>int</strong> <span style="color: #2040a0;">count2</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
	<strong>while</strong> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">count2</span> <span style="color: #4444ff;">&lt;</span> <span style="color: #ff0000;">1000</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
		<span style="color: #2040a0;">msleep</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">10</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
		<span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Thread 2: %d<span style="color: #77dd77;">\n</span>"</span>, <span style="color: #2040a0;">count2</span><span style="color: #4444ff;">+</span><span style="color: #4444ff;">+</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<span style="color: #4444ff;"><strong>}</strong></span>
	<strong>return</strong> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>static</strong> <strong>int</strong> <span style="color: #2040a0;">__init</span> <span style="color: #2040a0;">threads_init</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
	<strong>int</strong> <span style="color: #2040a0;">count1</span><span style="color: #4444ff;">;</span>
	<strong>int</strong> <span style="color: #2040a0;">ret1</span>, <span style="color: #2040a0;">ret2</span><span style="color: #4444ff;">;</span>

	<span style="color: #2040a0;">count1</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
	<span style="color: #2040a0;">ret1</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">kernel_thread</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">thread2</span>, <span style="color: #2040a0;">NULL</span>, <span style="color: #2040a0;">CLONE_FS</span> <span style="color: #4444ff;">|</span> <span style="color: #2040a0;">CLONE_FILES</span> <span style="color: #4444ff;">|</span> <span style="color: #2040a0;">CLONE_SIGHAND</span> <span style="color: #4444ff;">|</span> <span style="color: #2040a0;">SIGCHLD</span> <span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<span style="color: #2040a0;">ret2</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">kernel_thread</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">thread3</span>, <span style="color: #2040a0;">NULL</span>, <span style="color: #2040a0;">CLONE_FS</span> <span style="color: #4444ff;">|</span> <span style="color: #2040a0;">CLONE_FILES</span> <span style="color: #4444ff;">|</span> <span style="color: #2040a0;">CLONE_SIGHAND</span> <span style="color: #4444ff;">|</span> <span style="color: #2040a0;">SIGCHLD</span> <span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

	<span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"-- kernel thread: module init<span style="color: #77dd77;">\n</span>"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"-- kernel thread: spawning thread 1 ret=%d<span style="color: #77dd77;">\n</span>"</span>, <span style="color: #2040a0;">ret1</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"-- kernel thread: spawning thread 2 ret=%d<span style="color: #77dd77;">\n</span>"</span>, <span style="color: #2040a0;">ret2</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>	

	<span style="color: #444444;">/*
	   Don't use "long" loops on init().
	   If you uncomment the snippet below the insmod will lock until while finishes
	*/</span> 

	<span style="color: #444444;">/*
	while (count1 &lt; 1000) {
		msleep(10);
		printk("Thread 1: %d\n", count1++);
     	}
	*/</span>

    <strong>return</strong> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>static</strong> <strong>void</strong> <span style="color: #2040a0;">__exit</span> <span style="color: #2040a0;">threads_exit</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
    <span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"-- kernel thread: module removed<span style="color: #77dd77;">\n</span>"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<span style="color: #2040a0;">module_init</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">threads_init</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #2040a0;">module_exit</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">threads_exit</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

<span style="color: #2040a0;">MODULE_AUTHOR</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Tiago Maluta &lt;maluta@unifei.edu.br"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #2040a0;">MODULE_DESCRIPTION</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"kthreads examples"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #2040a0;">MODULE_LICENSE</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"GPL"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span></pre>
<p>Things from code that are found in docs&#8230;</p>
<ul>
<li>CLONE_FS means that<em> parent</em> and <em>child</em> share filesystem information.</li>
<li><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">CLONE_FILES means that<em> parent </em>and <em>child</em> open files.</span></li>
<li><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">CLONE_SIGHAND means that <em>parent</em> and <em>child</em> share signal handlers.</span></li>
</ul>
<p>I use arbitrarily <em>msleep()</em> just to allow user &#8220;see&#8221; what is happening when dumping kernel ring buffer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/kernel/kthreads-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adding procfs and sysfs interface in your lkml</title>
		<link>http://www.coding.com.br/kernel/adding-procfs-and-sysfs-interface-in-your-lkml/</link>
		<comments>http://www.coding.com.br/kernel/adding-procfs-and-sysfs-interface-in-your-lkml/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 14:03:26 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=940</guid>
		<description><![CDATA[Hi. This post will show how to add two important things about device model in your linux kernel module (lkml). Sysfs is the user-space manifestation of the kernel&#8217;s structured device model. It&#8217;s similar to procfs in that both are in-memory filesystem containing information about kernel data structures. Basically:

procfs is a generic window into kernel internals
sysfs [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hi. This post will show how to add two <strong>important</strong> things about device model in your linux kernel module (lkml). Sysfs is the user-space manifestation of the kernel&#8217;s structured device model. It&#8217;s similar to procfs in that both are in-memory filesystem containing information about kernel data structures. Basically:</p>
<ul>
<li>procfs is a generic window into kernel internals</li>
<li>sysfs is specific to device model</li>
</ul>
<p>Information such as process descriptors and sysctls parameters belong to procfs and not sysfs. Note that: Sysfs is not a replacement for procfs.</p>
<p>Lets create two useless (in a practical way) that presents the &#8220;idea&#8221; behind these constructions.</p>
<p><strong>1. Procfs</strong></p>
<p style="text-align: justify;">The snippet  below creates a <em>/proc/coding</em> allowing read or write some content.</p>
<pre><span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/kernel.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/module.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/init.h&gt;</span></strong></span>

<span style="color: #444444;">/* for proc_dir_entry and create_proc_entry */</span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/proc_fs.h&gt;</span></strong></span>

<span style="color: #444444;">/* For sprintf and snprintf */</span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/string.h&gt;</span></strong></span>

<span style="color: #444444;">/* For copy_from_user */</span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/uaccess.h&gt;</span></strong></span>

<strong>static</strong> <strong>char</strong> <span style="color: #2040a0;">internal_buffer</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">256</span><span style="color: #4444ff;">]</span><span style="color: #4444ff;">;</span>

<strong>int</strong> <span style="color: #2040a0;">buf_read</span><span style="color: #4444ff;">(</span><strong>char</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">buf</span>, <strong>char</strong> <span style="color: #4444ff;">*</span><span style="color: #4444ff;">*</span><span style="color: #2040a0;">start</span>, <span style="color: #2040a0;">off_t</span> <span style="color: #2040a0;">offset</span>, <strong>int</strong> <span style="color: #2040a0;">count</span>, <strong>int</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">eof</span>, <strong>void</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">data</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
	<strong>int</strong> <span style="color: #2040a0;">len</span><span style="color: #4444ff;">;</span>
	<span style="color: #2040a0;">len</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">snprintf</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">buf</span>, <span style="color: #2040a0;">count</span>, <span style="color: #008000;">"%s"</span>, <span style="color: #2040a0;">internal_buffer</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<strong>return</strong> <span style="color: #2040a0;">len</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>static</strong> <strong>int</strong> <span style="color: #2040a0;">buf_write</span><span style="color: #4444ff;">(</span><strong>struct</strong> <span style="color: #2040a0;">file</span> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">file</span>, <strong>const</strong> <strong>char</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">buf</span>, <strong>unsigned</strong> <strong>long</strong> <span style="color: #2040a0;">count</span>, <strong>void</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">data</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
	<strong>if</strong><span style="color: #4444ff;">(</span><span style="color: #2040a0;">count</span> <span style="color: #4444ff;">&gt;</span> <span style="color: #ff0000;">255</span><span style="color: #4444ff;">)</span> <span style="color: #444444;">/* to avoid overflowwwwwwwwww */</span>
		<span style="color: #2040a0;">count</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">255</span><span style="color: #4444ff;">;</span>

	<span style="color: #444444;">/* Copies data from user space to kernel space */</span>
	<span style="color: #2040a0;">copy_from_user</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">internal_buf</span>, <span style="color: #2040a0;">buf</span>, <span style="color: #2040a0;">count</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

	<span style="color: #444444;">/* inserting NULL to end the string */</span>
	<span style="color: #2040a0;">internal_buf</span><span style="color: #4444ff;">[</span><span style="color: #2040a0;">count</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">'<span style="color: #77dd77;">\0</span>'</span><span style="color: #4444ff;">;</span>
	<strong>return</strong> <span style="color: #2040a0;">count</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>int</strong> <span style="color: #2040a0;">__init</span> <span style="color: #2040a0;">proc_init</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
	<span style="color: #444444;">/* Simple */</span>
	<strong>struct</strong> <span style="color: #2040a0;">proc_dir_entry</span> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">de</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">create_proc_entry</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"coding"</span>, <span style="color: #ff0000;">0667</span>, <span style="color: #ff0000;">0</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

	<span style="color: #444444;">/* Set pointers to our functions */</span>
	<span style="color: #2040a0;">de</span><span style="color: #4444ff;">-</span><span style="color: #4444ff;">&gt;</span><span style="color: #2040a0;">read_proc</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">buf_read</span><span style="color: #4444ff;">;</span> <span style="color: #444444;">/* reading */</span>
	<span style="color: #2040a0;">de</span><span style="color: #4444ff;">-</span><span style="color: #4444ff;">&gt;</span><span style="color: #2040a0;">write_proc</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">buf_write</span><span style="color: #4444ff;">;</span> <span style="color: #444444;">/* writing */</span> 

	<span style="color: #444444;">/* We initialize our internal_buffer with some text. */</span>
	<span style="color: #2040a0;">sprintf</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">internal_buffer</span>, <span style="color: #008000;">"www.coding.com.br"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<strong>return</strong> <span style="color: #ff0000;">0</span> <span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>void</strong> <span style="color: #2040a0;">__exit</span> <span style="color: #2040a0;">proc_cleanup</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>

	<span style="color: #444444;">/* We delete our entry */</span>
	<span style="color: #2040a0;">remove_proc_entry</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"coding"</span>, <span style="color: #2040a0;">NULL</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

<span style="color: #4444ff;"><strong>}</strong></span>

<span style="color: #2040a0;">module_init</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">proc_init</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #2040a0;">module_exit</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">proc_cleanup</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

<span style="color: #2040a0;">MODULE_LICENSE</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"GPL"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span></pre>
<p><strong>2. Sysfs</strong></p>
<p>This example only creates a <em>/sys/class/&lt;module-name&gt; </em>directory with nothing inside. This may not be clear now but remember when I show &#8211; in the next posts &#8211; some practical use with device node (/dev).</p>
<pre><span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/kernel.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/module.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/init.h&gt;</span></strong></span>

<span style="color: #444444;">/* for sysfs class creation */</span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/platform_device.h&gt;</span></strong></span>

<strong>static</strong> <strong>struct</strong> <span style="color: #2040a0;">class</span> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">sysfs_class</span><span style="color: #4444ff;">;</span>

<strong>int</strong> <span style="color: #2040a0;">__init</span> <span style="color: #2040a0;">sysfs_init</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>

	<span style="color: #2040a0;">sysfs_class</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">class_create</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">THIS_MODULE</span>, <span style="color: #008000;">"sysfs"</span> <span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<strong>return</strong> <span style="color: #ff0000;">0</span> <span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>void</strong> <span style="color: #2040a0;">__exit</span> <span style="color: #2040a0;">sysfs_cleanup</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>

	<span style="color: #444444;">/* We delete our entry */</span>
	<span style="color: #2040a0;">class_destroy</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">sysfs_class</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<span style="color: #2040a0;">module_init</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">sysfs_init</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #2040a0;">module_exit</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">sysfs_cleanup</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

<span style="color: #2040a0;">MODULE_LICENSE</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"GPL"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/kernel/adding-procfs-and-sysfs-interface-in-your-lkml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Notify chain: example 1</title>
		<link>http://www.coding.com.br/kernel/notify-chain-example-1/</link>
		<comments>http://www.coding.com.br/kernel/notify-chain-example-1/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 03:02:08 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=925</guid>
		<description><![CDATA[This is a basic skeleton of a Linux kernel module about notify chain that I&#8217;ll put as examples on my final course paper. When user presses a key, kernel &#8220;reads&#8221; it and then, using notify chain informs all subsystems which want to be informed about pressed key.
/* keyboard-dump.c
 *
 * This is a "notify chain" example [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">This is a basic skeleton of a Linux kernel module about <em>notify chain</em> that I&#8217;ll put as examples on my final course paper. When user presses a key, kernel &#8220;reads&#8221; it and then, using notify chain informs all subsystems which want to be informed about pressed key.</p>
<pre><span style="color: #444444;">/* keyboard-dump.c
 *
 * This is a "notify chain" example that dumps keyboard on kernel message
 *
 *	(C) Copyright 2010, Tiago Maluta
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */</span>

<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/notifier.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/module.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/keyboard.h&gt;</span></strong></span>

<strong>static</strong> <strong>int</strong> <span style="color: #2040a0;">debug</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">1</span><span style="color: #4444ff;">;</span>

<span style="color: #0000ff;"><strong>#define dbg(fmt, arg...)						\</strong></span>
	<strong>do</strong> <span style="color: #4444ff;"><strong>{</strong></span>								\
		<strong>if</strong> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">debug</span><span style="color: #4444ff;">)</span>						\
			<span style="color: #2040a0;">printk</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">KERN_DEBUG</span> <span style="color: #008000;">"%s: %s: "</span> <span style="color: #2040a0;">fmt</span> <span style="color: #008000;">"<span style="color: #77dd77;">\n</span>"</span>,		\
				<span style="color: #008000;">"test"</span> , <span style="color: #2040a0;">__FUNCTION__</span> , ## <span style="color: #2040a0;">arg</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>	\
	<span style="color: #4444ff;"><strong>}</strong></span> <strong>while</strong> <span style="color: #4444ff;">(</span><span style="color: #ff0000;">0</span><span style="color: #4444ff;">)</span>

<strong>int</strong> <span style="color: #2040a0;">keyboard_event_handler</span><span style="color: #4444ff;">(</span><strong>struct</strong> <span style="color: #2040a0;">notifier_block</span> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">self</span>,
                         <strong>unsigned</strong> <strong>long</strong> <span style="color: #2040a0;">val</span>,
			 <strong>void</strong> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">data</span><span style="color: #4444ff;">)</span> 

<span style="color: #4444ff;"><strong>{</strong></span>

	<strong>struct</strong> <span style="color: #2040a0;">keyboard_notifier_param</span> <span style="color: #4444ff;">*</span><span style="color: #2040a0;">param</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">data</span><span style="color: #4444ff;">;</span> 

	<strong>unsigned</strong> <strong>int</strong> <span style="color: #2040a0;">value</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">param</span><span style="color: #4444ff;">-</span><span style="color: #4444ff;">&gt;</span><span style="color: #2040a0;">value</span><span style="color: #4444ff;">;</span>

	<strong>if</strong> <span style="color: #4444ff;">(</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">!</span><span style="color: #2040a0;">param</span><span style="color: #4444ff;">-</span><span style="color: #4444ff;">&gt;</span><span style="color: #2040a0;">down</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">&amp;</span><span style="color: #4444ff;">&amp;</span> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">value</span> <span style="color: #4444ff;">&gt;</span> <span style="color: #ff0000;">0xf000</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">)</span>
		<span style="color: #2040a0;">printk</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"%c"</span>, <span style="color: #2040a0;">KVAL</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">param</span><span style="color: #4444ff;">-</span><span style="color: #4444ff;">&gt;</span><span style="color: #2040a0;">value</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

	<strong>return</strong> <span style="color: #2040a0;">NOTIFY_DONE</span> <span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>static</strong> <strong>struct</strong> <span style="color: #2040a0;">notifier_block</span> <span style="color: #2040a0;">keyboard_notifier</span> <span style="color: #4444ff;">=</span> <span style="color: #4444ff;"><strong>{</strong></span>

	.<span style="color: #2040a0;">notifier_call</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">keyboard_event_handler</span>,
<span style="color: #4444ff;"><strong>}</strong></span><span style="color: #4444ff;">;</span>

<strong>static</strong> <strong>int</strong> <span style="color: #2040a0;">__init</span> <span style="color: #2040a0;">keyboard_init</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span> 

<span style="color: #4444ff;"><strong>{</strong></span>

	<span style="color: #2040a0;">register_keyboard_notifier</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">&amp;</span><span style="color: #2040a0;">keyboard_notifier</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

	<span style="color: #2040a0;">dbg</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

	<strong>return</strong> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>static</strong> <strong>void</strong> <span style="color: #2040a0;">__exit</span> <span style="color: #2040a0;">keyboard_exit</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span>

<span style="color: #4444ff;"><strong>{</strong></span>
	<span style="color: #2040a0;">unregister_keyboard_notifier</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">&amp;</span><span style="color: #2040a0;">keyboard_notifier</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
	<span style="color: #2040a0;">dbg</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<span style="color: #2040a0;">module_init</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">keyboard_init</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #2040a0;">module_exit</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">keyboard_exit</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>

<span style="color: #2040a0;">MODULE_LICENSE</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"GPL"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span></pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<pre id="line1">&lt;<span class="start-tag">body</span><span class="attribute-name"> bgcolor</span>=<span class="attribute-value">"#ffffff" </span><span class="attribute-name">text</span>=<span class="attribute-value">"#000000"</span>&gt;
&lt;<span class="start-tag">pre</span>&gt;
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#444444"</span>&gt;/* keyboard-dump.c
 *
 * This is a &amp;<span class="entity">quot;</span>notify chain&amp;<span class="entity">quot;</span> example that dumps keyboard on kernel message
 *
 *	(C) Copyright 2010, Tiago Maluta
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */&lt;/<span class="end-tag">font</span>&gt;

&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#0000ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;#include &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">lt;</span>linux/notifier.h&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line21">&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#0000ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;#include &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">lt;</span>linux/module.h&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#0000ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;#include &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">lt;</span>linux/keyboard.h&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;

&lt;<span class="start-tag">strong</span>&gt;static&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">strong</span>&gt;int&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;debug&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;=&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#ff0000"</span>&gt;1&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line25">&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#0000ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;#define dbg(fmt, arg...)						\&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;
	&lt;<span class="start-tag">strong</span>&gt;do&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;{&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;								\
		&lt;<span class="start-tag">strong</span>&gt;if&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;debug&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;						\
			&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;printk&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;KERN_DEBUG&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">quot;</span>%s: %s: &amp;<span class="entity">quot;</span>&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;fmt&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">quot;</span>&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#77dd77"</span>&gt;\n&lt;/<span class="end-tag">font</span>&gt;&amp;<span class="entity">quot;</span>&lt;/<span class="end-tag">font</span>&gt;,		\
				&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">quot;</span>test&amp;<span class="entity">quot;</span>&lt;/<span class="end-tag">font</span>&gt; , &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;__FUNCTION__&lt;/<span class="end-tag">font</span>&gt; , ## &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;arg&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;	\
	&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;}&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">strong</span>&gt;while&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#ff0000"</span>&gt;0&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line32">
&lt;<span class="start-tag">strong</span>&gt;int&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_event_handler&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">strong</span>&gt;struct&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;notifier_block&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;*&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;self&lt;/<span class="end-tag">font</span>&gt;,
                         &lt;<span class="start-tag">strong</span>&gt;unsigned&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">strong</span>&gt;long&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;val&lt;/<span class="end-tag">font</span>&gt;,
			 &lt;<span class="start-tag">strong</span>&gt;void&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;*&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;data&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line38">&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;{&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;

	&lt;<span class="start-tag">strong</span>&gt;struct&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_notifier_param&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;*&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;param&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;=&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;data&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt; 

	&lt;<span class="start-tag">strong</span>&gt;unsigned&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">strong</span>&gt;int&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;value&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;=&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;param&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;-&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;value&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line43">	&lt;<span class="start-tag">strong</span>&gt;if&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;!&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;param&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;-&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;down&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">amp;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">amp;</span>&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;value&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#ff0000"</span>&gt;0xf000&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;
		&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;printk&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">quot;</span>%c&amp;<span class="entity">quot;</span>&lt;/<span class="end-tag">font</span>&gt;, &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;KVAL&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;param&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;-&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">gt;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;value&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line46">	&lt;<span class="start-tag">strong</span>&gt;return&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;NOTIFY_DONE&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;}&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;

&lt;<span class="start-tag">strong</span>&gt;static&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">strong</span>&gt;struct&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;notifier_block&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_notifier&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;=&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;{&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line51">	.&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;notifier_call&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;=&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_event_handler&lt;/<span class="end-tag">font</span>&gt;,
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;}&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;

&lt;<span class="start-tag">strong</span>&gt;static&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">strong</span>&gt;int&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;__init&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_init&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">strong</span>&gt;void&lt;/<span class="end-tag">strong</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line55">&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;{&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;

	&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;register_keyboard_notifier&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">amp;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_notifier&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;
	&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;dbg&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line61">	&lt;<span class="start-tag">strong</span>&gt;return&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#ff0000"</span>&gt;0&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;}&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;
&lt;<span class="start-tag">strong</span>&gt;static&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">strong</span>&gt;void&lt;/<span class="end-tag">strong</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;__exit&lt;/<span class="end-tag">font</span>&gt; &lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_exit&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">strong</span>&gt;void&lt;/<span class="end-tag">strong</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line65">&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;{&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;
	&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;unregister_keyboard_notifier&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&amp;<span class="entity">amp;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_notifier&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;
	&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;dbg&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;&lt;<span class="start-tag">strong</span>&gt;}&lt;/<span class="end-tag">strong</span>&gt;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line69">&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;module_init&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_init&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;
&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;module_exit&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;keyboard_exit&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;

&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#2040a0"</span>&gt;MODULE_LICENSE&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;(&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#008000"</span>&gt;&amp;<span class="entity">quot;</span>GPL&amp;<span class="entity">quot;</span>&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;)&lt;/<span class="end-tag">font</span>&gt;&lt;<span class="start-tag">font</span><span class="attribute-name"> color</span>=<span class="attribute-value">"#4444ff"</span>&gt;;&lt;/<span class="end-tag">font</span>&gt;</pre>
<pre id="line74">&lt;/<span class="end-tag">pre</span>&gt;</pre>
</div>
<p>The output will be visible (i.e: dmesg) on kernel ring buffer.</p>
<p>If you like try<strong> don&#8217;t</strong> cut&amp;paste the code above but use I gist repository <a href="http://gist.github.com/373206" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/kernel/notify-chain-example-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acionando os mantenedores</title>
		<link>http://www.coding.com.br/kernel/acionando-os-mantenedores/</link>
		<comments>http://www.coding.com.br/kernel/acionando-os-mantenedores/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 23:41:26 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=420</guid>
		<description><![CDATA[Se você precisar entrar em contato com o mantendor de algum sub-sistema do kernel Linux mas não sabe onde procurar, utilize um script (get_maintainer.pl) incluído no próprio código. Um exemplo,  suponha que você utilize o sistema de arquivos ext4 e deseje sugerir alguma idéia. Se for um bug é recomendado utilizar a plataforma de submissão [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Se você precisar entrar em contato com o mantendor de algum sub-sistema do kernel <a href="http://www.kernel.org" target="_blank">Linux</a> mas não sabe onde procurar, utilize um <em>script</em> (get_maintainer.pl) incluído no próprio código. Um exemplo,  suponha que você utilize o sistema de arquivos <a href="http://ext4.wiki.kernel.org/index.php/Main_Page" target="_blank">ext4</a> e deseje sugerir alguma idéia. Se for um <em>bug</em> é recomendado utilizar a <a href="http://bugzilla.kernel.org/" target="_blank">plataforma</a> de submissão de bugs (bugzilla) que além de seguir uma metodologia para descrever o erro é uma forma de catalogar o problema. Estou considerando neste <em>post</em> que você ainda não é um desenvolvedor e quer achar o mantenedor pois gostaria de fazer uma sugestão ou comentário acerca da área do código-fonte que ele mantém. Este tipo de busca talvez seja mais intessante nos <em>devices drivers&#8230;</em></p>
<p style="text-align: justify;"><em><span style="font-style: normal;">Um exemplo com o ext4:</span></em></p>
<p style="text-align: justify;"><em> </em></p>
<p style="padding-left: 30px; "><strong>./scripts/get_maintainer.pl -f  fs/ext4/</strong></p>
<p style="padding-left: 60px; "><em><em>&#8220;Theodore Ts&#8217;o&#8221; &lt;tytso@&#8230;&gt;</em></em></p>
<p style="padding-left: 60px; "><em><span style="background-color: #ffffff; font-style: normal;"><em> </em></span>Aneesh Kumar K.V &lt;aneesh.kumar@&#8230;&gt; </em></p>
<p style="padding-left: 60px; "><em><span style="background-color: #ffffff; font-style: normal;"><em>Eric Sandeen &lt;sandeen@&#8230;&gt; </em></span></em></p>
<p style="padding-left: 60px; "><em><span style="background-color: #ffffff; font-style: normal;"><em> </em></span><span style="background-color: #ffffff; font-style: normal;"><em><span style="background-color: #ffffff; font-style: normal;"><em>linux-kernel@vger.kernel.org <span style="color: #ff0000;">(lembre-se de se cadastrar e sempre de copiar a lista de email junto)</span></em></span></em></span></em></p>
<p>Um exemplo com o <em>driver</em> de video da Intel:</p>
<p><span style="color: #ff0000;"><em> </em></span></p>
<p><span style="color: #ff0000;"><em> </em></span></p>
<p style="padding-left: 30px;"><em><strong>./scripts/get_maintainer.pl -f drivers/video/intelfb/</strong></em></p>
<p><em> </em></p>
<p><em> </em></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Sylvain Meyer &lt;sylvain.meyer@worldonline.fr&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Andrew Morton &lt;akpm@linux-foundation.org&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Thomas Hilber &lt;sparkie@lowbyte.de&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Stefan Husemann &lt;shusemann@googlemail.com&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Hannes Eder &lt;hannes@hanneseder.net&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Paul Menzel &lt;paulepanter@users.sourceforge.net&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">linux-fbdev-devel@lists.sourceforge.net</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">linux-kernel@vger.kernel.org</div>
<p style="padding-left: 30px; "><span style="color: #ff0000;"><em><span style="color: #000000;"><span style="font-style: normal;"> </span></span></em></span></p>
<p style="padding-left: 60px; ">Sylvain Meyer &lt;sylvain.meyer@&#8230;&gt;</p>
<p style="padding-left: 60px; ">Andrew Morton &lt;akpm@&#8230;&gt;</p>
<p style="padding-left: 60px; ">Thomas Hilber &lt;sparkie@&#8230;&gt;</p>
<p style="padding-left: 60px; ">Stefan Husemann &lt;shusemann@&#8230;&gt;</p>
<p style="padding-left: 60px; ">Hannes Eder &lt;hannes@&#8230;&gt;</p>
<p style="padding-left: 60px; ">Paul Menzel &lt;paulepanter@&#8230;&gt;</p>
<p style="padding-left: 60px; ">linux-fbdev-devel@lists.sourceforge.net</p>
<p style="padding-left: 60px; ">linux-kernel@vger.kernel.org</p>
<p style="padding-left: 30px; ">
<p><span style="background-color: #ffffff;">Dar o retorno do uso de algum programa é ótimo para o desenvolvedor e garante a qualidade do sotfware. </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/kernel/acionando-os-mantenedores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
