Wandboard e i.MX6 da Freescale
- por Sergio Prado
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!
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.
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.
Seguindo esta tendência estão os fabricantes de semicondutores, seja a TI com as linhas OMAP4 e OMAP5, a Freescale com as linhas i.MX6 e Vybrid, e outras mais voltadas à mobile como a Nvidia e sua plataforma Tegra ou a Qualcomm e sua plataforma Snapdragon.
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.
Já existem alguns kits de desenvolvimento bem interessantes para trabalhar com esta família de SOCs, incluindo o SABRE Lite, o Nitrogen6X e a Wandboard.
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!
WANDBOARD
A Wandboard é um projeto sem fins lucrativos, desenvolvido por alguns engenheiros em seu tempo livre, e vem em dois sabores:
- 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.
- 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.
No site do projeto tem um comparativo completo entre estas duas placas.
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.
O guia de usuário da placa, incluindo o esquemático, pode ser visualizado aqui.
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?
ANDROID JELLYBEAN 4.1.2
A placa não possui memória flash, então todo o sistema deve ser gravado no cartão SD.
Para instalar o Android no cartão SD, basta baixar do site, descompactar e copiar para o cartão SD (substitua /dev/sdX no comando abaixo pelo arquivo de dispositivo do seu cartão SD):
$ 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 |
O primeiro boot levou em torno de 3 minutos para exibir a tela inicial:
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:
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!
[ 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 |
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.
Atualização: em alguns testes rápidos realizados na Wandboard Dual com a versão 4.2.2 do Android, o sistema mostrou-se muito mais rápido e responsivo.
Vamos agora para o Ubuntu…
UBUNTU 11.10
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 /dev/sdX no comando abaixo pelo arquivo de dispositivo do seu cartão SD):
$ 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 |
O Ubuntu também levou uns 3 minutos para iniciar:
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.
MAIS UMA OPÇÃO?
Sim, esta plataforma é mais uma opção interessante para prototipar e desenvolver novos projetos, com um custo benefício fantástico.
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.
COMO COMPRAR?
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 link.
Bom divertimento!
Sergio Prado