ARM e o Kernel Linux: Raspberry, ODROID…

18 de Março, 2016

ARM, Informática, Linux, Open-Source, Single Board Computer

O último artigo Raspberry Pi 3: Comprar? foi um sucesso no entanto muitas questões foram levantadas. Eu referi que a ODROID C2 era apenas para algumas pessoas por não ter suporte a versões oficiais de Debian/Ubuntu ao contrário do Raspberry Pi. Para perceber melhor isto, devemos olhar para o Kernel (o núcleo do sistema operativo) que é responsável por fazer a “ponte” entre o software e o hardware.

Linux nos nossos computadores, sistemas x86 (32-bit) ou x64, é fácil. Os CPUs são produzidos por duas empresas a Intel ou AMD e são bastante idênticos a nível de instruções e funcionamento. Os sub-sistemas e hardware redundante seguem a mesma lógica e até estão, normalmente, fora do CPU.

socNo caso dos ARMs isto é bem diferente: o SoC (“CPU”) do RPI3 (BCM2837) e da ODROID C2 (Amlogic S905) até podem ter instruções semelhantes mas os sub-sistemas e hardware redundante diferem, o segundo tem ethernet integrada, as interfaces GPIO e I2C são diferentes. Não podemos simplesmente usar o Kernel oficial do RPI3 na ODROID C2 e vice-versa.

Claro que temos o Kernel oficial, chamado mainline, que até funciona no RPI3 (de forma parcial) mas que não na ODROID C2.

Assim, nos ARMs, cada fabricante têm de disponibilizar uma versão modificada do Kernel mainline e drivers que funcionem correctamente em cada um dos seus SoCs / hardware. Isto parece simples, mas não é – existem dezenas de fabricantes que produzem centenas de SoC. O desenvolvimento do Kernel mainline é um processo rápido – estes fabricante ainda têm de actualizar as suas versões modificadas para integrar os últimos desenvolvimentos do mainline.

No mundo ideal estes fabricantes deveriam integrar as suas optimizações no projecto open-source da versão mainline, mas isto não acontece porque: a) é complexo, gera problemas e código mais complexo; b) requer bastante trabalho.

Empresas Chinesas ou Sul-Coreanas recusam-se a investir tempo e esforço em contribuir para o Kernel mainline e preferem manter versões próprias para cada SoC.

Ainda pior que isto, quando o SoC é antigo (como o Marvell Kirkwood 6281 do Sheevaplug) as empresas perdem o interesse em mantê-lo e acabamos por ficar presos em versões *muito antigas* do Kernel que têm problemas de compatibilidade com hardware moderno. Por exemplo, a Amlogic e a AllWinner andam à anos a prometer contribuir para o Kernel mainline mas nada aconteceu…

Como escolher uma placa ARM?

A decisão entre as diversas placas ARM é, na verdade, entre:

  • Suportada pelo Kernel mainline = Hardware suportado a longo prazo, estável, compatível com periféricos;
  • Não suportada pelo Kernel mainline = Hardware mais recente, poderoso e barato;

Por exemplo: as primeiras versões do RPI ou PandaBoard já não são produzidas, mas como o Kernel é mainline continuará a ser mantido e actualizado a longo prazo. No caso das ODROID são normalmente abandonadas ao fim de 1 ou 2 anos e ficam “presas” em versões antigas do Kernel.

tl;dr: Dependendo dos objectivos de cada um deveremos escolher uma placa diferente. A ODROID será sempre uma boa compra para quem a quiser utilizar para desenvolvimento / programação, servidores Web, SAMBA, etc sem um ecrã ou interfaces gráficas. O RPI será a melhor escolha para quem quer um micro-computador de instalação rápida capaz de correr os últimos sistemas Linux sem problemas e utilizar hardware genérico (placas Wifi etc).