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

<channel>
	<title>Blog do Sergio Prado</title>
	<atom:link href="http://sergioprado.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://sergioprado.org</link>
	<description>Sistemas embarcados, Linux embarcado, RTOS e segurança</description>
	<lastBuildDate>Tue, 18 Jun 2013 23:57:10 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Credenciamento ESC Brazil 2013</title>
		<link>http://sergioprado.org/credenciamento-esc-brazil-2013-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=credenciamento-esc-brazil-2013-2</link>
		<comments>http://sergioprado.org/credenciamento-esc-brazil-2013-2/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 23:57:10 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3728</guid>
		<description><![CDATA[<p>Foi aberto o credenciamento para o ESC Brazil 2013, que será realizado nos dias 27 e 28 de agosto em São Paulo/SP.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/credenciamento-esc-brazil-2013-2/">Credenciamento ESC Brazil 2013</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Foi aberto o credenciamento para o <a href="http://www.escbrazil.com.br/" target="_blank">ESC Brazil 2013</a>, que será realizado nos dias 27 e 28 de agosto em São Paulo/SP.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Este ano o evento promete ser maior que a edição do ano passado, com a participação das maiores fabricantes de chip do mundo, distribuidores e provedores de soluções em sistemas embarcados.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O programa de conferências ainda não esta disponível, mas posso adiantar a vocês que estarei lá novamente! Desta vez falarei sobre os desafios de portar o sistema operacional Android para uma plataforma de hardware.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Assim que a grade de palestras da conferência for divulgada, publicarei aqui no blog.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O credenciamento para a feira pode ser realizado <a href="http://credenciamento.com.br/2013/VisitanteEsc/Identificacao/CLT_IdentificacaoVisitante_por.aspx" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/credenciamento-esc-brazil-2013-2/">Credenciamento ESC Brazil 2013</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/credenciamento-esc-brazil-2013-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Promoção de case para a Raspberry Pi</title>
		<link>http://sergioprado.org/promocao-de-case-para-a-raspberry-pi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=promocao-de-case-para-a-raspberry-pi</link>
		<comments>http://sergioprado.org/promocao-de-case-para-a-raspberry-pi/#comments</comments>
		<pubDate>Fri, 14 Jun 2013 01:10:35 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Produtos]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[case]]></category>
		<category><![CDATA[raspberry pi]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3723</guid>
		<description><![CDATA[<p>Promoção de case de boa qualidade e acessível para a Raspberry Pi.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/promocao-de-case-para-a-raspberry-pi/">Promoção de case para a Raspberry Pi</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Alguns meses atrás divulguei um <a href="http://sergioprado.org/case-para-a-raspberry-pi/" target="_blank">case brasileiro</a>, de qualidade e preço acessível, para a Raspberry Pi.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Esta semana recebi um novo contato da <a href="http://www.spon.com.br/" target="_blank">Spon Web Store</a>, empresa responsável por sua produção e comercialização, sobre uma nova promoção deste case.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O preço foi reduzido para R$35,90, com frete grátis e gravação personalizada de brinde para os leitores do blog. :-)</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O case pode ser adquirido <a href="http://www.spon.com.br/index.asp?secao=43&amp;categoria=963&amp;subcategoria=0&amp;id=3719" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Obs: Este blog não tem nenhuma relação com a Spon Web Store. Estou divul­gando ape­nas porque o tra­balho é bem feito e o preço acessível.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para mais infor­mações ou dúvi­das vocês podem entrar em con­tato dire­ta­mente com o Ricardo Colchete por <a href="mailto:ricardo@spon.com.br" target="_blank">email</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/promocao-de-case-para-a-raspberry-pi/">Promoção de case para a Raspberry Pi</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/promocao-de-case-para-a-raspberry-pi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>User Space Device Drivers no Linux — Parte 2</title>
		<link>http://sergioprado.org/user-space-device-drivers-no-linux-parte-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=user-space-device-drivers-no-linux-parte-2</link>
		<comments>http://sergioprado.org/user-space-device-drivers-no-linux-parte-2/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 10:51:07 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3713</guid>
		<description><![CDATA[<p>Neste artigo estudaremos alguns frameworks do kernel que possibilitam acessar diretamente algumas interfaces e barramentos, incluindo GPIO, USB, SPI e I2C.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/user-space-device-drivers-no-linux-parte-2/">User Space Device Drivers no Linux — Parte 2</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Na <a href="http://sergioprado.org/user-space-device-drivers-no-linux-parte-1/" target="_blank">parte 1</a> deste artigo estudamos as vantagens e desvantagens de um driver de dispositivo para Linux rodando em espaço de usuário, e cobrimos algumas possíveis soluções através da chamada de sistema <em>mmap()</em> e do framework UIO.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Neste artigo estudaremos alguns frameworks do kernel que possibilitam acessar diretamente algumas interfaces de hardware e barramentos, incluindo GPIO, USB, SPI e I2C.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vamos então começar com o framework de GPIO do kernel.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">GPIO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O Linux possui uma interface no sysfs capaz de exportar para o usuário os GPIOs disponíveis no sistema. Para usar esta funcionalidade, basta habilitar a opção <em>CONFIG_GPIO_SYSFS</em> no menu de configuração do kernel.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com esta funcionalidade habilitada, o acesso aos GPIOs será disponibilizado em <em>/sys/class/gpio/</em>. Neste diretório teremos um arquivo chamado <em>export</em>, que possibilita exportar para o usuário um GPIO do sistema.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Se eu quiser por exemplo usar o GPIO 10 do sistema, devo escrever 10 neste arquivo:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ echo 10 &gt; /sys/class/gpio/export</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Neste mesmo diretório temos o arquivo <em>unexport</em>, que desfaz o export:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ echo 10 &gt; /sys/class/gpio/unexport</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas como sei o número do GPIO no sistema? No Linux, os GPIOs possuem uma numeração única. Por exemplo, imagine uma CPU com 4 portas de GPIO, cada uma contendo 32 GPIOs, totalizando 128 GPIOs. O GPIO 1 da porta 1 (GPIO1.1) representa o GPIO 1 no Linux. O GPIO 32 da porta 1 (GPIO1.32) representa o GPIO 32 no Linux. Já o GPIO 1 da porta 2 (GPIO2.1) representa o GPIO 33 no Linux. O GPIO 32 da porta 2 (GPIO2.32) representa o GPIO 64 no Linux. E a contagem continua até 128.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Portanto, para descobrir o número do GPIO que você deve usar para fazer o export, basta olhar no esquemático da placa qual a porta e o GPIO que pretende utilizar e fazer o cálculo.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com o GPIO exportado, será criado o diretório <em>/sys/class/gpio/gpioN</em>, onde N é o número do GPIO exportado. Neste diretório teremos alguns arquivos, dentre eles:</span></p>
<ul>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>direction</em>: configura o GPIO como entrada (“in”) ou saída (“out”).</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>value</em>: quando configurado como entrada, serve para ler o GPIO. Quando configurado como saída, serve para escrever no GPIO (“0” ou “1”).</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Se eu quiser por exemplo setar o GPIO 35, basta executar os comandos abaixo:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ echo 35 &gt; /sys/class/gpio/export
$ echo out &gt; /sys/class/gpio/gpio35/direction
$ echo 1 &gt; /sys/class/gpio/gpio35/value
$ echo 35 &gt; /sys/class/gpio/unexport</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E se eu quiser ler o GPIO 47, os comandos abaixo fazem isso:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ echo 47 &gt; /sys/class/gpio/export
$ echo in &gt; /sys/class/gpio/gpio47/direction
$ cat /sys/class/gpio/gpio47/value
$ echo 47 &gt; /sys/class/gpio/unexport</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Podemos perceber então que esta interface permite acessar diretamente qualquer dispositivo de hardware conectado à um GPIO do sistema. E nada te impede de criar uma aplicação e usar as APIs de leitura e escrita em arquivo para acessar os GPIOs da placa.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A documentação desta interface esta disponivel nos fontes do kernel em <a href="https://www.kernel.org/doc/Documentation/gpio.txt" target="_blank">Documentation/gpio.txt</a>.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">USB</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O Linux é capaz de exportar para o usuário o acesso ao barramento USB do sistema, possibilitando escrever drivers de dispositivos USB em espaço de usuário.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Nas versões mais antigas do kernel, o acesso ao barramento USB era realizado via usbfs, montado em <em>/proc/bus/usb</em>. Nas versões mais novas do kernel o acesso ao barramento USB é exportado para o usuário em <em>/dev/bus/usb/</em>.</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ tree /dev/bus/usb/
/dev/bus/usb/
├── 001
│   ├── 001
│   ├── 002
│   ├── 003
│   ├── 004
│   ├── 005
│   ├── 009
│   └── 010
├── 002
│   ├── 001
│   ├── 002
│   └── 003
├── 003
│   ├── 001
│   └── 002
└── 004
└── 001</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Cada diretório dentro de <em>/dev/bus/usb/</em> representa um barramento USB do sistema, e cada arquivo dentro destes diretórios representa um dispositivo conectado ao barramento.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Uma aplicação pode acessar diretamente estes arquivos para conversar com o dispositivo conectado ao barramento USB.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Como as regras para comunicação com os dispositivos usando esta interface são mais complexas, existe uma biblioteca que abstrai e facilita o acesso chamada <a href="http://www.libusb.org/" target="_blank">libusb</a>. É bastante comum encontrar drivers em espaço de usuário para impressoras, scanners e adaptadores JTAG usando esta biblioteca. E se você pretende desenvolver um driver em espaço de usuário para um dispositivo USB, provavelmente também deverá usá-la.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">I2C</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O kernel possibilita o acesso ao barramento I2C através da funcionalidade <em>i2c-dev</em>. Para usá-la, basta habilitar a opção <em>CONFIG_I2C_CHARDEV</em> no menu de configuração do kernel.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com esta funcionalidade habilitada, os barramentos I2C serão exportados em <em>/dev/i2c-X</em>, onde X é o número do barramento.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Exemplo de um sistema com dois barramentos I2C:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ ls /dev/i2c*
/dev/i2c-0 /dev/i2c-1</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O acesso ao barramento pode ser realizado normalmente com a API de acesso à arquivos. Por exemplo, este é o código para ler o primeiro registro de um dispositivo conectado ao barramento I2C no endereço 0x1C:</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> fd<span style="color: #339933;">,</span> val<span style="color: #339933;">;</span>
&nbsp;
    fd <span style="color: #339933;">=</span> open<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/dev/i2c-0&quot;</span><span style="color: #339933;">,</span> O_RDWR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    ioctl<span style="color: #009900;">&#40;</span>fd<span style="color: #339933;">,</span> I2C_SLAVE<span style="color: #339933;">,</span> <span style="color: #208080;">0x1C</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    read<span style="color: #009900;">&#40;</span>fd<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>val<span style="color: #339933;">,</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    close<span style="color: #009900;">&#40;</span>fd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A documentação sobre como utilizar esta interface encontra-se nos fontes do kernel em <a href="https://www.kernel.org/doc/Documentation/i2c/dev-interface" target="_blank">Documentation/i2c/dev-interface</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Existe ainda um projeto chamado <a href="http://www.lm-sensors.org/wiki/I2CTools" target="_blank">i2c-tools</a> que provê um conjunto de ferramentas e uma biblioteca de funções para facilitar o desenvolvimento de drivers I2C em user space.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Por exemplo, a ferramenta <em>i2cdetect</em> permite detectar todos os dispositivos conectados à um determinado barramento I2C:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">As ferramentas <em>i2cset</em> e <em>i2cget</em> permitem escrever e ler o barramento I2C, respectivamente:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ i2cset -f -y 0 0x48 10 0xA5
$ i2cget -f -y 0 0x48 10
0xA5</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E a ferramenta <em>i2cdump</em> permite fazer um dump de todos os registros de um determinado dispositivo conectado ao barramento I2C:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ i2cdump -f -y 0 0x48
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 29 21 00 00 40 01 00 00 02 ff 00 00 c0 ef 3a .)!..@?..?...??:
10: 66 10 70 99 61 40 07 00 00 77 77 07 77 03 a5 56 f?p?a@?..ww?w??V
20: 63 a3 13 55 24 35 aa 00 b0 64 1b fe dd dd 5e 62 c??U$5?.?d????^b
30: 57 7e 4e 5c 7f 6a 42 42 5f 4c 45 42 60 00 9b 2b W~N\?jBB_LEB`.?+
40: b7 00 b5 01 0f 0e 36 cf 00 5f 00 00 00 00 00 00 ?.????6?._......
50: 00 08 00 00 00 00 2b 00 08 06 ff 00 00 ff 09 00 .?....+.??....?.
60: e0 10 00 e0 10 00 bb 42 62 c0 00 00 00 00 00 00 ??.??.?Bb?......
70: 00 00 01 01 00 80 00 01 01 00 00 00 00 00 00 00 ..??.?.??.......
80: 00 a3 18 00 00 00 00 00 00 00 00 00 00 00 00 00 .??.............
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
e0: 00 99 00 0a 44 44 00 40 00 00 00 00 00 00 00 00 .?.?DD.@........
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</pre></td></tr></table></div>



<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">SPI</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O kernel possibilita o acesso ao barramento SPI através da funcionalidade <em>spidev</em>. Para usar esta funcionalidade, basta habilitar a opção <em>CONFIG_SPI_SPIDEV</em> no kernel.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com esta funcionalidade habilitada, os barramentos SPI são exportados em <em>/dev/spidevB.C</em>, onde B é o número do barramento e C é o chip-select do slave conectado ao barramento. O acesso também é feito através da API de arquivos (<em>open()</em>, <em>read()</em>, <em>write()</em>, <em>ioctl()</em>, etc).</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A documentação sobre como utilizar esta interface encontra-se nos fontes do kernel em <a href="https://www.kernel.org/doc/Documentation/spi/spidev" target="_blank">Documentation/spi/spidev</a>.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">E TEM MAIS?</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sim! Se você procurar, vai encontrar muitos outros mecanismos para desenvolver um device driver no Linux em user space, cada um com seus casos de uso:</span></p>
<ul>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>uinput</em>: criar e manipular dispositivos de input em user space.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>gadgetfs</em>: desenvolver um driver de gadget USB (USB device).</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>fuse</em>: implementar um sistema de arquivo em user space.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>fusd</em>: framework para rotear o acesso à arquivos de dispositivo para uma aplicação rodando em user space.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>cuse</em>: criar drivers de dispositivo de caractere em user space.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;"><em>buse</em>: criar drivers de dispositivos de bloco em user space.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Pronto para desenvolver seu primeiro driver em user space?</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Divirta-se!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/user-space-device-drivers-no-linux-parte-2/">User Space Device Drivers no Linux — Parte 2</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/user-space-device-drivers-no-linux-parte-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>UBM 2013 Embedded Market Study</title>
		<link>http://sergioprado.org/ubm-2013-embedded-market-study/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubm-2013-embedded-market-study</link>
		<comments>http://sergioprado.org/ubm-2013-embedded-market-study/#comments</comments>
		<pubDate>Wed, 05 Jun 2013 16:34:07 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Pesquisas]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[ubm]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3704</guid>
		<description><![CDATA[<p>Pesquisa anual da UBM sobre o mercado mundial de sistemas embarcados.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/ubm-2013-embedded-market-study/">UBM 2013 Embedded Market Study</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No começo deste ano a <a href="http://ubm.com/" target="_blank">UBM</a> realizou sua pesquisa anual sobre o mercado mundial de sistemas embarcados, incluindo projetos desenvolvidos, tecnologias utilizadas, processos e ferramentas de desenvolvimento, sistemas operacionais, microcontroladores e processadores utilizados, etc.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A pesquisa foi enviada por email para os inscritos nos sites da UBM e da EE Times de 18 de janeiro de 2013 a 13 de fevereiro de 2013. Foram recebidas 2.098 respostas válidas, vindas em sua grande maioria dos EUA e Canadá (61%), com uma parcela na Europa e Ásia (33%), e alguns poucos na América do Sul (3%).</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Algumas informações interessantes que pude identificar nesta pesquisa:</span></p>
<ul>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A linguagem de programação mais utilizada ainda é a linguagem C com 60%, seguidas por C++ com 21% e Assembly com 5%. Nenhuma indicação de que esta estatística mudará nos próximos anos.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Ainda precisamos de boas ferramentas de debugging. Ela é considerada a ferramenta mais importante, e ao mesmo tempo uma tecnologia que ainda requer muitas melhorias. Concordo!</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">O uso de sistemas operacionais diminuiu em 4% nos últimos 5 anos (a maioria diz que não precisa!). E assustadoramente, daqueles que usam um RTOS, 19% ainda usam um RTOS desenvolvido internamente!</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">O uso de um RTOS comercial tem diminuído nos últimos 5 anos (47% para 35%), enquanto que o uso de RTOS de código aberto aumentou (27% para 34%). E para novos projetos, a preferência por um RTOS de código aberto ganha disparado com 37%, contra 29% de RTOS’s comerciais. A resposta para esta tendência esta em uma outra pergunta, sobre o fator principal para a escolha de um sistema operacional. A resposta? A disponibilidade do código-fonte!</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Android é o SO mais utilizado, com 16% (aumento de 3% com relação ao ano anterior), e o FreeRTOS é o RTOS mais utilizado com 13%. Os mesmos ainda lideram as estatísticas de sistemas operacionais a serem utilizados em novos projetos, com 28% para o Android e 21% para o FreeRTOS.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A grande maioria dos projetos (60%) são baseados em processadores de 32 bits, enquanto que processadores de 8 e 16 bits ficam na faixa de 16% cada um. À propósito, o que o Arduino esta fazendo na lista de microcontroladores de 8 bits???</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A Texas liderou a maioria das pesquisas sobre os fabricantes de chips, incluindo o melhor ecosistema (software, ferramentas, suporte, etc) e chip mais utilizado, mas seguida de perto por Freescale, Microchip e Atmel.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">WiFi é disparada a tecnologia wireless mais utilizada em projetos embarcados, seguida na ordem por Bluetooth, redes celulares e Zigbee.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A maioria usa o SVN como ferramenta de controle de versão (41%), seguido pelo Git com 21% (boa!) e CVS com 20%. Como alguém pode ainda estar usando o CVS como ferramenta de controle de versão? :)</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">3,9% dos que responderam pretendem participar do ESC Brazil 2013 (1,8% a mais que a última pesquisa). E pelas conversas que tenho tido com o pessoal da UBM Brasil, este ano o evento deve ser bem maior que o ano passado!</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Enfim, pesquisas nem sempre refletem a realidade, pois dependem de diversas variáveis como o público-alvo, sua localização e mercado de atuação. De qualquer forma, elas podem mostrar (e até influenciar) algumas tendências. Vale a pena dar uma olhada na pesquisa completa, que pode ser baixada de forma gratuita (após um cadastro) <a href="http://e.ubmelectronics.com/2013EmbeddedStudy/index.html" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/ubm-2013-embedded-market-study/">UBM 2013 Embedded Market Study</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/ubm-2013-embedded-market-study/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>User Space Device Drivers no Linux — Parte 1</title>
		<link>http://sergioprado.org/user-space-device-drivers-no-linux-parte-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=user-space-device-drivers-no-linux-parte-1</link>
		<comments>http://sergioprado.org/user-space-device-drivers-no-linux-parte-1/#comments</comments>
		<pubDate>Sat, 01 Jun 2013 00:52:58 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Linux embarcado]]></category>
		<category><![CDATA[Linux kernel]]></category>
		<category><![CDATA[linux device drivers]]></category>
		<category><![CDATA[mmap]]></category>
		<category><![CDATA[uio]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3680</guid>
		<description><![CDATA[<p>Neste artigo estudaremos o desenvolvimento de device drivers em user space no Linux, incluindo a chamada de sistema mmap e o framework UIO.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/user-space-device-drivers-no-linux-parte-1/">User Space Device Drivers no Linux — Parte 1</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Desenvolver um driver para Linux requer conhecimentos multidisciplinares. Quem já participou de uma seção do meu <a href="http://e-labworks.com/treinamentos/drivers" target="_blank">treinamento de drivers</a> sabe muito bem do que estou falando…:)</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sim, você precisa saber ler datasheets e escovar bits. Precisa saber (muito bem) linguagem C, principalmente trabalhar com ponteiros e estruturas de dados mais complexas. Precisa conhecer também arquitetura de sistemas operacionais, e entender como o Linux escalona processos, gerencia a memória e controla o acesso aos dispositivos de I/O. Precisa conhecer os múltiplos sub-sistemas do kernel e sua API, frameworks e infraestruturas de barramento. Enfim, não será do dia para a noite que você se transformará em um desenvolvedor de drivers para o kernel Linux. O processo de aprendizado vai exigir de você muita força de vontade e perseverança.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas nem tudo são drivers em kernel space… Sim, é possível escrever uma aplicação em Linux que possa acessar diretamente um dispositivo de hardware! À essa aplicação (ou biblioteca) damos o nome de user space device driver.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">E FUNCIONA?</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sim, funciona! E tem algumas vantagens:</span></p>
<ul>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Mais fácil de implementar, já que temos acesso às ferramentas e bibliotecas que estamos acostumados a usar no desenvolvimento de aplicações.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Pode ser desenvolvido em qualquer linguagem de programação: C, C++, até Java e Python!</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Qualquer bug no driver rodando em espaço de usuário não vai impactar o funcionamento do kernel.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Processo de debugging fica bem mais fácil.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Facilita a distribuição e manutenção do driver, já que o mesmo binário pode rodar em diferentes versões do kernel.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A memória de processo pode ir para swap (o que também pode ser uma desvantagem!).</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Se você precisa escrever um driver proprietário, pode evitar problemas com licenças de módulos do kernel.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">O driver pode ter processamento intensivo, pois em user space sempre haverá preempção.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Um driver em user space tem acesso completo ao sistema de arquivos.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas se fossem apenas vantagens, não existiriam drivers rodando em kernel space! Drivers que rodam em espaço de usuário possuem algumas desvantagens:</span></p>
<ul>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Dependendo do acesso realizado pelo driver pode ser necessário ter privilégios de root.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Se não for feito da forma correta, é possível ter problemas de segurança.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Maior latência no tratamento de eventos e overhead de processamento devido às trocas de contexto, cópias de buffers entre kernel space e user space, swap de páginas de memória em disco, etc.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Mais difícil de implementar acesso concorrente aos dispositivos de hardware (o driver deve ter uma arquitetura cliente/servidor).</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Sem as vantagens de ter um driver mantido pela comunidade (manutenção, revisão de código, etc).</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Problemas de portabilidade do driver em diferentes sistemas, já que cada driver poderá ter seu padrão de comunicação com as camadas mais altas da aplicação.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">De qualquer forma, pela facilidade na implementação, um driver em user space pode ser a solução para aquele problema simples que você precisa resolver. Vamos ver então como isso funciona?</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">COMO FUNCIONA?</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O kernel provê alguns mecanismos de acesso direto à um dispositivo de hardware por uma aplicação, dentre eles:</span></p>
<ul>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Mapeamento de arquivo em memória com a função <em>mmap()</em>.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Userspace I/O (UIO).</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Frameworks do kernel (GPIO, USB, I2C, SPI).</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vamos dar uma olhada nestes mecanismos separadamente.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">MMAP</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O mmap é uma chamada de sistema que possibilita o mapeamento de um arquivo em memória. Tá, mas para que serve isso?</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um exemplo. Todo sistema Linux possui normalmente o arquivo <em>/dev/mem</em>. Esse arquivo é exportado por um módulo do kernel, e possibilita o acesso direto à memória física do hardware! Isso significa que, se você abrir este arquivo e escrever na posição 0 dele, estará escrevendo na primeira posição da memória física do seu hardware! Você precisa ter privilégios de root para executar tal operação.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Desta forma, fica fácil trabalhar com dispositivos de hardware que mapeiam seus registradores em memória. É só identificar o endereço do registrador mapeado em memória, abrir e indexar o /dev/mem, e voilá! Você tem acesso ao seu dispositivo de hardware diretamente de uma aplicação.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas abrir, indexar e acessar um arquivo é um procedimento bem mais complicado que simplesmente referenciar um ponteiro. Ele exige o uso da API de acesso à arquivos (<em>open()</em>, <em>read()</em>, <em>write()</em>, <em>lseek()</em>, etc), além de adicionar um overhead de processamento, já que toda operação de acesso à arquivo irá gerar uma chamada de sistema, passando obrigatoriamente pelo kernel.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E se você pudesse ter um ponteiro para referenciar diretamente esta região de memória? É aí que entra a chamada de sistema <em>mmap()</em>. Ela possibilita o mapeamento de qualquer região de um arquivo em memória!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Veja por exemplo o código abaixo:</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define MAP_SIZE 4096UL </span>
<span style="color: #339933;">#define MAP_MASK (MAP_SIZE - 1) </span>
&nbsp;
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>reg<span style="color: #339933;">;</span>
    <span style="color: #993333;">void</span> <span style="color: #339933;">*</span>map_base<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> fd<span style="color: #339933;">;</span>
    <span style="color: #993333;">off_t</span> target <span style="color: #339933;">=</span> <span style="color: #208080;">0x53F04000</span><span style="color: #339933;">;</span>
&nbsp;
    fd <span style="color: #339933;">=</span> open<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/dev/mem&quot;</span><span style="color: #339933;">,</span> O_RDWR <span style="color: #339933;">|</span> O_SYNC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    map_base <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> MAP_SIZE<span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE<span style="color: #339933;">,</span> MAP_SHARED<span style="color: #339933;">,</span> fd<span style="color: #339933;">,</span> 
                    target <span style="color: #339933;">&amp;</span> ~MAP_MASK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    reg <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>map_base <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>target <span style="color: #339933;">&amp;</span> MAP_MASK<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    reg <span style="color: #339933;">&amp;=</span> <span style="color: #208080;">0x01</span><span style="color: #339933;">;</span>
&nbsp;
    munmap<span style="color: #009900;">&#40;</span>map_base<span style="color: #339933;">,</span> MAP_SIZE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    close<span style="color: #009900;">&#40;</span>fd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Na linha 11 o arquivo <em>/dev/mem</em> é aberto. Na linha 13 mapeio a região de memória que se encontra o registrador 0x53F04000, e na linha 17 eu seto o bit 1 deste registrador! Fácil!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Este mecanismo permite que uma aplicação acesse qualquer dispositivo de I/O mapeado em memória.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Obs: o exemplo acima não verifica o retorno das funções para simplificar o código. Se você for usar este código como base, não se esqueça de verificar o retorno das funções!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O acesso ao framebuffer por exemplo também funciona desta forma. Os drivers de interfaces de vídeo exportam um arquivo em </span><em style="font-family: verdana, geneva; font-size: 14px;">/dev/fbX</em><span style="font-family: verdana, geneva; font-size: 14px;">, possibilitando que uma aplicação ou driver em user space acesse diretamente a memória de vídeo do display.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Existe até uma ferramenta chamada <a href="http://man.cx/devmem2(1)" target="_blank"><em>devmem2</em></a> (ou devmem no Busybox) para facilitar este acesso na linha de comandos. Por exemplo, o comando abaixo escreve 0x10 no registrador 0x550F00010:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ devmem2 0x550F00010 b 0x10</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para mais informações sobre a chamada de sistema <em>mmap()</em>, dê uma olhada em sua página de manual:</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ man mmap</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O uso do mmap para desenvolver um driver em espaço de usuário tem algumas deficiências. Se você precisar de acesso simultâneo ao dispositivo, precisará implementar um mecanismo cliente/servidor (é o que os drivers de placa de vídeo em user space implementam). Seu uso, se não for bem implementado, pode deixar o sistema inseguro e instável. Além disso, esta interface não provê nenhum mecanismo para tratar interrupções.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">É aí que entra o Userspace I/O (UIO).</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">UIO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O UIO é um framework do kernel, disponível desde a versão 2.6.23, que possibilita acesso direto à um dispositivo de hardware, com suporte básico ao processamento de interrupções.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">É composto por um pequeno componente em kernel space responsável pelo mapeamento de memória e pelo registro das interrupções, deixando a lógica do driver para ser implementada em user space. E diferentemente do mmap, permite mapear apenas a memória do dispositivo, e não de todo o sistema. Portanto, é mais seguro de usar.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas como ele funciona? Ele exporta um arquivo em <em>/dev/uioX</em> (onde X é o número do device) possibilitando mapear e acessar a memória do dispositivo em espaço de usuário, também via <em>mmap()</em>. E permite capturar interrupções lendo este mesmo arquivo, via funções <em>read()</em> ou <em>select()</em> por exemplo. Uma biblioteca chamada <a href="http://sourceforge.net/projects/libuio/" target="_blank">libuio</a> esta disponível para facilitar o uso deste framework.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Veja o exemplo abaixo:</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int32_t</span> irq_count<span style="color: #339933;">,</span> enable_int <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">void</span> <span style="color: #339933;">*</span>map_addr
    <span style="color: #993333;">int</span> fd<span style="color: #339933;">;</span>
&nbsp;
    fd <span style="color: #339933;">=</span> open<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/dev/uio0&quot;</span><span style="color: #339933;">,</span> O_RDWR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    map_addr <span style="color: #339933;">=</span> mmap<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">4096</span><span style="color: #339933;">,</span> PROT_READ <span style="color: #339933;">|</span> PROT_WRITE<span style="color: #339933;">,</span> 
                    MAP_SHARED<span style="color: #339933;">,</span> fd<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    write<span style="color: #009900;">&#40;</span>fd<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>enable_int<span style="color: #339933;">,</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>read<span style="color: #009900;">&#40;</span>fd<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>irq_count<span style="color: #339933;">,</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Interrupted!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    munmap<span style="color: #009900;">&#40;</span>map_addr<span style="color: #339933;">,</span> <span style="color: #0000dd;">4096</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    close<span style="color: #009900;">&#40;</span>fd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Na linha 7 o arquivo é aberto e na linha 9 o arquivo é mapeado em memória, retornando na variável <em>map_addr</em> um ponteiro para acessar diretamente a região de memória do dispositivo de hardware. Na linha 12 a interrupção é habilitada e na linha 14 o processo bloqueia esperando por uma interrupção. </span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Obs: este exemplo também não verifica o retorno das funções para simplificar o código. Se você for usar este código como base, não se esqueça de verificar o retorno das funções!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para mais informações sobre o UIO, dê uma olhada na documentação do kernel <a href="https://www.kernel.org/doc/htmldocs/uio-howto.html" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O UIO tem alguma deficiência? Sim, algumas. Ele só funciona quando o acesso ao dispositivo pode ser mapeado em memória. E não funciona com alguns tipos de dispositivos que precisam se integrar às camadas do kernel como placas de rede, dispositivos seriais, dispositivos USB e dispositivos de bloco. Além disso, o tempo de resposta para atender uma interrupção em user space pode ser um impeditivo, e ele não suporta DMA.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Na <a href="http://sergioprado.org/user-space-device-drivers-no-linux-parte-2/" target="_blank">segunda parte</a> deste artigo veremos como alguns frameworks do kernel para acesso à interfaces de hardware e barramentos (GPIO, USB, SPI, I2C, etc) possibilitam o desenvolvimento de drivers em user space.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Até lá!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/user-space-device-drivers-no-linux-parte-1/">User Space Device Drivers no Linux — Parte 1</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/user-space-device-drivers-no-linux-parte-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hacking the Xbox</title>
		<link>http://sergioprado.org/hacking-the-xbox/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hacking-the-xbox</link>
		<comments>http://sergioprado.org/hacking-the-xbox/#comments</comments>
		<pubDate>Wed, 15 May 2013 01:54:11 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Resenhas]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3664</guid>
		<description><![CDATA[<p>O ótimo livro de engenharia reversa de hardware Hacking the Xbox liberado gratuitamente por Andrew Huang.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/hacking-the-xbox/">Hacking the Xbox</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Aos 14 anos, Aaron Swartz ajudou no desenvolvimento da especificação do <a href="http://pt.wikipedia.org/wiki/RSS" target="_blank">RSS</a>. Aos 19, sua empresa fundiu com o <a href="http://www.reddit.com/" target="_blank">Reddit</a>, um site de notícias de cunho social, que foi comprado em seguida, deixando-o bem financeiramente ainda jovem. E então tornou-se um ativista e defensor da livre circulação de informações na Internet.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Em 2011, liderou uma campanha para previnir o <a href="http://pt.wikipedia.org/wiki/Stop_Online_Piracy_Act" target="_blank">SOPA</a>, um conjunto de leis com o objetivo de aplicar censura na Internet. Neste mesmo ano, foi acusado de hackear os servidores do MIT para roubar milhões de arquivos da biblioteca de artigos acadêmicos. Swartz era contrário à prática de compensar financeiramente as editoras, e não os autores, e de cobrar o acesso aos artigos, limitando o accesso para finalidades acadêmicas. Foi perseguido durante quase dois anos pelo governo federal americano. Um julgamento marcado para abril deste ano poderia levá-lo para a prisão por até 35 anos!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas este julgamento não aconteceu. Em 11 de janeiro de 2013, ele se suicidou em seu apartamento no Brooklyn. De forma trágica, tornou-se um dos símbolos da liberdade de informações na Internet. Mais informações sobre a vida de Swartz <a href="http://pt.wikipedia.org/wiki/Aaron_Swartz" target="_blank">aqui</a>, <a href="http://www.rememberaaronsw.com/" target="_blank">aqui</a> e <a href="http://m.rollingstone.com/entry/view/id/35684/pn/all/p/0/?KSID=b5be5508d217fb527b1bf365c7159e6d" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Acontece que <a href="http://www.bunniestudios.com/" target="_blank">Andrew “bunnie” Huang</a>, em homenagem à Aaron Swartz, resolveu liberar gratuitamente seu livro Hacking the Xbox. Das palavras de bunnie, traduzidas livremente por mim:</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">“Enquanto você lê este livro, espero que se lembre do quanto a liberdade é importante para a comunidade de hacking, e que esteja disposto à apoiar as mesmas crenças defendidas por Aaron.”</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E o livro é realmente muito bom! Ele descreve desde os elementos mais básicos do hardware do XBox, explicando seu sistema de segurança, e passando por diversas técnicas de engenharia reversa. Inclusive, um dos últimos capítulos ensina a fazer um upgrade no XBox, ou seja, instalar o Linux! :)</span></p>
<p style="text-align: center;"><a href="http://nostarch.com/xboxfree" target="_blank"><img class="aligncenter size-full wp-image-3667" alt="xbox big Hacking the Xbox" src="http://sergioprado.org/wp-content/uploads/2013/05/xbox_big.jpg" width="250" height="375" title="Hacking the Xbox" /></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Confesso que fiquei com vontade de comprar o XBox depois de folhear este livro, e tenho certeza que você também ficará!</span><br /> <br /><span style="font-family: verdana, geneva; font-size: 14px;">O livro pode ser baixado <a href="http://sergioprado.org/wp-content/plugins/download-monitor/download.php?id=32" target="_blank">aqui</a> ou no site da No Starch Press <a href="http://nostarch.com/xboxfree" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Happy Hacking!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/hacking-the-xbox/">Hacking the Xbox</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/hacking-the-xbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aberta nova turma de Linux embarcado em Porto Alegre/RS</title>
		<link>http://sergioprado.org/aberta-nova-turma-de-linux-embarcado-em-porto-alegrers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aberta-nova-turma-de-linux-embarcado-em-porto-alegrers</link>
		<comments>http://sergioprado.org/aberta-nova-turma-de-linux-embarcado-em-porto-alegrers/#comments</comments>
		<pubDate>Mon, 06 May 2013 13:32:38 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[imx53]]></category>
		<category><![CDATA[Linux embarcado]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3658</guid>
		<description><![CDATA[<p>Nova turma do treinamento Linux embarcado com o i.MX53 em Porto Alegre/RS.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/aberta-nova-turma-de-linux-embarcado-em-porto-alegrers/">Aberta nova turma de Linux embarcado em Porto Alegre/RS</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p>Estão abertas as inscrições para uma nova turma do treinamento de <a href="http://e-labworks.com/treinamentos/linux-embarcado-com-o-i-mx53/" target="_blank">Linux embar­cado com o i.MX53</a>, real­izado em parceria com a Freescale, desta vez em Porto Alegre.</p>
<p>O treina­mento tem um inves­ti­mento de ape­nas R$100,00, e será real­izado nos dias 6 e 7 de junho na sede da <a href="http://www.softsul.org.br/" target="_blank">Softsul</a>, na Rua Padre Chagas, 79, bairro Moinhos de Vento, Porto Alegre/RS.</p>
<p>Para quem estiver inter­es­sado, envie um e-mail para <a href="mailto:treinamentos@e-labworks.com" target="_blank">treinamentos@e-labworks.com</a> com seu nome com­pleto, empresa que tra­balha e e-mail de contato.</p>
<p>Um abraço,</p>
<p>Ser­gio Prado</p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/aberta-nova-turma-de-linux-embarcado-em-porto-alegrers/">Aberta nova turma de Linux embarcado em Porto Alegre/RS</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/aberta-nova-turma-de-linux-embarcado-em-porto-alegrers/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Beaglebone Black</title>
		<link>http://sergioprado.org/beaglebone-black/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=beaglebone-black</link>
		<comments>http://sergioprado.org/beaglebone-black/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 02:07:22 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Beagleboard]]></category>
		<category><![CDATA[Produtos]]></category>
		<category><![CDATA[beaglebone]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3647</guid>
		<description><![CDATA[<p>Lançamento da Beaglebone Black, uma nova Beagle, melhor, mais barata e 100% open source!</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/beaglebone-black/">Beaglebone Black</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Hoje começaram as vendas da <a href="http://beagleboard.org/Products/BeagleBone%20Black" target="_blank">Beaglebone Black</a>, o novo filhote da família de cachorrinhos 100% open-source que levam os chips da Texas.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">De baixíssimo custo, ela deve bater de frente com a Raspberry Pi, principalmente para o público brasileiro. Continue lendo para saber o porquê!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">A PLACA</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A Beaglebone Black é baseada no <a href="http://www.ti.com/product/am3359" target="_blank">Sitara AM335x</a> da Texas Instruments, composta por um ARM Cortex-A8 de 1GHz, um acelerador gráfico 3D POWERVR SGX e uma unidade de processamento programável de tempo real (PRU-ICSS), possibilitando desenvolver separadamente do core principal, aplicações e protocolos de tempo real como EtherCAT, PROFINET, EtherNet/IP, PROFIBUS e Ethernet Powerlink.</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/am335x.png" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3649" alt="am335x Beaglebone Black " src="http://sergioprado.org/wp-content/uploads/2013/04/am335x.png" width="450" height="468" title="Beaglebone Black " /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A placa possui 512MB de RAM, flash interna de 2GB (eMMC) e entrada para cartão MicroSD, portas USB host e device, interface Ethernet, saída HDMI via um conector microHDMI, leds e botões, e pode ser alimentada pela porta USB ou por uma fonte externa de 5V. Possui ainda 2 barramentos de 46 pinos, sendo totalmente compatível com os <a href="http://beagleboardtoys.com/products.html" target="_blank">capes da Beaglebone</a>.</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/CONN_REVA5A.jpg" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3650" alt="CONN REVA5A Beaglebone Black " src="http://sergioprado.org/wp-content/uploads/2013/04/CONN_REVA5A.jpg" width="550" height="367" title="Beaglebone Black " /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Comparada à Beaglebone antiga, a Beaglebone Black é muito melhor, com CPU mais rápida, dobro de memória, saída HDMI e flash interna (eMMC). Porém, agora a UART esta disponível apenas no barramento de pinos. Veja a tabela abaixo para maiores detalhes:</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/BBvsBBB.jpg" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3651" alt="BBvsBBB Beaglebone Black " src="http://sergioprado.org/wp-content/uploads/2013/04/BBvsBBB.jpg" width="459" height="157" title="Beaglebone Black " /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O hardware da Beaglebone Black é 100% open-source, com todos os arquivos disponíveis (esquemático, BOM, PCB, etc). Mais detalhes <a href="http://circuitco.com/support/index.php?title=BeagleBoneBlack#Hardware_Files" target="_blank">neste link</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E três distribuições famosas já estão preparadas para a Beaglebone Black: <a href="http://beagleboard.org/project/angstrom/" target="_blank">Angstrom</a>, <a href="http://beagleboard.org/project/rowboat/" target="_blank">Android</a> e <a href="http://beagleboard.org/project/ubuntu/" target="_blank">Ubuntu</a>.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">COMO COMPRAR?</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora vai ser difícil comprar, a <a href="http://www.newark.com/jsp/bespoke/bespoke7.jsp?bespokepage=newark/en_US/landing/beaglebone/beaglebone.jsp" target="_blank">Farnell</a> e a <a href="http://br.mouser.com/ProductDetail/BeagleBoard-by-CircuitCo/BB-BBLK-000/?qs=sGAEpiMZZMs022Iw%2foIyCxWBXUznn0zI" target="_blank">Mouser</a> colocaram um lote à venda, que acabou rapidamente.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Segundo o site do projeto, a produção deve estar com 100% de capacidade até o fim de maio.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora a boa notícia para nós brasileiros: a Texas pretende vender a Beaglebone Black na <a href="https://estore.ti.com/" target="_blank">TI eStore</a>. Quem já comprou lá sabe que, para compras até $50, a Texas banca o frete e possíveis impostos. Ou seja, quando a Beaglebone Black começar a ser vendida na TI eStore, você vai conseguir comprá-la por R$100,00!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Isso significa também que, se a Texas fizer um marketing legal da Beaglebone Black no Brasil, muitos que estão avaliando o uso da Raspberry Pi mudarão de idéia. A nova Beagle possui muito mais recursos, é 100% open source, e baseada em um chip da Texas, cujo suporte aos engenheiros e hobbystas nem se compara com a Broadcom.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora é só esperar a oportunidade de colocarmos a mão neste brinquedinho…:)</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/beaglebone-black/">Beaglebone Black</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/beaglebone-black/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Nova turma do treinamento de Linux em São Paulo por R$100,00!</title>
		<link>http://sergioprado.org/nova-turma-do-treinamento-de-linux-em-sao-paulo-por-r10000/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nova-turma-do-treinamento-de-linux-em-sao-paulo-por-r10000</link>
		<comments>http://sergioprado.org/nova-turma-do-treinamento-de-linux-em-sao-paulo-por-r10000/#comments</comments>
		<pubDate>Sun, 14 Apr 2013 15:31:22 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[imx53]]></category>
		<category><![CDATA[Linux embarcado]]></category>
		<category><![CDATA[treinamento]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3641</guid>
		<description><![CDATA[<p>Nova turma em São Paulo do treinamento Linux embarcado com o i.MX53.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/nova-turma-do-treinamento-de-linux-em-sao-paulo-por-r10000/">Nova turma do treinamento de Linux em São Paulo por R$100,00!</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p>Abri oficialmente a próxima turma em São Paulo do treinamento de Linux embarcado com o i.MX53, realizado em parceria com a Freescale (mais informações sobre o conteúdo do treinamento <a href="http://e-labworks.com/treinamentos/linux-embarcado-com-o-i-mx53/" target="_blank">aqui</a>).</p>
<p>O treinamento tem um investimento de apenas R$100,00, e será realizado nos dias 23 e 24 de maio na Av. Paulista, 1009, São Paulo/SP.</p>
<p><del>Para quem estiver interessado, envie um e-mail para <a href="mailto:treinamentos@e-labworks.com" target="_blank">treinamentos@e-labworks.com</a> com seu nome completo, empresa que trabalha e e-mail de contato.</del></p>
<p><strong>Atualização</strong>: As inscrições para este treinamento já se encerraram.</p>
<p>Um abraço,</p>
<p>Sergio Prado</p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/nova-turma-do-treinamento-de-linux-em-sao-paulo-por-r10000/">Nova turma do treinamento de Linux em São Paulo por R$100,00!</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/nova-turma-do-treinamento-de-linux-em-sao-paulo-por-r10000/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wandboard e i.MX6 da Freescale</title>
		<link>http://sergioprado.org/wandboard-e-i-mx6-da-freescale/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wandboard-e-i-mx6-da-freescale</link>
		<comments>http://sergioprado.org/wandboard-e-i-mx6-da-freescale/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 00:43:25 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Produtos]]></category>
		<category><![CDATA[imx6]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wandboard]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=3618</guid>
		<description><![CDATA[<p>Avaliação do kit de desenvolvimento Wandboard, baseado no i.MX6 da Freescale.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/wandboard-e-i-mx6-da-freescale/">Wandboard e i.MX6 da Freescale</a>.</p></p>]]></description>
				<content:encoded><![CDATA[
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A tecnologia realmente evolui a passos largos. Quem diria há alguns anos atrás que estaríamos andando hoje com sistemas multicore dentro de nossos bolsos!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E a evolução do mercado mobile já esta impactando em diversos aspectos o design de aplicações e produtos em sistemas embarcados. Seja o custo cada vez mais atrativo destes SoCs multicore, seja o interesse em sistemas operacionais com “fome de processamento” como o Android.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Por este motivo, em breve estaremos projetando produtos com CPUs multicore. Principalmente aqueles que exigem uma interface com o usuário mais rica e cheia de recursos.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Seguindo esta tendência estão os fabricantes de semicondutores, seja a TI com as linhas <a href="http://www.ti.com/lsds/ti/omap-applications-processors/omap-4-processors-products.page" target="_blank">OMAP4</a> e <a href="http://www.ti.com/lsds/ti/omap-applications-processors/omap-5-processors-products.page" target="_blank">OMAP5</a>, a Freescale com as linhas <a href="http://www.freescale.com/webapp/sps/site/taxonomy.jsp?code=IMX6X_SERIES" target="_blank">i.MX6</a> e <a href="http://www.freescale.com/webapp/sps/site/homepage.jsp?code=VYBRID" target="_blank">Vybrid</a>, e outras mais voltadas à mobile como a Nvidia e sua plataforma <a href="http://www.nvidia.com/object/tegra-4-processor.html" target="_blank">Tegra</a> ou a Qualcomm e sua plataforma <a href="http://www.qualcomm.com.br/products/snapdragon" target="_blank">Snapdragon</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Dentro desta nova linha de SoCs multicore esta o i.MX6 da Freescale, baseado na arquitetura ARM Cortex-A9, e disponível nas versões single, dual e quad-core.</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/imx61.jpg" target="_blank"><img class="aligncenter size-full wp-image-3624" alt="imx61 Wandboard e i.MX6 da Freescale" src="http://sergioprado.org/wp-content/uploads/2013/04/imx61.jpg" width="550" height="384" title="Wandboard e i.MX6 da Freescale" /></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Já existem alguns kits de desenvolvimento bem interessantes para trabalhar com esta família de SOCs, incluindo o <a href="http://boundarydevices.com/products/sabre-lite-imx6-sbc/" target="_blank">SABRE Lite</a>, o <a href="http://boundarydevices.com/products/nitrogen6x-board-imx6-arm-cortex-a9-sbc/" target="_blank">Nitrogen6X</a> e a <a href="http://www.wandboard.org/" target="_blank">Wandboard</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Achei a Wandboard em especial bem interessante. Por apenas $99 você leva um kit de desenvolvimento com ARM-Cortex A9 dual-core, 1G de RAM, com todas as interfaces que estamos acostumados a encontrar em outros kits de desenvolvimento, mas incluindo uma interface Ethernet Gigabit, Wi-Fi e Bluetooth!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">WANDBOARD</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A Wandboard é um projeto sem fins lucrativos, desenvolvido por alguns engenheiros em seu tempo livre, e vem em dois sabores:</span></p>
<ol>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A Wandboard Solo é baseada no i.MX6 Solo, um core Cortex-A9, 512M de RAM DDR3, entradas e saídas de áudio (incluindo uma saída ótica S/PDIF), saída de vídeo HDMI (1080p), interface de câmera, porta serial, interface Ethernet Gigabit, USB host e OTG, interface SATA, cartão micro SD e alguns conectores de expansão. Esta placa custa $79.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">A Wandboard Dual possui tudo o que a Solo tem, porém é baseada no i.MX6 Duallite, um ARM Cortex-A9 dual-core, com 1G de RAM DDR3 e interfaces WiFi e Bluetooth! Esta realmente me interessou, principalmente pelas características do hardware e preço, já que por apenas $99 você leva esta plaquinha. Para você ter uma idéia, ela é muito parecida com a Pandaboard, que no momento em que escrevo este artigo, esta saindo por $181 na Mouser.</span></li>
</ol>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No site do projeto tem um <a href="http://www.wandboard.org/index.php/details" target="_blank">comparativo completo</a> entre estas duas placas.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Uma característica legal da Wandboard é que ela é composta pelo módulo com CPU e memória (SOM) e pela placa com os periféricos, possibilitando o upgrade da Solo para a Dual apenas trocando o módulo da CPU.</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/wandboard1.png" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3625" alt="wandboard1 Wandboard e i.MX6 da Freescale" src="http://sergioprado.org/wp-content/uploads/2013/04/wandboard1.png" width="523" height="480" title="Wandboard e i.MX6 da Freescale" /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O guia de usuário da placa, incluindo o esquemático, pode ser visualizado <a href="http://www.wandboard.org/images/downloads/wandboard-user-guide-20130208.pdf" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O projeto da Wandboard disponibiliza no momento em que escrevo este artigo os portes do Android Jellybean 4.1.2 e do Ubuntu 11.10. Como tenho aqui comigo uma Wandboard Solo, vamos fazer alguns testes e ver como fica a performance destes sistemas operacionais na placa?</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">ANDROID JELLYBEAN 4.1.2</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A placa não possui memória flash, então todo o sistema deve ser gravado no cartão SD.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para instalar o Android no cartão SD, basta baixar do site, descompactar e copiar para o cartão SD (substitua <em>/dev/sdX</em> no comando abaixo pelo arquivo de dispositivo do seu cartão SD):</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ wget http://www.wandboard.org/images/downloads/android-4.1.2-wand-solo-20130314.zip
$ unzip android-4.1.2-wand-solo-20130314.zip
$ sudo dd if=android-4.1.2-wand-solo-20130314.img of=/dev/sdX bs=1M</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O primeiro boot levou em torno de 3 minutos para exibir a tela inicial:</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/DSC01485.jpg" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3626" alt="DSC01485 Wandboard e i.MX6 da Freescale" src="http://sergioprado.org/wp-content/uploads/2013/04/DSC01485.jpg" width="550" height="413" title="Wandboard e i.MX6 da Freescale" /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Logo de cara percebi que o porte ainda não esta 100%. Na verdade, esta bem longe disso. As aplicações rodam muito lentamente no device, apresentando muitos erros como este abaixo:</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/DSC01484.jpg" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3627" alt="DSC01484 Wandboard e i.MX6 da Freescale" src="http://sergioprado.org/wp-content/uploads/2013/04/DSC01484.jpg" width="550" height="413" title="Wandboard e i.MX6 da Freescale" /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">De tanto insistir para que o navegador abrisse uma página web, O Android abriu o bico, gerou um kernel oops, iniciou o low-memory killer e começou a matar um monte de processos!</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">[ 802.583548] Backtrace: 
[ 802.587007] [] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c)
[ 802.596426] r6:00000000 r5:000000d1 r4:00000001 r3:00000002
[ 802.603633] [] (dump_stack+0x0/0x1c) from [] (warn_alloc_failed+0xec/0x10c)
[ 802.613394] [] (warn_alloc_failed+0x0/0x10c) from [] (__alloc_pages_nodemask+0x5e8/0x640)
[ 802.624505] r3:00000000 r2:00000000
[ 802.628848] r7:00000007 r6:00000001 r5:971a4000 r4:000000d1
[ 802.635714] [] (__alloc_pages_nodemask+0x0/0x640) from [] (__dma_alloc+0xcc/0x2bc)
[ 802.646331] [] (__dma_alloc+0x0/0x2bc) from [] (dma_alloc_coherent+0x5c/0x68)
[ 802.656530] [] (dma_alloc_coherent+0x0/0x68) from [] (vpu_alloc_dma_buffer+0x34/0x5c)
[ 802.667825] r7:00000026 r6:971a4000 r5:805d0268 r4:805d0290
[ 802.675159] [] (vpu_alloc_dma_buffer+0x0/0x5c) from [] (vpu_ioctl+0x5dc/0x7e0)
[ 802.684515] r4:2bc281c0 r3:00000000
[ 802.688940] [] (vpu_ioctl+0x0/0x7e0) from [] (do_vfs_ioctl+0x4ec/0x560)
[ 802.697828] r8:8003cd84 r7:00000026 r6:874c61e0 r5:2bc281c0 r4:9a0b3d60
[ 802.705846] [] (do_vfs_ioctl+0x0/0x560) from [] (sys_ioctl+0x40/0x64)
[ 802.714455] r9:971a4000 r8:8003cd84 r7:00000026 r6:00005608 r5:2bc281c0
[ 802.725120] r4:874c61e0
[ 802.728036] [] (sys_ioctl+0x0/0x64) from [] (ret_fast_syscall+0x0/0x30)
[ 802.737872] r7:00000036 r6:2bc281c0 r5:00000000 r4:2bc281c0
[ 802.744629] Mem-info:
[ 802.746996] Normal per-cpu:
[ 802.750254] CPU 0: hi: 90, btch: 15 usd: 28
[ 802.755712] active_anon:60703 inactive_anon:57 isolated_anon:0
[ 802.755718] active_file:7528 inactive_file:7555 isolated_file:0
[ 802.755723] unevictable:157 dirty:0 writeback:6 unstable:0
[ 802.755728] free:929 slab_reclaimable:718 slab_unreclaimable:1783
[ 802.755733] mapped:11602 shmem:64 pagetables:2130 bounce:0
[ 802.788202] Normal free:3684kB min:2400kB low:3000kB high:3600kB active_anon:242840kB inactive_anon:228kB active_file:30032kB inactive_file:30112kB unevictable:628kB isolated(anon):0kB isolated(file):0kB present:360320kB mlocked:0kB dirty:0kB writeback:24kB mapped:46248kB shmem:256kB slab_reclaimable:2872kB slab_unreclaimable:7132kB kernel_stack:3744kB pagetables:8520kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
[ 802.830078] lowmem_reserve[]: 0 0 0
[ 802.834020] Normal: 21*4kB 78*8kB 127*16kB 28*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB 0*16384kB 0*32768kB = 3700kB
[ 802.851148] 15257 total pagecache pages
[ 802.855780] 0 pages in swap cache
[ 802.859508] Swap cache stats: add 0, delete 0, find 0/0
[ 802.865419] Free swap = 0kB
[ 802.868691] Total swap = 0kB
[ 802.891393] 131072 pages of RAM
[ 802.895273] 1567 free pages
[ 802.898145] 44904 reserved pages
[ 802.902257] 1766 slab pages
[ 802.905348] 132655 pages shared
[ 802.909233] 0 pages swap cached
[ 802.912645] Physical memory allocation error!
[ 808.849260] select 3178 (droid.provision), adj 15, size 5413, to kill
[ 808.856114] select 3426 (ndroid.contacts), adj 15, size 6077, to kill
[ 808.862769] send sigkill to 3426 (ndroid.contacts), adj 15, size 6077
[ 809.078749] select 3178 (droid.provision), adj 15, size 5409, to kill
[ 809.085393] send sigkill to 3178 (droid.provision), adj 15, size 5409
[ 812.159744] select 2911 (ndroid.settings), adj 13, size 6814, to kill
[ 812.166375] select 3199 (ndroid.calendar), adj 14, size 5823, to kill
[ 812.172915] select 3552 (com.android.mms), adj 14, size 5886, to kill</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Realmente, pedir para o Android 4.1 rodar em uma CPU com 512M de RAM e apenas um core pode ser muito! É bem provável que na versão dual-core da placa, com 1G de RAM, a performance esteja bem melhor. Vamos então para o Ubuntu…</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">UBUNTU 11.10</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para instalar o Ubuntu no cartão SD, o processo é o mesmo. Basta baixar a imagem do site, descompactar e copiar para o cartão SD (não esqueça de substituir <em>/dev/sdX</em> no comando abaixo pelo arquivo de dispositivo do seu cartão SD):</span></p>


<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">$ wget http://www.wandboard.org/images/downloads/ubuntu-11.10-wand-solo-20130226.zip
$ unzip ubuntu-11.10-wand-solo-20130226.zip
$ sudo dd if=ubuntu-11.10-wand-solo-20130226.img of=/dev/sdX bs=1M</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O Ubuntu também levou uns 3 minutos para iniciar:</span></p>
<p style="text-align: center;"><a href="http://sergioprado.org/wp-content/uploads/2013/04/DSC01487.jpg" target="_blank"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-3628" alt="DSC01487 Wandboard e i.MX6 da Freescale" src="http://sergioprado.org/wp-content/uploads/2013/04/DSC01487.jpg" width="550" height="413" title="Wandboard e i.MX6 da Freescale" /></span></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O Ubuntu me pareceu bem mais estável, com as aplicações abrindo rapidamente, e com um tempo de resposta bom. Mas não cheguei a fazer testes mais pesados como tocar um vídeo em full HD.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">MAIS UMA OPÇÃO?</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sim, esta plataforma é mais uma opção interessante para prototipar e desenvolver novos projetos, com um custo benefício fantástico. </span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Como o projeto ainda é recente, veremos como ele vai evoluir nos próximos meses. Gostaria por exemplo de ver um módulo com i.MX6 Quad-core.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">COMO COMPRAR?</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A Wandboard é vendida por algumas distribuidoras, incluindo Digi-Key, Future e Mouser. Não existe um preço tabelado, então consulte o preço antes de comprar. Por exemplo, no momento em que escrevo este artigo, a Wandboard Dual sai por $114,55 na Digi-Key e $93,95 na Mouser! Para comprar, este é o <a href="http://www.wandboard.org/index.php/buy" target="_blank">link</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Bom divertimento!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<span class="clear"></span><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/wandboard-e-i-mx6-da-freescale/">Wandboard e i.MX6 da Freescale</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/wandboard-e-i-mx6-da-freescale/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.501 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-06-19 11:01:13 -->
