<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>.::Escovando Bits::.</title>
	<atom:link href="http://escovandobits.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://escovandobits.wordpress.com</link>
	<description>Programação, Linux, tecnologia da informação, dicas, artigos</description>
	<lastBuildDate>Sun, 05 Jul 2009 15:42:47 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='escovandobits.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ac8d2c79730f1bc1a6ebab006a3670da?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>.::Escovando Bits::.</title>
		<link>http://escovandobits.wordpress.com</link>
	</image>
			<item>
		<title>Conversão de base no Python</title>
		<link>http://escovandobits.wordpress.com/2009/07/05/conversao-de-base-no-python/</link>
		<comments>http://escovandobits.wordpress.com/2009/07/05/conversao-de-base-no-python/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 15:42:46 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=500</guid>
		<description><![CDATA[Lembrete para conversão de base no Python, a primera coluna é o valor de entrada e a primeira linha o valor de saída.
 













Hexadecimal


Binário


Octal


Decimal




Hex:


-


bin(0x&#60;num&#62;)


oct(0x&#60;num&#62;)


int(0x&#60;num&#62;)




Bin:


hex(0b&#60;num&#62;)


-


oct(0b&#60;num&#62;)


int(0b&#60;num&#62;)




Octal:


hex(0o&#60;num&#62;)


bin(0o&#60;num)


-


int(0o&#60;num&#62;)




Dec:


hex(&#60;num&#62;)


bin(&#60;num&#62;)


oct(&#60;num&#62;)


-




Pode-se converter para outras bases entre 2 e 36 utilizando int(&#60;numero&#62;,&#60;base&#62;), exemplo:
&#62;&#62;&#62; print int('g',18)
16

Posted in programação Tagged: python      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=500&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><span style="color:#141312;">Lembrete para conversão de base no Python, a primera coluna é o valor de entrada e a primeira linha o valor de saída.</span></p>
<p style="padding-left:30px;"><span style="color:#141312;"> </span></p>
<table class="Tabela1" border="0" cellspacing="0" cellpadding="0"></table>
<col width="62"></col>
<col width="191"></col>
<col width="119"></col>
<col width="187"></col>
<col width="184"></col>
<table class="Tabela1" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="Tabela1_A1" style="text-align:left;width:.5604in;">
<p class="Table_20_Contents">
</td>
<td class="Tabela1_B1" style="text-align:left;width:1.7201in;">
<p class="P1" style="text-align:left;">Hexadecimal</p>
</td>
<td class="Tabela1_B1" style="text-align:left;width:1.0743in;">
<p class="P1" style="text-align:left;">Binário</p>
</td>
<td class="Tabela1_B1" style="text-align:left;width:1.6826in;">
<p class="P1" style="text-align:left;">Octal</p>
</td>
<td class="Tabela1_E1" style="text-align:left;width:1.6549in;">
<p class="P1" style="text-align:left;">Decimal</p>
</td>
</tr>
<tr>
<td class="Tabela1_A2" style="text-align:left;width:.5604in;">
<p class="P2">Hex:</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.7201in;">
<p class="P1" style="text-align:center;">-</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.0743in;">
<p class="P1"><strong>bin</strong>(<span style="color:#008000;">0x</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.6826in;">
<p class="P1"><strong>oct</strong>(<span style="color:#008000;">0x</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_E2" style="text-align:left;width:1.6549in;">
<p class="P1"><strong>int</strong>(<span style="color:#008000;">0x</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
</tr>
<tr>
<td class="Tabela1_A2" style="text-align:left;width:.5604in;">
<p class="P2">Bin:</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.7201in;">
<p class="P1"><strong><span style="color:#000000;">hex</span></strong>(<span style="color:#008000;">0b</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.0743in;">
<p class="P1" style="text-align:center;">-</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.6826in;">
<p class="P1"><strong>oct</strong>(<span style="color:#008000;">0b</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_E2" style="text-align:left;width:1.6549in;">
<p class="P1"><strong>int</strong>(<span style="color:#008000;">0b</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
</tr>
<tr style="text-align:center;">
<td class="Tabela1_A2" style="text-align:left;width:.5604in;">
<p class="P2">Octal:</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.7201in;">
<p class="P1"><strong>hex</strong>(<span style="color:#008000;">0o</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.0743in;">
<p class="P1"><strong>bin</strong>(<span style="color:#008000;">0o</span><span style="color:#ff0000;">&lt;num</span>)</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.6826in;">
<p class="P1" style="text-align:center;">-</p>
</td>
<td class="Tabela1_E2" style="text-align:left;width:1.6549in;">
<p class="P1"><strong>int</strong>(<span style="color:#008000;">0o</span><span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
</tr>
<tr style="text-align:center;">
<td class="Tabela1_A2" style="text-align:left;width:.5604in;">
<p class="P2">Dec:</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.7201in;">
<p class="P1"><strong>hex</strong>(<span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.0743in;">
<p class="P1"><strong>bin</strong>(<span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_A2" style="text-align:left;width:1.6826in;">
<p class="P1"><strong>oct</strong>(<span style="color:#ff0000;">&lt;num&gt;</span>)</p>
</td>
<td class="Tabela1_E2" style="text-align:left;width:1.6549in;">
<p class="P1" style="text-align:center;">-</p>
</td>
</tr>
</tbody>
</table>
<p class="Standard">Pode-se converter para outras bases entre 2 e 36 utilizando int(&lt;numero&gt;,&lt;base&gt;), exemplo:</p>
<pre class="Standard" style="padding-left:30px;">&gt;&gt;&gt; print int('g',18)
16</pre>
<p class="Standard">
Posted in programação Tagged: python <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/500/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/500/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/500/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/500/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/500/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/500/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/500/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/500/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/500/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/500/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=500&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/07/05/conversao-de-base-no-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>VMWare ESX</title>
		<link>http://escovandobits.wordpress.com/2009/05/23/vmware-esx/</link>
		<comments>http://escovandobits.wordpress.com/2009/05/23/vmware-esx/#comments</comments>
		<pubDate>Sat, 23 May 2009 04:48:43 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[virtualização]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=483</guid>
		<description><![CDATA[Ainda não testei num hardware apropriado&#8230; mas hoje quando fiz um teste rápido com com o VMware ESXi no QEmu percebi que ele detectou &#8220;aonde&#8221; estava rodando.

Para ver mais screenshots clique aqui.
As CPUs modernas possuem alguns registros especiais dentre os quais há o grupo de instruções: Memory Type Range Registers (MTRRs) que provém um sistema [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=483&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Ainda não testei num <em>hardware</em> apropriado&#8230; mas hoje quando fiz um teste rápido com com o <a href="http://www.vmware.com/products/esxi/" target="_self">VMware ESXi</a> no QEmu percebi que ele detectou &#8220;aonde&#8221; estava rodando.</p>
<p style="text-align:center;"><a title="6. VMware ESX por Tiago Maluta, no Flickr" href="http://www.flickr.com/photos/maluta/3555130309/"><img src="http://farm4.static.flickr.com/3392/3555130309_dc627dc869_o.png" alt="6. VMware ESX" width="437" height="260" /></a></p>
<p style="text-align:center;">Para ver mais <em>screenshots </em>clique <a href="http://www.flickr.com/photos/maluta/sets/72157618654184926/detail/" target="_blank">aqui</a><strong>.</strong></p>
<p style="text-align:justify;"><strong><span id="more-483"></span></strong>As CPUs modernas possuem alguns registros especiais dentre os quais há o grupo de instruções: <em>Memory Type Range Registers</em> (MTRRs) que provém um sistema de como o acesso a faixas de memória são transferidas para a cache. Nesse caso a mensagem [<strong>No variable MTRRS</strong>] indica como o VMware detectou.  [assim que sobrar um tempo irei buscar a fundo o motivo real da virtualização não implementar isso]</p>
<p style="text-align:justify;">Utilizei o seguinte comando para rodar o Qemu:</p>
<pre><strong>./qemu -cpu </strong>coreduo <strong>-m</strong> 1500 \
 -<strong>hda</strong> vm.cow \
 <strong>-cdrom</strong> VMware-VMvisor-InstallerCD-3.5.0_Update_4-153875.i386.iso</pre>
<p><span style="color:#000000;">A título de exemplo,  vejam um programa para detectar se o seu programa está em uma máquina virtual (no caso VMware):</span></p>
<pre style="padding-left:30px;text-align:justify;"><span style="color:#006e28;">#include &lt;stdlib.h&gt;</span>
<span style="color:#006e28;">#include &lt;unistd.h&gt;</span>
<span style="color:#006e28;">#include &lt;signal.h&gt;</span>

<span style="color:#006e28;">#define MAGIC 0x564d5868 </span><span style="color:#888786;"><em>/* "VMXh" */</em></span>
<span style="color:#006e28;">#define PORT 0x5658       </span><span style="color:#888786;"><em>/* "VX" */</em></span>
<span style="color:#006e28;">#define GETVERSION 0x0a</span>

<span style="color:#0057ae;">static</span><span style="color:#141312;"> </span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *versions[] =</span>
<span style="color:#141312;">  {</span><span style="color:#bf0303;">"??"</span><span style="color:#141312;">,</span><span style="color:#bf0303;">"Express"</span><span style="color:#141312;">,</span><span style="color:#bf0303;">"ESX Server"</span><span style="color:#141312;">,</span><span style="color:#bf0303;">"GSX Server"</span><span style="color:#141312;">,</span><span style="color:#bf0303;">"Workstation"</span><span style="color:#141312;"> };</span>

<span style="color:#0057ae;">static</span><span style="color:#141312;"> </span><span style="color:#0057ae;">int</span><span style="color:#141312;"> vlen[] = {</span><span style="color:#b08000;">2</span><span style="color:#141312;">,</span><span style="color:#b08000;">7</span><span style="color:#141312;">,</span><span style="color:#b08000;">10</span><span style="color:#141312;">,</span><span style="color:#b08000;">10</span><span style="color:#141312;">,</span><span style="color:#b08000;">11</span><span style="color:#141312;">};</span>

<span style="color:#0057ae;">static</span><span style="color:#141312;"> </span><span style="color:#0057ae;">void</span><span style="color:#141312;"> segfault(){</span>
<span style="color:#141312;">    write(</span><span style="color:#b08000;">1</span><span style="color:#141312;">,</span><span style="color:#bf0303;">"Not a VMware box.</span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">"</span><span style="color:#141312;">,</span><span style="color:#b08000;">18</span><span style="color:#141312;">);</span>
<span style="color:#141312;">    exit(</span><span style="color:#b08000;">1</span><span style="color:#141312;">);</span>
<span style="color:#141312;">}</span>
<span style="color:#0057ae;">
int</span><span style="color:#141312;"> main(){</span>
<span style="color:#141312;">    </span><span style="color:#0057ae;">unsigned</span><span style="color:#141312;"> </span><span style="color:#0057ae;">int</span><span style="color:#141312;"> ok, ver, magic;</span>

<span style="color:#141312;">    signal(</span><span style="color:#b08000;">11</span><span style="color:#141312;">, segfault);</span>
<span style="color:#141312;">    __asm__ __volatile__ (</span><span style="color:#bf0303;">" \</span>
<span style="color:#bf0303;">         push %%ebx          </span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">\</span>
<span style="color:#bf0303;">         in %%dx, %%eax      </span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">\</span>
<span style="color:#bf0303;">         mov %%ebx, %1       </span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">\</span>
<span style="color:#bf0303;">         pop %%ebx           </span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">\</span>
<span style="color:#bf0303;">       "</span>
<span style="color:#141312;">       : </span><span style="color:#bf0303;">"=a"</span><span style="color:#141312;">(ok), </span><span style="color:#bf0303;">"=m"</span><span style="color:#141312;">(magic), </span><span style="color:#bf0303;">"=c"</span><span style="color:#141312;">(ver)</span>
<span style="color:#141312;">       : </span><span style="color:#bf0303;">"0"</span><span style="color:#141312;"> (MAGIC), </span><span style="color:#bf0303;">"c"</span><span style="color:#141312;"> (GETVERSION), </span><span style="color:#bf0303;">"d"</span><span style="color:#141312;"> (PORT)</span>
<span style="color:#141312;">    );</span>

<span style="color:#141312;">    <strong>if</strong> (magic == MAGIC) {</span>
<span style="color:#141312;">       write(</span><span style="color:#b08000;">1</span><span style="color:#141312;">, </span><span style="color:#bf0303;">"VMware "</span><span style="color:#141312;">, </span><span style="color:#b08000;">7</span><span style="color:#141312;">);</span>
<span style="color:#141312;">       <strong>if</strong> (ok == </span><span style="color:#b08000;">6</span><span style="color:#141312;">) {</span>
<span style="color:#141312;">               write(</span><span style="color:#b08000;">1</span><span style="color:#141312;">, versions[ver], vlen[ver]);</span>
<span style="color:#141312;">               write(</span><span style="color:#b08000;">1</span><span style="color:#141312;">, </span><span style="color:#bf0303;">"</span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">"</span><span style="color:#141312;">, </span><span style="color:#b08000;">1</span><span style="color:#141312;">);</span>
<span style="color:#141312;">       }</span>
<span style="color:#141312;">       <strong>else</strong> write(</span><span style="color:#b08000;">1</span><span style="color:#141312;">, </span><span style="color:#bf0303;">"unknown</span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">"</span><span style="color:#141312;">,</span><span style="color:#b08000;">8</span><span style="color:#141312;">);</span>
<span style="color:#141312;">    }</span>
<span style="color:#141312;">  <strong>  else</strong> write(</span><span style="color:#b08000;">1</span><span style="color:#141312;">, </span><span style="color:#bf0303;">"Not vmware</span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">"</span><span style="color:#141312;">,</span><span style="color:#b08000;">11</span><span style="color:#141312;">);</span>
<span style="color:#141312;">    exit(</span><span style="color:#b08000;">0</span><span style="color:#141312;">);</span>
<span style="color:#141312;">}

</span></pre>
<p style="text-align:justify;"><span style="color:#141312;">Isso foi só um motivacional. Isso é assunto para outros <em>posts</em>, ainda estou aprendendo as metodologias utilizadas em virtualização,  esperem em breve <em>posts</em> com temas interessantíssimos.<br />
</span></p>
Posted in programação Tagged: qemu, virtualização, vmware <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/483/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=483&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/05/23/vmware-esx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3392/3555130309_dc627dc869_o.png" medium="image">
			<media:title type="html">6. VMware ESX</media:title>
		</media:content>
	</item>
		<item>
		<title>Organizando o processo de compilação</title>
		<link>http://escovandobits.wordpress.com/2009/05/14/organizando-o-processo-de-compilacao/</link>
		<comments>http://escovandobits.wordpress.com/2009/05/14/organizando-o-processo-de-compilacao/#comments</comments>
		<pubDate>Thu, 14 May 2009 05:35:09 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=472</guid>
		<description><![CDATA[Esse post irá mostrar uma pequena dica para quem deseja começar a testar programas de terceiros de uma forma organizada, de modo a preservar os &#8220;originais&#8221; do sistema e permitir isolar as versões.
Na maioria dos casos quando testamos um programa pelo código-fonte, utilizamos a forma definida no autoconf, muito tradicional no sistema GNU, onde:  descompactamos, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=472&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Esse post irá mostrar uma pequena dica para quem deseja começar a testar programas de terceiros de uma forma organizada, de modo a preservar os &#8220;originais&#8221; do sistema e permitir isolar as versões.</p>
<p style="text-align:justify;"><span id="more-472"></span>Na maioria dos casos quando testamos um programa pelo código-fonte, utilizamos a forma definida no <a href="http://www.gnu.org/software/autoconf/" target="_blank">autoconf</a>, muito tradicional no sistema GNU, onde:  descompactamos, verificamos o sistema (<em>configure</em>),  compilamos (<em>make</em>) e copiamos para a pasta correspondente na hieraquia de pastas do sistema (<em>make install</em>).</p>
<pre style="padding-left:30px;"> tar zxvf programa.tar.gz
 cd programa
 ./configure
 make
 make install</pre>
<p style="text-align:justify;">Contudo, se estamos trabalhando com versões de desenvolvimento não queremos copiar os binários gerados para o sistema.  Pode ser que eu tenha uma versão X do software funcionando e a verão Y que desejo testar quebre a compatibildade com algum outro programa do sistema.  Vamos considerar o seguinte exemplo: suponha que você viu no site do projeto <a title="Site do Binutils" href="http://www.gnu.org/software/binutils/" target="_blank">binutils</a> que há um novo linker (<em>A new, faster, ELF only linker, still in beta test.</em>) e deseje compilar esta nova versão para testá-la. Utilizando o processo descrito acima você irá sobreescrever a versão distribuida pelos desenvolvedores da sua distribuição e não queremos que isso ocorra, principalmente quando o software está na versão beta do seu desenvolvimento. Vamos pensar outra maneira:</p>
<pre style="padding-left:30px;"> wget <a href="http://ftp.gnu.org/gnu/binutils/binutils-2.9.tar.gz" target="_blank">http://ftp.gnu.org/gnu/binutils/binutils-2.9.tar.gz</a>
 tar zxvf binutils-2.9.tar.gz
 cd binutils-2.9</pre>
<p style="text-align:justify;">Se olharmos as opções de ajuda (&#8211;help) do script configure vemos que podemos setar o prefixo da instalação:</p>
<pre style="padding-left:30px;"> --prefix=MYDIR          install into MYDIR [/usr/local]</pre>
<p style="text-align:justify;">Então basta escolher o diretório para colocar os executáveis.</p>
<pre style="padding-left:30px;"> ./configure --prefix=../install</pre>
<p style="text-align:justify;">Mas ainda há uma maneira, ao meu ver, mais organizada, principalmente se você está desenvolvendo um software. Depois de descompactar o programa, crie dois diretórios: um chamado <strong>build </strong>que irá conter os arquivos gerados pelo compilador e um <strong>install</strong> que terá apenas os executáveis.</p>
<pre style="padding-left:30px;"> cd ..
 mkdir build install</pre>
<p style="text-align:justify;">No final teremos os diretórios:</p>
<pre style="padding-left:30px;text-align:justify;"> .
 |-- binutils-2.9
 |-- build
 `-- install</pre>
<p style="text-align:justify;">Uma pasta com o código-fonte, outra com os arquivos objeto (resultado da etapa de compilação) e o executáveis.</p>
<pre style="padding-left:30px;"> cd build
 <strong>../binutils-2.9/configure --prefix=$(cd ../install &amp;&amp; pwd)</strong></pre>
<p style="text-align:justify;">Depois disso siga normalmente o processo de <em>make</em> e <em>make install</em> lembrando que os executáveis agora ficarão na pasta install/.  Essa metodologia é simples e muito útil,  principalmente quando estamos trabalhando com algum programa de controle de versão (ex.: git) e desenvolvendo testes em arquiteturas diferentes.</p>
<p style="text-align:justify;"><strong>Caso especial: kernel</strong></p>
<p style="text-align:justify;">O Linux não possui um script de configuração (<em>configure</em>) portanto é preciso especificar no &#8216;make&#8217; no local. Para manter a mesma árvore compilando para diferentes arquiteturas.</p>
<p style="text-align:justify;">
<pre style="padding-left:30px;">alias make-cross= \
"make O=../buildsh ARCH=sh CROSS_COMPILE=sh4-unknown-linux-gnu-"
make-cross menuconfig
make-cross</pre>
<p style="text-align:justify;padding-left:30px;">
<p style="text-align:justify;">
<p style="text-align:justify;"><span style="color:#888888;"><br />
</span></p>
Posted in Linux, programação  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/472/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=472&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/05/14/organizando-o-processo-de-compilacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>Emulando o Maemo (Diablo) no N800 com o Qemu</title>
		<link>http://escovandobits.wordpress.com/2009/04/27/emulando-o-maemo-diablo-no-n800-com-o-qemu/</link>
		<comments>http://escovandobits.wordpress.com/2009/04/27/emulando-o-maemo-diablo-no-n800-com-o-qemu/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 16:45:09 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Embarcados]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[n800]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[qemu]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=418</guid>
		<description><![CDATA[Como descrito no post anterior, o suporte do Qemu ao hardware do N800 permite emulá-lo. Vamos dar uma olhada nisso… 




Como é necessário fazer algumas modificações no código do Qemu para rodar a última versão (Diablo) vamos fazer o download do Qemu no repositório do projeto (o mantenedores do projeto migraram para o &#8220;git&#8221; nesse [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=418&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Como descrito no <a>post</a> anterior, o suporte do Qemu ao hardware do N800 permite emulá-lo. Vamos dar uma olhada nisso… <img class="wp-smiley" src="http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)" /></p>
<dl class="wp-caption aligncenter">
<dt class="wp-caption-dt"><img class="size-full wp-image-419" title="Emulando o N800 e rodando o OS 2008 (Diablo)" src="http://escovandobits.files.wordpress.com/2009/04/full_boot6.png?w=468&#038;h=292" alt="Emulando o N800 e rodando o OS 2008 (Diablo)" width="468" height="292" /></dt>
</dl>
<p><span id="more-418"></span></p>
<p>Como é necessário fazer algumas modificações no código do Qemu para rodar a última versão (Diablo) vamos fazer o <em>download</em> do Qemu no repositório do projeto (o mantenedores do projeto migraram para o &#8220;git&#8221; nesse mês)</p>
<h2>1. Instalando o QEmu</h2>
<pre style="padding-left:30px;"># cd ~/qemu-n800
# git clone git://git.savannah.nongnu.org/qemu.git</pre>
<p>Para rodar a última versão do Maemo (Diablo) é necessário alterar a tabela de partições:</p>
<pre style="padding-left:30px;"># cd qemu
# git checkout -b n800-diablo
# wget http://tinyurl.com/cuyx4s
# git apply 0001-Resized-N800-partition-table.patch

# cd ~/qemu-n800
# mkdir build install
# cd build
# ../qemu/configure \
--target-list="arm-softmmu arm-linux-user armeb-linux-user" \
--prefix=$(cd ../install &amp;&amp; pwd)
# make
# make install

# ../install/bin/qemu-system-arm -h | head -n 1
QEMU PC emulator version 0.10.50, \
Copyright (c) 2003-2008 Fabrice Bellard</pre>
<h2>2. Download Nokia N800 Maemo Firmware</h2>
<ul>
<li>Vá até o endereço <a href="http://maemo.org/community/wiki/HOWTO_FlashLatestNokiaImageWithLinux/" target="_blank">http://maemo.org/community/wiki/HOWTO_FlashLatestNokiaImageWithLinux/</a></li>
<li>Faça o<em> download</em> selecionado a versão apropriada (<em>Software Edition 2008 version 5.2008.43-7 for Nokia N800</em>)<br />
Observação: <span style="color:#ff0000;">Isso é um ponto que me incomodou, infelizmente você irá precisar de um <em>serial number</em> do N800 &#8212; se você não tem um Nokia N800 agora é o momendo para adquirir um&#8230; </span><span style="color:#ff0000;">Como não investiguei as considerações legais a respeito (nem se é uma violação a GPL). E como não vi ninguém na internet disponibilizando, por enquanto não vou disponibilizar a minha.  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
</span></li>
<li><em>Firmware</em> em <a href="http://tablets-dev.nokia.com/nokia_N800.php" target="_blank">http://tablets-dev.nokia.com/nokia_N800.php</a> (N800)
<ul>
<li>mkdir ~/qemu-n800/os2008/</li>
<li>Irei considerar o nome  RX-34_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin</li>
</ul>
</li>
<li>Faça o <em>download</em> do<em> Nokia Nseries Firmware Flashing Tool</em> <em>version 3</em>
<ul>
<li>Link em <a href="http://tablets-dev.nokia.com/d3.php" target="_blank">http://tablets-dev.nokia.com/d3.php</a></li>
<li>Salve em ~/qemu-n800</li>
<li>Esse ponto é importante, você irá precisar <strong>reinstalar</strong> (faça o backup dos seus dados!) o sistema no seu N800 para pegar alguns dados de configuração de uma partição do N800, o comando que utilizei para gravar a <em>flash</em> está descrito no item 3)</li>
</ul>
</li>
</ul>
<h2>3. Atualizando o <em>firmware</em> no dispositivo</h2>
<ul>
<li>Certifique-se que a bateria esteja carregada e deslige o N800.</li>
<li>Conecte o cabo USB (não ligue o aparelho)</li>
<li>Execute o comando abaixo,  para emular o N800 é preciso setar uma <em>flag</em> que os desenvolvedores utilizam quando estão desenvolvendo. (Leia o item [3] no final para maiores informações)</li>
</ul>
<pre style="padding-left:30px;"><strong># mkdir ~/qemu-n800/os2008/diablo/
# cd </strong><strong><strong>~/qemu-n800/os2008/diablo/
</strong></strong><strong># ../../flasher-3.0 --set-rd-flags=no-lifeguard-reset \
-u -R -f -F ../RX-34_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin</strong></pre>
<pre style="padding-left:30px;">SW version in image: RX-34_DIABLO_5.2008.43-7_PR_MR0

(...)

Unpacking kernel image to file \'zImage\'...
Unpacking initfs image to file \'initfs.jffs2\'...
Unpacking rootfs image to file \'rootfs.jffs2\'...

(...)
<span style="color:#ff0000;">
Suitable USB device not found, waiting</span></pre>
<ul>
<li>Pressione o botão <em>Power</em> e <em>Home</em> e <strong>mantenha-os até o fim do processo</strong>. Lembre-se que seu usuário irá precisar de ter permissão para escrever na USB ou então utilize o &#8220;root&#8221;.</li>
</ul>
<pre style="padding-left:30px;">USB device found found at bus 002, device address 007
Found device RX-34, hardware revision 1302
NOLO version 1.1.16
Version of \'sw-release\': RX-34_DIABLO_5.2008.43-7_PR_MR0
Sending xloader image (8 kB)...100% (8 of 8 kB, avg. 2218 kB/s)
Sending secondary image (96 kB)...
100% (96 of 96 kB, avg. 12093 kB/s)
Flashing bootloader... done.
Sending kernel image (1500 kB)...
100% (1500 of 1500 kB, avg. 17449 kB/s)
Flashing kernel... done.
Sending initfs image (2273 kB)...
100% (2273 of 2273 kB, avg. 19264 kB/s)
Flashing initfs... done.
Sending and flashing rootfs image (134912 kB)...
100% (134912 of 134912 kB, avg. 7369 kB/s)
Finishing flashing... done<strong>
Set R&amp;D flags: 0008</strong></pre>
<p>No meu caso ele não reiniciou automaticamente, precisei desconectar o cabo usb e desligá-lo/ligá-lo para funcionar.</p>
<h2>4. Preparando os arquivos</h2>
<p>Note que além do dispositivo gravado seu diretório conterá alguns arquivos  (~/qemu-n800/os2008/diablo):</p>
<pre style="padding-left:30px;">2nd.bin-RX-34:1301,1302,1501,1502,1503,1504,1601,1602
secondary.bin-RX-34:1301,1302,1501,1502,1503,1504,1601,1602
xloader.bin-RX-34:1301,1302,1501,1502,1503,1504,1601,1602
initfs.jffs2
rootfs.jffs2
zImage</pre>
<ul>
<li>Intale o  &#8220;Poky Linux&#8221; Project&#8217;s Flash Filesystem Tool
<ul>
<li># cd ~/qemu-n800</li>
<li><tt> # svn cat <a>http://svn.o-hand.com/repos/poky/trunk/scripts/poky-nokia800-flashutil</a> &gt; poky-nokia800-flashutil</tt></li>
<li><tt>chmod +x </tt><tt>poky-nokia800-flashutil</tt></li>
<li><tt>Edite o arquivo </tt><tt>poky-nokia800-flashutil e descomente a linha referente ao rootfs_offset<br />
</tt></li>
</ul>
</li>
</ul>
<pre><tt># This value should be selected for Diablo based firmwares
# It also require patching qemu to get proper size of flash partitions
# (by default qemu has Chinook split).
</tt>rootfs_offset=3328 # diablo</pre>
<ul>
<li>Extraia a partição de configuração do seu Nokia N800
<ul>
<li>Você irá precisar instalar algum servidor SSH, disponível pelo Gerenciador de aplicativos, com o catálogo <em>maemo Extras </em>ativado .</li>
<li>mkdir ~/qemu-n800/qemu-img</li>
<li><tt>ssh root@&lt;N800 IP&gt; cat /dev/mtd1ro &gt; config.mtd</tt>
<ul>
<li><tt>recomendo instalar também o aplicativo HomeIP para verificar seu endereço.</tt></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><tt><br />
</tt></p>
<ul>
<li>Utilizaremos o<em> &#8220;Poky Linux&#8221; Project&#8217;s Flash Filesystem Tool</em> para criar um sistema de arquivos para o sistema emulado:</li>
</ul>
<pre style="padding-left:30px;"># <tt>cd ~/qemu-n800/qemu-img
</tt><tt>#../poky-nokia800-flashutil ../os2008/diablo/initfs.jffs2 \
qemu-n800.img initfs
</tt><tt>#../poky-nokia800-flashutil config.mtd qemu-n800.img config
#../poky-nokia800-flashutil ../os2008/diablo/rootfs.jffs2 \
qemu-n800.img rootfs</tt></pre>
<ul>
<li>Inicie o Qemu com as seguintes opções:</li>
</ul>
<pre style="padding-left:30px;"># <tt>cd ~/qemu-n800/qemu-img
#<strong> ~/qemu-n800/qemu/install/bin/qemu-system-arm \</strong></tt><strong><tt>
-kernel ../os2008/zImage </tt><tt>-M n800 \
-mtdblock qemu-n800.img \
-m 130 \
-append "root=/dev/mtdblock3 rootfstype=jffs2"

</tt></strong></pre>
<p><strong><tt></tt></strong><tt>Para fazer o teclado funcionar adicione no final do comando:</tt><strong><tt> -usb -usbdevice keyboard</tt></strong></p>
<div id="attachment_441" class="wp-caption aligncenter" style="width: 477px"><img class="size-full wp-image-441" title="Bootstrap do N800 no QEmu" src="http://escovandobits.files.wordpress.com/2009/04/boot2.png?w=467&#038;h=294" alt="Bootstrap do N800 no QEmu" width="467" height="294" /><p class="wp-caption-text">Bootstrap do N800 no QEmu</p></div>
<div id="attachment_452" class="wp-caption aligncenter" style="width: 477px"><img class="size-full wp-image-452" title="Imagem padrão da Nokia" src="http://escovandobits.files.wordpress.com/2009/04/boot3.png?w=467&#038;h=294" alt="Imagem padrão da Nokia" width="467" height="294" /><p class="wp-caption-text">Imagem padrão da Nokia</p></div>
<div id="attachment_453" class="wp-caption aligncenter" style="width: 477px"><img class="size-full wp-image-453" title="N800 no QEmu :-)" src="http://escovandobits.files.wordpress.com/2009/04/boot7.png?w=467&#038;h=294" alt="N800 no QEmu :-)" width="467" height="294" /><p class="wp-caption-text">N800 no QEmu <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p></div>
<h2>5. Considerações e Futuro</h2>
<ul>
<li>A emulação mostrou-se um pouco lenta. Na primeira vez que bootou senti meio devagar, mas nos outros <em>boots </em>achei até que razozável a velocidade.</li>
<li>Preciso arrumar uma forma de colocar um &#8220;&#8216;ponteiro&#8221; para a caneta <em>stylus</em>, pois embora o mouse funcione ele não mostra a posição  na tela.</li>
<li>A alteração no código do Qemu foi específica para a ultima versão do OS 2008 (Diablo), acredito que o Qemu irá incorporar um maneira para permitir multiplas versões do Maemo sem precisar alterar o código.</li>
<li>Configurar a rede.</li>
</ul>
<h2>6. Recomendo ler o que já foi publicado a respeito</h2>
<p>[1] <a href="http://www.rkeene.org/projects/info/wiki/106" target="_blank">http://www.rkeene.org/projects/info/wiki/106</a></p>
<p>[2] <a href="http://marcin.juszkiewicz.com.pl/2008/04/11/nokia-n800-emulation/" target="_blank">http://marcin.juszkiewicz.com.pl/2008/04/11/nokia-n800-emulation/</a></p>
<p>[3] <a href="http://marcin.juszkiewicz.com.pl/2008/08/01/nokia-n8x0-emulation-part-ii/" target="_blank">http://marcin.juszkiewicz.com.pl/2008/08/01/nokia-n8&#215;0-emulation-part-ii/</a></p>
Posted in embedded, Linux, Sistemas Embarcados Tagged: Linux, maemo, n800, nokia, qemu <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/418/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=418&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/04/27/emulando-o-maemo-diablo-no-n800-com-o-qemu/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>

		<media:content url="http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif" medium="image">
			<media:title type="html">;-)</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/full_boot6.png" medium="image">
			<media:title type="html">Emulando o N800 e rodando o OS 2008 (Diablo)</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/boot2.png" medium="image">
			<media:title type="html">Bootstrap do N800 no QEmu</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/boot3.png" medium="image">
			<media:title type="html">Imagem padrão da Nokia</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/boot7.png" medium="image">
			<media:title type="html">N800 no QEmu :-)</media:title>
		</media:content>
	</item>
		<item>
		<title>Breve análise do N800</title>
		<link>http://escovandobits.wordpress.com/2009/04/25/breve-analise-n800/</link>
		<comments>http://escovandobits.wordpress.com/2009/04/25/breve-analise-n800/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 08:41:00 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Embarcados]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[n800]]></category>
		<category><![CDATA[maemo]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=377</guid>
		<description><![CDATA[Resolvi comprar numa promoção do Submarino.com.br um N800 para dar de presente a minha mãe no dia das mães. Enquanto o dia &#8220;oficialmente&#8221; não chega, vou publicar algumas coisas que andei brincando.

 O N800 roda uma versão adaptada do GNU/Linux chamada Maemo (OS 2007). A primeira coisa que fiz depois de dar uma fuçada inicial [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=377&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Resolvi comprar numa promoção do Submarino.com.br um <a href="http://en.wikipedia.org/wiki/N800" target="_blank">N800</a> para dar de presente a minha mãe no <em>dia das mães</em>. Enquanto o dia &#8220;oficialmente&#8221; não chega, vou publicar algumas coisas que andei brincando.</p>
<p style="text-align:center;">
<div id="attachment_378" class="wp-caption aligncenter" style="width: 160px"><img class="size-thumbnail wp-image-378" title="screenshot01" src="http://escovandobits.files.wordpress.com/2009/04/screenshot01.png?w=150&#038;h=90" alt="Tela do Os 2008" width="150" height="90" /><p class="wp-caption-text">Tela do OS 2008</p></div>
<p style="text-align:justify;"><span id="more-377"></span> O N800 roda uma versão adaptada do GNU/Linux chamada <a href="http://en.wikipedia.org/wiki/Maemo_(operating_system)" target="_blank">Maemo</a> (OS 2007). A primeira coisa que fiz depois de dar uma <em>fuçada</em> inicial foi atualizar o <em>firmware </em>para a versão OS 2008.  No meu notebook rodando Gentoo esse processo foi praticamente direto seguindo os <a href="http://wiki.maemo.org/Updating_the_tablet_firmware" target="_blank">passos</a> do wiki do Maemo:</p>
<p style="text-align:justify;"><span style="color:#ff0000;">./flasher-3.0 -F RX-34_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin -f -R</span><br style="color:#ff0000;" /></p>
<pre style="padding-left:30px;"><span style="color:#000000;font-family:courier new,monospace;">flasher v0.8.7 (Oct 17 2006)</span></pre>
<pre style="padding-left:30px;"><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">SW version in image: RX-34_DIABLO_5.2008.43-7_PR_MR0</span></pre>
<pre style="text-align:justify;padding-left:30px;">(...)</pre>
<pre style="text-align:justify;padding-left:30px;"><span style="font-family:courier new,monospace;">Flashing bootloader... done.</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">Sending kernel image (1500 kB)...</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">100% (1500 of 1500 kB, avg. 10874 kB/s)</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">Flashing kernel... done.</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">Sending initfs image (2273 kB)...</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">100% (2273 of 2273 kB, avg. 22286 kB/s)</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">Flashing initfs... done.</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">Sending and flashing rootfs image (134912 kB)...</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">100% (134912 of 134912 kB, avg. 7367 kB/s)</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">Finishing flashing... done

</span></pre>
<p>Com a versão nova percebe-se imediatamente as melhorias comparadas a versão antiga. A interface gráfica está muito mais amigável e o suporte está mais refinado.</p>
<div id="attachment_381" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-381" title="screenshot02" src="http://escovandobits.files.wordpress.com/2009/04/screenshot02.png?w=300&#038;h=180" alt="Browser" width="300" height="180" /><p class="wp-caption-text">Browser</p></div>
<p style="text-align:justify;">O <em>browser</em> utiliza uma <a href="http://www.mozilla.org/newlayout/" target="_blank">engine</a> do Mozilla, consegui abrir sites que rodam <em>flash</em> bem como acessar sites de bancos. É difícil enquadrar o N800 em um grupo específico, pois ele <strong>não</strong> é um <em>smartphone</em>. Contudo, se compararmos com outros dispositivos atuais e similares (pelo menos em alguma funcionalidade) como o iPhone (Mac OSX) ou o HTC G1 (Android) percebe-se que ele é um dispositivo mais aberto aos entusiastas que desejam &#8220;fuçar&#8221;.  O site Ars Technica fez uma breve <a href="http://arstechnica.com/apple/news/2007/09/quick-comparison-n800-v-ipod-touch.ars" target="_blank">comparação</a> com o iPod Touch. O usuário de alguma distribuição GNU/Linux baseada no GNOME vai sentir-se familiarizado com os aplicativos disponíveis: pidgin, gnumeric, evince, x-chat, etc; todos previamente <a href="http://live.gnome.org/Hildon" target="_blank">hildonizados</a> (adequados ao tamanho e  integrado a para melhor usabilidade da tela). Fiquei impressionado com o suporte a outros aplicativos básicos como mplayer, skype, gizmo e <em>codecs</em> como ogg. Tecnicamente qualquer aplicativo que rode na sua distribuição pode ser portável para o N800.</p>
<p style="text-align:justify;">Também achei fácil a maneira de instalar a remover programas através do <em>Gerenciador de aplicativos</em>,  lá você pode selecionar numa lista, fazer o download e instalar/remover programas.</p>
<p style="text-align:justify;"><img class="aligncenter size-medium wp-image-386" title="Gerenciador de aplicativos" src="http://escovandobits.files.wordpress.com/2009/04/screenshot031.png?w=300&#038;h=180" alt="Gerenciador de aplicativos" width="300" height="180" /></p>
<p style="text-align:justify;">Um programa que achei interessante é o media center <a href="http://openbossa.indt.org/canola/" target="_blank">Canola2</a> que foi desenvolvido em Python com as <a href="http://en.wikipedia.org/wiki/Enlightenment_Foundation_Libraries" target="_blank">bibliotecas</a> gráficas do Enlightment.</p>
<p style="text-align:justify;"><img class="aligncenter size-medium wp-image-402" title="Canola2 com a extensão para videos no Youtube" src="http://escovandobits.files.wordpress.com/2009/04/screenshot07.png?w=300&#038;h=180" alt="Canola2 com a extensão para videos no Youtube" width="300" height="180" /></p>
<p style="text-align:justify;">
<p style="text-align:justify;">Após instalar alguns aplicativos como o ssh (<em>openssh server/client</em>) e testar o emulador de terminal (<em>osso_xterm</em>) chegou a hora de pegar algumas informações do sistema. Comecei pelas informações da CPU em /proc/cpuinfo.</p>
<p style="text-align:justify;">Primeiro com o emulador do terminal:</p>
<p style="text-align:justify;">
<p style="text-align:center;"><img class="size-medium wp-image-388 aligncenter" title="'cpuinfo' no X Terminal" src="http://escovandobits.files.wordpress.com/2009/04/screenshot04.png?w=300&#038;h=180" alt="'cpuinfo' no X Terminal" width="300" height="180" /></p>
<p style="text-align:center;">
<p style="text-align:justify;">Agora vejam a saída pelo SSH:</p>
<p style="text-align:center;">
<p style="text-align:center;"><img class="size-medium wp-image-389 aligncenter" title="'cpuinfo' via ssh" src="http://escovandobits.files.wordpress.com/2009/04/bat1.png?w=300&#038;h=210" alt="'cpuinfo' via ssh" width="300" height="210" /></p>
<p style="text-align:justify;">Reparem na diferença do valor dos <strong>BogoMIPS</strong> no ssh (164.36) e no X Terminal (397.46). Não pensei ainda o porquê dessa diferença, mas vou procurar.</p>
<p style="text-align:justify;">Peguei outras informações que bateram nas duas análises, como a memória <em>flash</em> está particionada:</p>
<p style="text-align:justify;padding-left:30px;"><span style="font-family:courier new,monospace;">dev:    size   erasesize  name</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">mtd0: 00020000 00020000 &#8220;bootloader&#8221;</span> <span style="color:#ff0000;">(128KB)</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">mtd1: 00060000 00020000 &#8220;config&#8221; <span style="color:#ff0000;">(</span></span><span style="color:#ff0000;">384KB)</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">mtd2: 00200000 00020000 &#8220;kernel&#8221;</span> <span style="color:#ff0000;">(2MB)</span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">mtd3: 00400000 00020000 &#8220;initfs&#8221; <span style="color:#ff0000;">(4MB)</span></span><br style="font-family:courier new,monospace;" /><span style="font-family:courier new,monospace;">mtd4: 0f980000 00020000 &#8220;rootfs&#8221; <span style="color:#ff0000;">(249.5MB)</span></span></p>
<p style="text-align:justify;">Fiz o <em>dump</em> mas ainda não analisei efetivamente há alguma informação útil. O sistema executa o kernel 2.6.21 (cmdline: root=1f03 rootfstype=jffs2 ro console=tty0 console=ttyMTD5) e o máximo que consegui de informações iniciais do<em> dmesg </em>foi a partir do instante 0.687500 (segundos), ou seja, não consegui aquelas informações realmente do começo (a partir do instante zero). Contudo dá para ter idéia de algumas coisas, como por exemplo, que os desenvolvedores utilizam o <a href="http://www.nongnu.org/qemu/" target="_blank">Qemu</a> para fazer os testes enquanto desenvolvem.</p>
<pre style="text-align:justify;"><span style="font-family:courier new,monospace;">[    0.687500]
/home/bifh4/diablo-uarm-prereleased.gcc34qemu/work/\
kernel-diablo-2.6.21/kernel-source-diablo/drivers/\
usb/input/hid-core.c: v2.6:USB HID core driver                                                                                                                                                       
[    0.687500]
/home/bifh4/diablo-uarm-prereleased.gcc34qemu/work/\
kernel-diablo-2.6.21/kernel-source-diablo/drivers/\
usb/net/rtl8150.c: rtl8150 based usb-ethernet driver v0.6.2                                                                                                                      
</span></pre>
<p style="text-align:justify;">Isso é fato pois o a última versão estável do Qemu (0.10.0) suporta a emulação do <em>hardware</em> do N8&#215;0. Reparem que é a mesma plataforma tanto no N800 como no N810.</p>
<p style="text-align:justify;padding-left:30px;"><span style="font-family:courier new,monospace;">#qemu-system-arm -M ? | grep Nokia</span></p>
<pre style="padding-left:30px;"><span style="font-family:courier new,monospace;">n800       Nokia N800 tablet aka. RX-34 (OMAP2420)
n810       Nokia N810 tablet aka. RX-44 (OMAP2420)</span></pre>
<p style="text-align:justify;">Há sites <a href="http://www.rkeene.org/projects/info/wiki/106" target="_blank">ensinando</a> como se faz isso e espero escrever alguma coisa a respeito no futuro haja visto que o N800 é um presente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align:justify;">Essa foi uma análise breve, de um dia, no N800. Talvez um ponto crítico seja não ter o suporte a redes GSM (GPRS) mas isso hoje pode ser contornado utilizando um celular e fazendo a ponte via <em>bluetooth</em>. Além disso a plataforma <a href="http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?contentId=4671&amp;navigationId=11990&amp;templateId=6123" target="_blank">OMAP</a> da TI é poderosa o suficiente para  utilizar e desenvolver aplicativos que precisem de desempenho (dentro de certo limites é claro) e o preço das promoções no Brasil está fazendo valer a pena.</p>
<p style="text-align:justify;">
<div id="attachment_416" class="wp-caption aligncenter" style="width: 478px"><img class="size-full wp-image-416" title="N800 + Teclado bluetooth" src="http://escovandobits.files.wordpress.com/2009/04/26042009886.jpg?w=468&#038;h=351" alt="N800 + Teclado bluetooth" width="468" height="351" /><p class="wp-caption-text">N800 + Teclado bluetooth</p></div>
Posted in embedded, Linux, Sistemas Embarcados Tagged: Linux, maemo, n800, nokia <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/377/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=377&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/04/25/breve-analise-n800/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/screenshot01.png?w=150" medium="image">
			<media:title type="html">screenshot01</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/screenshot02.png?w=300" medium="image">
			<media:title type="html">screenshot02</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/screenshot031.png?w=300" medium="image">
			<media:title type="html">Gerenciador de aplicativos</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/screenshot07.png?w=300" medium="image">
			<media:title type="html">Canola2 com a extensão para videos no Youtube</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/screenshot04.png?w=300" medium="image">
			<media:title type="html">'cpuinfo' no X Terminal</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/bat1.png?w=300" medium="image">
			<media:title type="html">'cpuinfo' via ssh</media:title>
		</media:content>

		<media:content url="http://escovandobits.files.wordpress.com/2009/04/26042009886.jpg" medium="image">
			<media:title type="html">N800 + Teclado bluetooth</media:title>
		</media:content>
	</item>
		<item>
		<title>Motorola 6800 &#8211; Divisão Inteira</title>
		<link>http://escovandobits.wordpress.com/2009/04/05/motorola-6800-divisao-inteira/</link>
		<comments>http://escovandobits.wordpress.com/2009/04/05/motorola-6800-divisao-inteira/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 14:25:11 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[6800]]></category>
		<category><![CDATA[efei]]></category>
		<category><![CDATA[microprocessadores]]></category>
		<category><![CDATA[unifei]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=322</guid>
		<description><![CDATA[O Motorola 6800 não possui uma instrução específica para divisão de dois números. Uma solução simples é fazer a divisão através de múltiplas subtrações. Contudo, podemos pensar mecanismos mais eficientes. Uma solução  esta descrita no código-abaixo. Esse algoritmo é mais eficiente na maiora dos casos, pois com apenas 8 deslocamentos efetua a divisão de dois [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=322&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">O <a href="http://en.wikipedia.org/wiki/Motorola_6800" target="_blank">Motorola 6800</a> não possui uma instrução específica para divisão de dois números. Uma solução simples é fazer a divisão através de múltiplas subtrações. Contudo, podemos pensar mecanismos mais eficientes. Uma solução  esta descrita no código-abaixo. Esse algoritmo é mais eficiente na maiora dos casos, pois com apenas 8 deslocamentos efetua a divisão de dois números de 8 bits.</p>
<p style="text-align:justify;"><span id="more-322"></span>O primeiro caso é quando temos números absolutos.</p>
<pre style="text-align:justify;">                <strong>LDAA</strong> Divisor       
<strong>                BEQ</strong> __end       <span style="color:#ff0000;"> ; caso Divisor = 0</span>

               <span style="color:#ff0000;"> ; o contador ira deslocar 8 vezes,
                ; mas como já começo decrementando
                ; carrego com 9.</span>

                <strong>LDAA</strong> #$09      
                <strong>STAA</strong> Contador
                <strong>CLRA</strong>
                <strong>BRA</strong> <span style="color:#0000ff;">loop_div</span>

<span style="color:#0000ff;">empurra_zero:</span>   <strong>ASL</strong> Resposta  

<span style="color:#0000ff;">loop_div:</span>       <strong>DEC</strong> Contador  <span style="color:#ff0000;">; decrementa contador</span>
                <strong>BEQ</strong> <span style="color:#0000ff;">__end</span>

                <strong>ASL</strong> Dividendo <span style="color:#ff0000;">; desloca o dividendo p/ Carry</span>
                <strong>ROLA</strong>          <span style="color:#ff0000;">; desloga do Carry p/ ACCA</span>
                <strong>CMPA</strong> Divisor  <span style="color:#ff0000;">;</span><span style="color:#ff0000;"> Acumulador - Dividor &gt; 0</span>

                <strong>BCS</strong> <span style="color:#0000ff;">empurra_zero</span>

                <strong>SEC</strong>           <span style="color:#ff0000;">; set carry </span>
                <strong>ROL</strong> Resposta  <span style="color:#ff0000;">; empurra '1' na resposta</span>
                <strong>SUBA</strong> Divisor
                <strong>BRA</strong> <span style="color:#0000ff;">loop_div</span>

<span style="color:#0000ff;">__end</span>:          <strong>NOP</strong></pre>
<p style="text-align:justify;">Se os números forem sinalizados precisamos considerar isso na conta, portanto antes de dividir o número devemos verificar seu sinal. O código abaixo utiliza duas posições de memória para o sinal do número.  No final é feito uma OU-Exclusivo para definir qual sinal da resposta.</p>
<pre>            <strong>CLR</strong> Neg_Divisor
            <strong>CLR</strong> Neg_Dividendo               <strong>
            LDAA</strong> Divisor
            <strong>BEQ</strong> __end       <span style="color:#ff0000;"> ; caso Divisor = 0</span>
            <strong>BPL</strong> skip

            <strong>NEG</strong> Divisor
            <strong>DEC</strong> Neg_Divisor  <span style="color:#ff0000;">; Neg_Divisor = 1 (0xff)</span>

<span style="color:#0000ff;">skip:</span>       <strong>LDAA</strong> Dividendo
            <strong>BPL</strong> <span style="color:#0000ff;">__div</span>        <span style="color:#ff0000;">; Neg_Dividendo = 1 (0xff)</span>

            <strong>NEG</strong> Dividendo
            <strong>DEC</strong> Neg_Dividendo

         <span style="color:#ff0000;">   ; o contador ira deslocar 8 vezes, mas
            ; como já começo decrementando
            ; carrego com 9.</span>

<span style="color:#0000ff;">__div:</span>          <strong>LDAA</strong> #$09      
                <strong>STAA</strong> Contador
                <strong>CLRA</strong>
                <strong>BRA</strong> <span style="color:#0000ff;">loop_div</span>

<span style="color:#0000ff;">empurra_zero:</span>   <strong>ASL</strong> Resposta  

<span style="color:#0000ff;">loop_div: </span>      <strong>DEC</strong> Contador  <span style="color:#ff0000;"> ; decrementa contador</span>
                <strong>BEQ</strong> <span style="color:#0000ff;">__end</span>

                <strong>ASLA</strong> Dividendo <span style="color:#ff0000;">; desloca o dividendo p/ Carry</span>
                <strong>ROLA</strong>           <span style="color:#ff0000;">; desloga do Carry p/ ACCA</span>
                <strong>CMPA</strong> Divisor   <span style="color:#ff0000;">; Acumulador - Dividor &gt; 0</span>

                <strong>BCS</strong> <span style="color:#0000ff;">empurra_zero</span>

                <strong>SEC</strong>          <span style="color:#ff0000;"> ; set carry </span>
                <strong>ROL</strong> Resposta  <span style="color:#ff0000;">; empurra '1' na resposta</span>
                <strong>SUB</strong> Divisor
                <strong>BRA</strong> <span style="color:#0000ff;">loop_div</span>

<span style="color:#0000ff;">__end:   </span>       <strong>LDAA</strong> Neg_Divisor
                <strong>EORA</strong> Neg_Dividendo 
              <span style="color:#ff0000;">  ; a lógica da XOR garante o estudo dos sinais</span>
                <strong>BPL</strong> <span style="color:#0000ff;">_end</span> 

                <strong>NEG</strong> Resposta          
<span style="color:#0000ff;">_end: </span>         <strong> NOP    </strong></pre>
Posted in programação Tagged: 6800, efei, microprocessadores, unifei <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/322/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=322&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/04/05/motorola-6800-divisao-inteira/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>Timer no PyQT</title>
		<link>http://escovandobits.wordpress.com/2009/03/27/timer_pyqt/</link>
		<comments>http://escovandobits.wordpress.com/2009/03/27/timer_pyqt/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 16:48:42 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=305</guid>
		<description><![CDATA[Quem programa em Python provavelmente já precisou fazer alguma coisa com threads. Contudo quando estamos trabalhando com PyQT há alguns incovenientes em utilizar as threads da API do Python, principalmente quando temos interfaces gráficas. Recentemente tive problemas para fazer uma função que executasse determinada ação após um tempo pré-definido em segundos. Pois quando enquanto a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=305&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Quem programa em Python provavelmente já precisou fazer alguma coisa com <a title="Python Threading" href="http://docs.python.org/library/threading.html" target="_blank">threads</a>. Contudo quando estamos trabalhando com PyQT há alguns incovenientes em utilizar as threads da API do Python, principalmente quando temos interfaces gráficas. Recentemente tive problemas para fazer uma função que executasse determinada ação após um tempo pré-definido em segundos. Pois quando enquanto a thread não terminasse sua execução a janela gráfica não aparecia.  Encontrei duas maneiras para solucionar,  a primeira utilizando <a href="http://doc.trolltech.com/4.4/qthread.html" target="_blank">QThread</a> e uma muito mais simples usando <a href="http://doc.trolltech.com/4.4/qtimer.html" target="_blank">QTimer</a>,  fica o registro das duas maneiras:</p>
<p style="text-align:justify;"><span id="more-305"></span></p>
<pre><span style="color:#ff80e0;">from</span><span style="color:#141312;"> PyQt4 </span><span style="color:#ff80e0;">import</span><span style="color:#141312;"> *</span>
<span style="color:#ff80e0;">from</span><span style="color:#141312;"> PyQt4.QtCore </span><span style="color:#ff80e0;">import</span><span style="color:#141312;"> *</span>

<span style="color:#141312;"><strong>class</strong> MyTimer(QThread):</span>
<span style="color:#141312;">	<strong>def</strong> </span><span style="color:#000e52;"><strong>__init__</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">,parent = </span><span style="color:#006e28;">None</span><span style="color:#141312;">):</span>
<span style="color:#141312;">		QThread.</span><span style="color:#000e52;"><strong>__init__</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">,parent)</span>

<span style="color:#141312;">	<strong>def</strong> run(</span><span style="color:#006e28;">self</span><span style="color:#141312;">):</span>
<span style="color:#141312;">		<strong>while</strong> </span><span style="color:#b08000;">1</span><span style="color:#141312;">:</span>
<span style="color:#141312;">		</span><span style="color:#888786;"><em># a cada 'self.tempo' segundos o sinal é emitido e
                  nós tratamos na outra classe. Exemplo</em></span>:
<span style="color:#141312;">			</span><span style="color:#006e28;">self</span><span style="color:#141312;">.<strong>emit</strong>(</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"sinal_atualiza()"</span><span style="color:#141312;">))</span>
<span style="color:#141312;">			</span><span style="color:#006e28;">self</span><span style="color:#141312;">.sleep(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.tempo)</span>

<span style="color:#141312;">	<strong>def</strong> Timer(</span><span style="color:#006e28;">self</span><span style="color:#141312;">,t=</span><span style="color:#b08000;">5</span><span style="color:#141312;">):</span>
<span style="color:#141312;">		</span><span style="color:#006e28;">self</span><span style="color:#141312;">.tempo = t</span>
<span style="color:#141312;">		</span><span style="color:#006e28;">self</span><span style="color:#141312;">.start()

</span></pre>
<p style="text-align:justify;"><span style="color:#141312;">Depois, na sua classe basta que gerencia a interface gráfica, basta instanciar o objeto e tratar os sinais definidos em MyTimer(), você pode definir quantos sinais forem necessários:</span></p>
<pre><span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer = MyTimer()</span>
<span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer.Timer(3)</span> <span style="color:#888786;"><em><em># 3 segundos

</em></em></span><span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.</span><span style="color:#0095ff;"><strong>connect</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer,
                       QtCore.</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"sinal_stualiza()"</span><span style="color:#141312;">),
                       </span><span style="color:#006e28;">self</span><span style="color:#141312;">.atualiza)</span>
<span style="color:#141312;">	  </span><span style="color:#888786;"><em># caso seja necessario executar algo após o termino da
          # therad (não é o caso </em></span><span style="color:#888786;"><em>do exemplo acima que o while
          # "trava" na função run()</em></span>
<span style="color:#141312;">	  </span><span style="color:#006e28;">self</span><span style="color:#141312;">.</span><span style="color:#0095ff;"><strong>connect</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer,
                       QtCore.</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"finished()"</span><span style="color:#141312;">),
                       </span><span style="color:#006e28;">self</span><span style="color:#141312;">.finaliza)</span></pre>
<p>Contudo existe uma maneira <strong>muito</strong> mais fácil de fazer um timer utilizando PyQT, usando a <a href="http://doc.trolltech.com/4.4/qtimer.html" target="_blank">QTimer</a></p>
<pre><span style="color:#141312;">	</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer = QtCore.QTimer()

</span><span style="color:#141312;">	</span><span style="color:#006e28;">self</span><span style="color:#141312;">.</span><span style="color:#0095ff;"><strong>connect</strong></span><span style="color:#141312;">(</span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer,
                     QtCore.</span><span style="color:#0095ff;"><strong>SIGNAL</strong></span><span style="color:#141312;">(</span><span style="color:#bf0303;">"timeout()"</span><span style="color:#141312;">),
                     </span><span style="color:#006e28;">self</span><span style="color:#141312;">.atualiza)</span>

       <span style="color:#141312;"> </span><span style="color:#006e28;">self</span><span style="color:#141312;">.timer.start(</span><span style="color:#b08000;">3000</span><span style="color:#141312;">)</span> <span style="color:#888786;"><em># tempo em milisegundos</em></span></pre>
Posted in programação, pyqt Tagged: pyqt, python, qt, threads <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=305&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/03/27/timer_pyqt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>Qual seu gerenciador de pacotes?</title>
		<link>http://escovandobits.wordpress.com/2009/02/14/qual-seu-gerenciador-de-pacotes/</link>
		<comments>http://escovandobits.wordpress.com/2009/02/14/qual-seu-gerenciador-de-pacotes/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 20:54:54 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[distribuições]]></category>
		<category><![CDATA[gentoo]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=293</guid>
		<description><![CDATA[Basicamente o que distingue uma distribuição GNU/Linux é a maneira como os programas são instalados ou removidos. Eis alguns exemplos :

yum &#8211; gerencia e instala os pacotes no Fedora (extensão .rpm)
apt &#8211; cuida dos pacotes no Debian, Ubuntu, Knoppix, Kurumin etc (extensão .deb)
pacman &#8211; utilizado no Arch Linux
emerge -  do sistema Portage, que compila e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=293&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Basicamente o que distingue uma distribuição GNU/Linux é a maneira como os programas são instalados ou removidos. Eis alguns exemplos :</p>
<ul>
<li>yum &#8211; gerencia e instala os pacotes no Fedora (extensão .rpm)</li>
<li>apt &#8211; cuida dos pacotes no Debian, Ubuntu, Knoppix, Kurumin etc (extensão .deb)</li>
<li>pacman &#8211; utilizado no Arch Linux</li>
<li>emerge -  do sistema Portage, que compila e instala os pacotes no Gentoo.</li>
</ul>
<h2><span id="more-293"></span>1. Gentoo</h2>
<blockquote><p>Searching&#8230;<br />
[ Results for search key : openoffice ]<br />
[ Applications found : 2 ]</p>
<p>*  app-office/openoffice<br />
Latest version available: 3.0.1<br />
Latest version installed: [ Not Installed ]<br />
Size of files: 364,086 kB<br />
Homepage:      http://go-oo.org<br />
Description:   OpenOffice.org, a full office productivity suite.<br />
License:       LGPL-2</p>
<p>*  app-office/openoffice-bin<br />
Latest version available: 3.0.1<br />
Latest version installed: 3.0.0<br />
Size of files: 1,575,091 kB<br />
Homepage:      http://www.openoffice.org/<br />
Description:   OpenOffice productivity suite<br />
License:       LGPL-2</p></blockquote>
<h2>2. Fedora</h2>
<blockquote><p>Geladene Plugins: fastestmirror, refresh-packagekit<br />
============================= Matched: openoffice ==============================<br />
broffice.org-base.i386 : Database frontend for BrOffice.org<br />
broffice.org-brand.i386 : Core brand for BrOffice.org<br />
broffice.org-calc.i386 : Spreadsheet module for BrOffice.org<br />
broffice.org-draw.i386 : Drawing module for BrOffice.org<br />
broffice.org-impress.i386 : Presentation module for BrOffice.org<br />
broffice.org-math.i386 : Equation editor module for BrOffice.org<br />
broffice.org-writer.i386 : Word Processor module for BrOffice.org<br />
openoffice.org-base.i386 : Database frontend for openoffice.org<br />
openoffice.org-base-core.i386 : Database GUI libraries for openoffice.org<br />
openoffice.org-brand.i386 : Core brand for openoffice.org<br />
openoffice.org-bsh.i386 : BeanShell support for openoffice.org<br />
openoffice.org-calc.i386 : Spreadsheet module for openoffice.org<br />
openoffice.org-calc-core.i386 : Spreadsheet libraries for openoffice.org<br />
openoffice.org-core.i386 : Core modules for openoffice.org<br />
openoffice.org-devel.i386 : Development Libraries for openoffice.org<br />
openoffice.org-draw.i386 : Drawing module for openoffice.org<br />
openoffice.org-draw-core.i386 : Drawing libraries for openoffice.org<br />
openoffice.org-emailmerge.i386 : Email mail merge component for openoffice.org<br />
openoffice.org-graphicfilter.i386 : Extra graphic filters for openoffice.org<br />
openoffice.org-headless.i386 : Headless plugin for openoffice.org<br />
openoffice.org-impress.i386 : Presentation module for openoffice.org<br />
openoffice.org-impress-core.i386 : Presentation libraries for openoffice.org<br />
openoffice.org-javafilter.i386 : Extra javafilter module for openoffice.org<br />
(&#8230;)<br />
openoffice.org-langpack-pt_BR.i386 : Brazilian Portuguese language pack for  : openoffice.org<br />
(&#8230;)<br />
openoffice.org-pyuno.i386 : Python support for openoffice.org<br />
openoffice.org-report-builder.i386 : Create database reports from openoffice.org<br />
openoffice.org-rhino.i386 : JavaScript support for openoffice.org<br />
openoffice.org-sdk.i386 : Software Development Kit for openoffice.org<br />
openoffice.org-sdk-doc.i386 : Software Development Kit documentation for : openoffice.org<br />
openoffice.org-testtools.i386 : Testtools for openoffice.org<br />
openoffice.org-ure.i386 : UNO Runtime Environment<br />
openoffice.org-writer.i386 : Word Processor module for openoffice.org<br />
openoffice.org-writer-core.i386 : Word Processor libraries for openoffice.org<br />
(&#8230;)<br />
kdocker.i386 : Dock any application in the system tray<br />
keyjnote.noarch : A program that displays presentation slides<br />
latex2emf.i386 : Create an EMF file from LaTeX source<br />
mythes-cs.noarch : Czech thesarus<br />
o3read.i386 : Standalone converter for OpenOffice.org documents<br />
odt2txt.i386 : Converts an OpenDocument to plain text<br />
ooo2txt.noarch : Convert OpenOffice documents to simple text<br />
oooqs2.i386 : OpenOffice.org Quickstarter 2<br />
(&#8230;)</p></blockquote>
<h2>3. ArchLinux</h2>
<blockquote><p>extra/openoffice-base 3.0.1-1<br />
OpenOffice.org &#8211; a free multiplatform and multilingual office suite<br />
extra/openoffice-base-beta 3.1.0_ooo310_m1-1<br />
OpenOffice.org &#8211; a free multiplatform and multilingual office suite<br />
extra/openoffice-base-devel 3.2_dev300_m41-1<br />
OpenOffice.org &#8211; a free multiplatform and multilingual office suite<br />
(&#8230;)<br />
extra/openoffice-pt_br 3.0.1-1<br />
OpenOffice portugese brazil language files<br />
(&#8230;)<br />
community/openoffice-sr 3.0.1-1<br />
OpenOffice Serbian language files<br />
community/openoffice-tr 3.0.1-1<br />
OpenOffice Turkish language files<br />
community/openoffice-uk 3.0.1-1<br />
OpenOffice Ukrainian language files</p></blockquote>
<h2>4.Ubuntu</h2>
<blockquote>
<p style="text-align:justify;">dictionaries-common &#8211; Common utilities for spelling dictionary tools<br />
dmake &#8211; make utility used to build OpenOffice.org<br />
gnumeric &#8211; spreadsheet application for GNOME &#8211; main program<br />
hunspell &#8211; spell checker and morphological analyzer (program)<br />
hunspell-de-at &#8211; Austrian (German) dictionary for hunspell<br />
hunspell-de-ch &#8211; Swiss (German) dictionary for hunspell<br />
hunspell-de-de &#8211; German dictionary for hunspell<br />
hunspell-tools &#8211; tools for hunspell<br />
language-pack-byn-base &#8211; translations for language Blin; Bilin<br />
language-pack-kde-no-base &#8211; KDE translations for language Norwegian<br />
(&#8230;)<br />
language-support-en &#8211; metapackage for English language support<br />
language-support-eo &#8211; metapackage for Esperanto language support<br />
language-support-es &#8211; metapackage for Spanish; Castilian language support<br />
(&#8230;)<br />
language-support-pt &#8211; metapackage for Portuguese language support<br />
language-support-ro &#8211; metapackage for Romanian language support<br />
language-support-ru &#8211; metapackage for Russian language support<br />
(&#8230;)<br />
language-support-translations-af &#8211; Additional translations metapackage for Afrikaans<br />
language-support-translations-ar &#8211; Additional translations metapackage for Arabic<br />
language-support-translations-as &#8211; Additional translations metapackage for Assamese<br />
(&#8230;)<br />
language-support-translations-zh &#8211; Additional translations metapackage for Chinese<br />
language-support-translations-zu &#8211; Additional translations metapackage for Zulu<br />
language-support-ts &#8211; metapackage for Tsonga language support<br />
language-support-uk &#8211; metapackage for Ukrainian language support<br />
(&#8230;)<br />
language-support-zu &#8211; metapackage for Zulu language support<br />
libhunspell-1.1-0 &#8211; spell checker and morphological analyzer (shared library)<br />
libhunspell-dev &#8211; spell checker and morphological analyzer (development)<br />
libhyphen-dev &#8211; ALTLinux hyphenation library &#8211; development files<br />
libhyphen0 &#8211; ALTLinux hyphenation library &#8211; shared library<br />
libuno-cil &#8211; CLI binding for OpenOffice.org<br />
myspell-bg &#8211; The Bulgarian dictionary for myspell<br />
(&#8230;)<br />
myspell-pt-br &#8211; Brazilian Portuguese dictionary for myspell<br />
myspell-pt-pt &#8211; European Portuguese dictionary for myspell<br />
(&#8230;)<br />
myspell-zu &#8211; The Zulu dictionary for myspell<br />
o3read &#8211; standalone converter for OpenOffice.org documents<br />
openoffice.org-hyphenation &#8211; Hyphenation patterns for OpenOffice.org<br />
openoffice.org-hyphenation-en-us &#8211; US English hyphenation patterns for OpenOffice.org<br />
(&#8230;)<br />
openoffice.org-thesaurus-pl &#8211; Polish Thesaurus for OpenOffice.org<br />
translate-toolkit &#8211; Toolkit assisting in the localization of software<br />
bkchem &#8211; Python based chemical structures editor<br />
docbook2odf &#8211; XSLT based conversions from docbook to Oasis Open Document (openoffice.org)<br />
extract &#8211; displays meta-data from files of arbitrary type<br />
fig2sxd &#8211; convert XFig files to OpenOffice.org format<br />
gkrellm-hdplop &#8211; A hard drive activity monitor GKrellM plugin<br />
gnumeric-gtk &#8211; spreadsheet application for GNOME &#8211; GTK version<br />
gramadoir &#8211; Irish language grammar checker (integration scripts)<br />
gramps &#8211; Genealogical Research and Analysis Management Program<br />
hunspell-ar &#8211; Arabic dictionary for hunspell<br />
hunspell-uz &#8211; The Uzbek dictionary for Hunspell<br />
jed &#8211; editor for programmers (textmode version)<br />
kdissert &#8211; mindmapping tool<br />
kdocker &#8211; minimize all applications to system tray<br />
libaltlinuxhyph-dev &#8211; ALTLinux hyphenation library development files<br />
libextractor1c2a &#8211; extracts meta-data from files of arbitrary type (library)<br />
libooolib-perl &#8211; Perl library for creating OpenOffice.org documents (calc/writer)<br />
libspreadsheet-writeexcel-perl &#8211; create Excel spreadsheets<br />
lsr &#8211; The Linux Screen Reader for GNOME<br />
ming-fonts-opensymbol &#8211; Ming format Opensymbol Fonts<br />
(&#8230;)<br />
myspell-fi &#8211; The Finnish dictionary for myspell<br />
odt2txt &#8211; simple converter from OpenDocument Text to plain text<br />
ooo2dbk &#8211; converts OpenOffice.org SXW documents to DocBook XML<br />
oooqs2-kde &#8211; OpenOffice.org2 QuickStarter applet for KDE<br />
openclipart-openoffice.org &#8211; clip art for OpenOffice.org gallery<br />
openoffice.org-ctl-he &#8211; Turns on CTL support, &amp; sets Hebrew as the default CTL locale<br />
openoffice.org-ogltrans &#8211; OpenOffice.org &#8220;OpenGL rendered transitions&#8221; extension<br />
openoffice.org-qa-ui-tests &#8211; Test Scripts for the OpenOffice.org Testtool<br />
openoffice.org-starter-guide &#8211; Getting Started guide for OpenOffice.org 2.x<br />
recoll &#8211; A personal full text search package with a QT GUI<br />
strigi-utils &#8211; command-line tools for Strigi Desktop Search<br />
swish-e &#8211; Simple Web Indexing System for Humans &#8211; Enhanced<br />
tex4ht &#8211; LaTeX and TeX for Hypertext (HTML) &#8211; executables<br />
tex4ht-common &#8211; LaTeX and TeX for Hypertext (HTML) &#8211; support files<br />
thescoder &#8211; compiler for OpenOffice 1.x thesaurus files<br />
unoconv &#8211; converter between OpenOffice.org document formats<br />
wmhdplop &#8211; A hard drive activity monitor dockapp<br />
wpd2sxw &#8211; WordPerfect to OpenOffice.org converter<br />
wps2sxw &#8211; Works text documents to OpenOffice.org converter<br />
xjed &#8211; editor for programmers (x11 version)<br />
zope-textindexng3 &#8211; full text index for Zope objects<br />
zope-textindexng3-lib &#8211; full text index for Zope objects<br />
myspell-eu-es &#8211; Basque (Euskera) dictionary for myspell<br />
(&#8230;)<br />
language-pack-gnome-pl-base &#8211; GNOME translations for language Polish<br />
language-pack-gnome-ps-base &#8211; GNOME translations for language Pushto<br />
language-pack-gnome-pt-base &#8211; GNOME translations for language Portuguese<br />
(&#8230;)<br />
language-pack-kde-hy-base &#8211; KDE translations for language Armenian<br />
language-pack-kde-ia-base &#8211; KDE translations for language Interlingua (International Auxiliary Language Association)<br />
language-pack-kde-id-base &#8211; KDE translations for language Indonesian<br />
(&#8230;)<br />
language-pack-kde-ps-base &#8211; KDE translations for language Pushto<br />
language-pack-kde-pt-base &#8211; KDE translations for language Portuguese<br />
(&#8230;)<br />
language-pack-pt-base &#8211; translations for language Portuguese<br />
(&#8230;)<br />
language-pack-zu-base &#8211; translations for language Zulu<br />
language-pack-zza-base &#8211; translations for language Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki<br />
libwriter2latex-java-doc &#8211; OpenOffice.org Writer/Calc to LaTeX/XHTML converter &#8212; javadoc<br />
myspell-af &#8211; Afrikaans dictionary for myspell<br />
myspell-en-gb &#8211; English_british dictionary for myspell<br />
myspell-en-us &#8211; English_american dictionary for myspell<br />
myspell-en-za &#8211; English_shouthafrican dictionary for myspell<br />
(&#8230;)<br />
openoffice.org &#8211; OpenOffice.org Office suite<br />
openoffice.org-base &#8211; OpenOffice.org office suite &#8211; database<br />
openoffice.org-base-core &#8211; OpenOffice.org office suite &#8212; libdba<br />
openoffice.org-calc &#8211; OpenOffice.org office suite &#8211; spreadsheet<br />
openoffice.org-common &#8211; OpenOffice.org office suite architecture independent files<br />
openoffice.org-core &#8211; OpenOffice.org office suite architecture dependent files<br />
openoffice.org-dev &#8211; OpenOffice.org SDK &#8212; development files<br />
openoffice.org-dev-doc &#8211; OpenOffice.org SDK &#8212; documentation<br />
openoffice.org-draw &#8211; OpenOffice.org office suite &#8211; drawing<br />
openoffice.org-evolution &#8211; Evolution Addressbook support for OpenOffice.org<br />
openoffice.org-filter-binfilter &#8211; Legacy filters (e.g. StarOffice 5.2) for OpenOffice.org<br />
openoffice.org-filter-mobiledev &#8211; Mobile Devices Filters for OpenOffice.org<br />
openoffice.org-gcj &#8211; OpenOffice.orgs Java libraries (native for use with GIJ)<br />
openoffice.org-gnome &#8211; GNOME Integration for OpenOffice.org (VFS, GConf)<br />
openoffice.org-gtk &#8211; GTK+ Integration for OpenOffice.org (Widgets, Dialogs, Quickstarter)<br />
(&#8230;)<br />
openoffice.org-help-pt &#8211; Portuguese help for OpenOffice.org<br />
(..)<br />
openoffice.org-hyphenation-af &#8211; Afrikaans hyphenation patterns for OpenOffice.org<br />
openoffice.org-hyphenation-de &#8211; German hyphenation patterns for OpenOffice.org<br />
(&#8230;)<br />
openoffice.org-impress &#8211; OpenOffice.org office suite &#8211; presentation<br />
openoffice.org-java-common &#8211; OpenOffice.org office suite Java support arch. independent files<br />
openoffice.org-kde &#8211; KDE Integration for OpenOffice.org (Widgets, Dialogs, Addressbook)<br />
(&#8230;)<br />
openoffice.org-l10n-pt &#8211; Portuguese language package for OpenOffice.org<br />
openoffice.org-l10n-pt-br &#8211; Portuguese_brazilian language package for OpenOffice.org<br />
(&#8230;)<br />
openoffice.org-voikko &#8211; Finnish spell-checker and hyphenation for OpenOffice.org<br />
openoffice.org-writer &#8211; OpenOffice.org office suite &#8211; word processor<br />
openoffice.org-writer2latex &#8211; Writer/Calc to LaTeX/XHTML converter extension for OpenOffice.org<br />
python-uno &#8211; Python interface for OpenOffice.org<br />
ttf-opensymbol &#8211; The OpenSymbol TrueType font<br />
(&#8230;)<br />
broffice.org &#8211; BrOffice.org office suite<br />
libwriter2latex-java &#8211; OpenOffice.org Writer/Calc to LaTeX/XHTML converter &#8212; library<br />
openoffice.org-dtd-officedocument1.0 &#8211; OfficeDocument 1.0 DTD (OpenOffice.org 1.x)<br />
openoffice.org-headless &#8211; Headless VCL plugin for OpenOffice.org<br />
openoffice.org-presentation-minimizer &#8211; OpenOffice.org Presentation Minimizer extension<br />
openoffice.org-report-builder &#8211; OpenOffice.org Report Builder extension<br />
openoffice.org-sdbc-postgresql &#8211; PostgreSQL SDBC driver for OpenOffice.org<br />
openoffice.org-style-hicontrast &#8211; Hicontrast symbol style for OpenOffice.org<br />
writer2latex &#8211; OpenOffice.org Writer/Calc to LaTeX/XHTML converter<br />
writer2latex-manual &#8211; OpenOffice.org Writer/Calc to LaTeX/XHTML converter &#8212; manual</p></blockquote>
<p style="text-align:justify;">Como podem perceber,  há um excesso de resultados no Ubuntu e no Fedora. Resolvi fazer esse <em>post</em> pois já vi muitos usuários iniciantes no GNU/Linux que optaram, por exemplo, pelo Ubuntu ficarem perdidos quando precisaram instalar o Java ou alguma biblioteca devido as inúmeros pacotes listados. Continuo preferindo a maneira do Gentoo para as buscas, resultado simples e objetivo (podendo ser rápido usando o <a href="http://gentoo-portage.com/app-portage/eix" target="_blank">eix</a>). E você leitor, como faz para organizar seus programas na sua distribuição? As ferramentas gráficas realmente são eficientes para filtrar essa quantidade de resultados?</p>
Posted in Linux Tagged: distribuições, gentoo, Linux <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/293/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=293&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/02/14/qual-seu-gerenciador-de-pacotes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>Exemplos do uso syscalls (x86) do Linux</title>
		<link>http://escovandobits.wordpress.com/2009/01/21/exemplos-do-uso-syscalls-x86-do-linux/</link>
		<comments>http://escovandobits.wordpress.com/2009/01/21/exemplos-do-uso-syscalls-x86-do-linux/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 00:36:35 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[glibc]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[syscalls]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=253</guid>
		<description><![CDATA[Hoje tive uma idéia ao ler um artigo intitulado How Compiling Works no qual o autor descreve em linhas gerais, mas de uma maneira interessante, o processo de compilação de um código escrito em C (abordando  o processo de linkagem com as bibliotecas) tomando como exemplo a função printf. Resolvi fazer uma brincadeira, mostrando como [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=253&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Hoje tive uma idéia ao ler um artigo intitulado <a href="http://markuskimius.wikidot.com/programming:explain:compiling" target="_self">How Compiling Works</a> no qual o autor descreve em linhas gerais, mas de uma maneira interessante, o processo de compilação de um código escrito em C (abordando  o processo de <em>linkagem</em> com as bibliotecas) tomando como exemplo a função <a href="http://linux.die.net/man/3/printf" target="_blank">printf</a>. Resolvi fazer uma brincadeira, mostrando como isso pode ser realmente implementado na prática, usando chamadas de sistema (<em>syscalls</em>) do <a href="http://www.kernel.org" target="_blank">Linux</a>, de modo que não seja necessário usar a implementação disponível na <a href="www.gnu.org/software/libc/" target="_blank">glibc</a>.</p>
<p style="text-align:justify;"><span id="more-253"></span></p>
<p style="text-align:justify;">Começando com um exemplo simples, bem parecido com que todo mundo que um dia pensou em programar já viu.  A diferença que a função printf será modificada para receber apenas caracteres (não variáveis) e a quantidade.</p>
<pre><span style="color:#006e28;">#include "stdio.h"</span>
<span style="color:#0057ae;">int</span><span style="color:#141312;"> main() {</span>

<span style="color:#141312;">	printf(</span><span style="color:#bf0303;">"Hello, world!</span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">"</span><span style="color:#141312;">,</span><span style="color:#b08000;">15</span><span style="color:#141312;">);</span>
<span style="color:#141312;">	<strong>return</strong> </span><span style="color:#b08000;">0</span><span style="color:#141312;">;</span>
<span style="color:#141312;">}</span></pre>
<p style="text-align:justify;">Reparem que o cabeçalho está entre aspas, indicando ao compilador que vamos usar uma implementação particular e <strong>não</strong> a implementação da glibc, no meu caso os arquivos</p>
<ul>
<li>/usr/include/stdio.h (protótipo)</li>
<li>/usr/lib/libc.so  (implementação)</li>
</ul>
<p>Serão substituidos pelos arquivos <span style="text-decoration:underline;">stdio.h</span> e <span style="text-decoration:underline;">stdio.c</span> abaixo:</p>
<pre style="text-align:justify;"><span style="color:#006e28;">#ifndef STDIO_H_</span>
<span style="color:#006e28;">#define STDIO_H_</span>

<span style="color:#0057ae;">int</span><span style="color:#141312;"> printf(</span><span style="color:#0057ae;">char</span><span style="color:#141312;">* texto, </span><span style="color:#0057ae;">int</span><span style="color:#141312;"> tam);</span>

<span style="color:#006e28;">#endif </span><span style="color:#888786;"><em>/* STDIO_H_ */</em></span></pre>
<p style="text-align:justify;">Agora que temos o protótipo da função printf() que é diferente da função printf() que conhecemos mas servirá para esse primeiro exemplo:</p>
<pre style="text-align:justify;"><span style="color:#006e28;">#include "stdio.h"</span>

<span style="color:#0057ae;">int</span><span style="color:#141312;"> printf(</span><span style="color:#0057ae;">char</span><span style="color:#141312;">* texto, </span><span style="color:#0057ae;">int</span><span style="color:#141312;"> tam)</span>

<span style="color:#141312;">{</span>
<span style="color:#141312;">__asm__ (</span><span style="color:#bf0303;">"movl $0x4,%%eax; \</span>
<span style="color:#bf0303;">          movl $0x1,%%ebx; \</span>
<span style="color:#bf0303;">          movl %0,%%ecx; \</span>
<span style="color:#bf0303;">          movl %1,%%edx; \</span>
<span style="color:#bf0303;">          int $0x80"</span><span style="color:#141312;">: : </span><span style="color:#bf0303;">"g"</span><span style="color:#141312;"> (texto) , </span><span style="color:#bf0303;">"g"</span><span style="color:#141312;"> (tam) );</span>

<span style="color:#141312;">  <strong>return</strong> </span><span style="color:#b08000;">0</span><span style="color:#141312;">;</span>
<span style="color:#141312;">}</span></pre>
<p style="text-align:justify;">Podemos incrementar um pouco mais do código em <em>assembly</em>, para não precisar estipular o número de caracteres.</p>
<pre><span style="color:#141312;">__asm__ (</span><span style="color:#bf0303;">"      xorl %%edx,%%edx; \</span>
<span style="color:#bf0303;">                xorl %%eax,%%eax; \</span>

<span style="color:#bf0303;">                movl %0,%%ecx; \</span>
<span style="color:#bf0303;">        loop:   movb (%%ecx,%%edx),%%al; \</span>
<span style="color:#bf0303;">                incl %%edx; \</span>
<span style="color:#bf0303;">                test %%al,%%al; \</span>
<span style="color:#bf0303;">                jnz loop; \</span>
<span style="color:#bf0303;">                decl %%edx; \</span>

<span style="color:#bf0303;">                movl $0x4,%%eax; \</span>
<span style="color:#bf0303;">                movl $0x1,%%ebx; \</span>
<span style="color:#bf0303;">                int $0x80"</span><span style="color:#141312;">: : </span><span style="color:#bf0303;">"g"</span><span style="color:#141312;"> (texto));</span></pre>
<p>Para fazer uma função equivalente ao printf() da glibc precisaríamos implementar o suporte a <a href="http://linux.die.net/man/3/va_arg" target="_blank">múltiplos argumentos</a> e mais um monte de coisas <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Fiz um esboço de uma idéia do printf, mas ainda usando funções da glibc apenas implementando a <em>syscall write.<br />
</em></p>
<pre><span style="color:#006e28;">#include &lt;stdlib.h&gt;</span>
<span style="color:#006e28;">#include &lt;stdarg.h&gt;</span>
<span style="color:#006e28;">#include &lt;string.h&gt;</span>

<span style="color:#006e28;">#define _write(texto, d) </span>
<span style="color:#141312;">__asm__ (</span><span style="color:#bf0303;">"movl $0x4,%%eax; \</span>
<span style="color:#bf0303;">	  movl $0x1,%%ebx; \</span>
<span style="color:#bf0303;">	  movl %0,%%ecx; \</span>
<span style="color:#bf0303;">	  movl %1,%%edx; \</span>

<span style="color:#bf0303;">	  int $0x80"</span><span style="color:#141312;">: : </span><span style="color:#bf0303;">"g"</span><span style="color:#141312;"> (texto) , </span><span style="color:#bf0303;">"g"</span><span style="color:#141312;"> (d) );</span>

<span style="color:#0057ae;">int</span><span style="color:#141312;"> write(</span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *fmt, ...);</span>

<span style="color:#0057ae;">int</span><span style="color:#141312;"> main(){</span>

<span style="color:#141312;">	</span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *index=malloc(</span><span style="color:#b08000;">2</span><span style="color:#141312;">);</span>
<span style="color:#141312;">	</span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *nome=malloc(</span><span style="color:#b08000;">20</span><span style="color:#141312;">);</span>

<span style="color:#141312;">	strcpy(index,</span><span style="color:#bf0303;">"19"</span><span style="color:#141312;">);</span>
<span style="color:#141312;">	strcpy(nome,</span><span style="color:#bf0303;">"Escovando Bits !!!"</span><span style="color:#141312;">);</span>

<span style="color:#141312;">	write(</span><span style="color:#bf0303;">"blog: %s </span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">index: %s</span><span style="color:#ff80e0;">\n</span><span style="color:#bf0303;">"</span><span style="color:#141312;">,nome,index);</span>

<span style="color:#141312;">	<strong>return</strong> </span><span style="color:#b08000;">0</span><span style="color:#141312;">;</span>
<span style="color:#141312;">}</span>

<span style="color:#0057ae;">int</span><span style="color:#141312;"> write(</span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *fmt, ...) {</span>

<span style="color:#141312;">	</span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *s;</span>
<span style="color:#141312;">	va_list ap;</span>
<span style="color:#141312;">	</span><span style="color:#0057ae;">register</span><span style="color:#141312;"> </span><span style="color:#0057ae;">int</span><span style="color:#141312;"> d=</span><span style="color:#b08000;">0</span><span style="color:#141312;">,tam;</span>

<span style="color:#141312;">	</span><span style="color:#0057ae;">int</span><span style="color:#141312;"> size;</span>

<span style="color:#141312;">	va_start(ap, fmt );</span>
<span style="color:#141312;">	tam = strlen(fmt);</span>

<span style="color:#141312;">	<strong>for</strong> (d=</span><span style="color:#b08000;">0</span><span style="color:#141312;">; d&lt;tam; d++, *++fmt) {</span>

<span style="color:#141312;">		<strong>if</strong> (*fmt != </span><span style="color:#ff80e0;">'%'</span><span style="color:#141312;"> ) {</span>

<span style="color:#141312;">		_write(fmt,</span><span style="color:#b08000;">1</span><span style="color:#141312;">);</span>
<span style="color:#141312;">		} <strong>else</strong> {</span>

<span style="color:#141312;">			<strong>switch</strong> (*++fmt) {</span>
<span style="color:#141312;">			<strong>case</strong> </span><span style="color:#ff80e0;">'s'</span><span style="color:#141312;">: {</span>
<span style="color:#141312;">				s = va_arg(ap, </span><span style="color:#0057ae;">char</span><span style="color:#141312;"> *);</span>

<span style="color:#141312;">				size = strlen(s);</span>
<span style="color:#141312;">				_write(s,size);</span>
<span style="color:#141312;">			<strong>break</strong>;</span>
<span style="color:#141312;">			} </span><span style="color:#888786;"><em>// fim case</em></span>
<span style="color:#141312;">			} </span><span style="color:#888786;"><em>// fim switch</em></span>

<span style="color:#141312;">		} </span><span style="color:#888786;"><em>// fim else</em></span>
<span style="color:#141312;">	} </span><span style="color:#888786;"><em>// fim for</em></span>

<span style="color:#141312;">	va_end(ap);</span>
<span style="color:#141312;">	<strong>return</strong>(</span><span style="color:#b08000;">1</span><span style="color:#141312;">);</span>
<span style="color:#141312;">}</span></pre>
<p style="text-align:justify;">Se analisarmos o código-fonte da glibc veremos que sua implementação é completamente diferente da proposta nesse <em>post</em>, por questões de portabilidade de <em>hardware</em>, segurança, elegância, desempenho, etc;  Um <a href="http://www.gnu.org/software/libtool/manual/libc/Printf-Extension-Example.html#Printf-Extension-Example" target="_blank">exemplo</a> é a possiblidade de criar extensões para a função printf.</p>
<p style="text-align:justify;">Bom, essa foi a primeira entrada do ano aqui no <a href="http://escovandobits.wordpress.com" target="_blank">EscovandoBits</a>,  mais novidades para os próximos dias, com a cobertura do Mauro sobre a Campus Party que acontece do dia 19 a 25 de Janeiro.</p>
<p style="text-align:justify;">
Posted in programação Tagged: c, glibc, kernel, Linux, syscalls <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/253/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=253&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2009/01/21/exemplos-do-uso-syscalls-x86-do-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
		<item>
		<title>Montando imagens JFFS2</title>
		<link>http://escovandobits.wordpress.com/2008/11/02/montando-imagens-jffs2/</link>
		<comments>http://escovandobits.wordpress.com/2008/11/02/montando-imagens-jffs2/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 13:58:40 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Embarcados]]></category>
		<category><![CDATA[jffs2]]></category>
		<category><![CDATA[mtd]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/?p=240</guid>
		<description><![CDATA[Partições em JFFS2 são encontradas em um vasto número de sistemas   embarcados. Esse post mostra como montar uma imagem JFFS2 na própria RAM.  Muito útil para analisar seu conteúdo de firmwares.


O sistema de arquivos JFFS2 não permite que seja montado um através de um loop device, portanto para solucionar esse problema vamos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=240&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><img class="alignright" title="MTD logo" src="http://www.linux-mtd.infradead.org/images/logo3.png" alt="" width="142" height="80" />Partições em JFFS2 são encontradas em um vasto número de sistemas   embarcados. Esse <em>post </em>mostra como montar uma imagem JFFS2 na própria RAM.  Muito útil para analisar seu conteúdo de <em>firmwares</em>.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;"><span id="more-240"></span>O sistema de arquivos <a title="Informações sobre o JFFS2 (english)" href="http://linux-mtd.infradead.org/~dwmw2/jffs2.pdf" target="_blank">JFFS2</a> não permite que seja montado um através de um <a title="Informações soer loop devices (english)" href="http://en.wikipedia.org/wiki/Loop_device" target="_blank"><em>loop device</em></a>, portanto para solucionar esse problema vamos emular um dispostivo <a href="http://www.linux-mtd.infradead.org/" target="_blank">MTD</a> na memória RAM. O módulo que faz isso é o <strong>mtdram</strong>.  Fiz o teste em um Fedora e lá todos os módulos já estavam disponíveis, assim dê um <em>modprobe</em> em algum dos módulos descritos logo abaixo e veja se seu sistema possui. Caso seja necessário compilar o kernel, é preciso ativar no <strong>.config</strong> as opções:</p>
<blockquote><p>CONFIG_MTD=m<br />
CONFIG_MTD_BLOCK=m<br />
CONFIG_MTD_MTDRAM=m</p></blockquote>
<p>Vamos ao que interessa:</p>
<blockquote><p>modprobe mtd<br />
modprobe mtdblock<br />
modprobe mtdram total_size=<span style="color:#ff0000;">10240</span> erase_size=<span style="color:#ff0000;">128 </span><br />
dd if=imagem.jffs2 of=/dev/mtdblock0<br />
mount -t jffs2 /dev/mtdblock0 /diretório-qualquer</p></blockquote>
<p style="text-align:justify;">O prático dessa história é que podemos definir o tamanho total do dispositivo MTD bem como o tamanho do <em>erease block</em>. Também há como deixar pré-definido no kernel esses tamanhos.</p>
<p style="text-align:justify;">Obs. Não esqueça de habilitar o suporte ao jffs2 para fazer os testes <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p style="text-align:justify;"><span style="color:#ff0000;">Update: </span>Se houver a necessidade de converter uma imagem no formato <em>big endian </em>para <em>little endian</em> (principalmente para montar em máquinas x86) utilize o comando<strong> jffs2dump</strong>.<strong><br />
</strong></p>
<blockquote>
<p style="text-align:justify;">jffs2dump -b big_endian.img -e new_little_endian.img</p>
</blockquote>
<p style="text-align:justify;">
Posted in Linux, Sistemas Embarcados Tagged: jffs2, Linux, mtd <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/240/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=240&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2008/11/02/montando-imagens-jffs2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>

		<media:content url="http://www.linux-mtd.infradead.org/images/logo3.png" medium="image">
			<media:title type="html">MTD logo</media:title>
		</media:content>
	</item>
	</channel>
</rss>