Entenda como o Android para iPhone foi possível [Parte 1 de 2]

Postado em abr 24, 2010 nas categorias Blog, Destaque, iPhone

Entenda como o Android para iPhone foi possível [Parte 1 de 2]

Em Junho de 2008, foi anunciado oficialmente o início do projeto Linux on the iPhone, que contava com o planetbeing, hacker membro do iPhone Dev Team. O objetivo era portar o Linux para o iPhone OS, algo que já tinha sido feito em outros hardwares, como o iPod nano de primeira geração e os iPods clássicos, até a quinta geração, também conhecido como iPod video.

Um mês depois planetbeing tinha feito alguns avanços com o openiboot. Até esse momento, ele tinha escrito um simples chainloader, que só inicializava os dispositivos e depois carregava o iBoot encontrado na memória NOR do aparelho.

Para quem não sabe o que significa a memória NOR:

NOR é um chip que existe dentro dos iPods touch/iPhones que tem duas funções primárias: carregar as informações do aparelho (estado da bateria, firmware, bootloader, kernel, …) durante o Boot do mesmo. Os aplicativos (apps) quando são abertos, são processados pelo NOR, antes de serem processados pelo processador interno. A outra função é de trabalhar em conjunto com a Baseband, para flashear partes do sistema, como o Bootloader
Fonte: pH – iBlogeek Wiki

Os testes intensivos na memória fizeram com que planetbeing tentasse adicionar muitas imagens ao NOR, fazendo com que, acidentalmente, ele acabasse adicionando informações na área reservada do NVRAM, que aparece logo após o espaço reservado ao NOR. Nessa brincadeira ele apagou o SysCfg, IMG2 e parte do LLB. Nas palavras dele: “o equivalente a atirar em todos os seus orgãos vitais simultaneamente”.

Para sorte dele, ao iniciar os testes na memória NOR ele fez uma cópia da original, então conseguiu restaurar as informações contidas no SysCfg. Esse arquivo guarda informações essenciais, como o número serial do aparelho e outras informações únicas a respeito dele.

Em outubro de 2008, ele já estava debugando as comunicações feitas pela porta USB, mas teve alguns problemas com a conexão USB 2.0, então conseguiu um cabo que fazia com que fosse possível a comunicação via USB e serial ao mesmo tempo, o que ajudou muito na remoção dos bugs.

Nesse mês ele colocou o complicado driver do LCD para funcionar. Além disso, foi a primeira vez que conseguiu dar um boot com o openiboot e iniciar o projeto de criação do boot menu com imagens.

Figura 1: Um dos primeiros boots com o openiboot.

Figura 2: openiboot com o driver do LCD em funcionamento.

Figura 3: primeira versão do modo gráfico do openiboot.

O menu de boot encontrado na figura 3 funcionava da seguinte forma: o botão sleep funcionava para alternar entre o iPhone OS e o console do openiboot, que dava acesso a interface via command-line, como na figura 2. O botão home fazia a seleção do sistema.


Foi ainda em outubro de 2008 que encontramos a primeira referência a um possível port do Android, feita em uma postagem do planetbeing: “(…) yes, I’m aware of Android and their source release and yes, I know what you’re thinking”. Ainda na postagem, ele responde a uma pessoa que pergunta se “ele tentou fazer o que estamos pensando” que “rodar o android no iPhone não é algo que você simplesmente ‘sai tentando’ por um fim de semana”.

Ao receber muitas perguntas de pessoas que demonstravam não entender do que se tratava portar um sistema operacional para um dispositivo, planetbeing desabafou em uma postagem: “as pessoas acham que é só escrever, tipo, um menu de boot, para poder enfiar o Android, Windows ou qualquer coisa dentro de um aparelho, só porque temos um menu de opções para eles”.

Justificando o fato, ele explicou que para um sistema operacional rodar em um dispositivo, o código deve ter sido desenvolvido para o processador correto (x86, ARM, PPC). Além disso, deve interagir com o hardware de forma esperada e desejada.

Naquela época existiam versões do Linux compiladas em ARM (que o iPhone usava), existiam até versões do Windows Mobile que eram compiladas em ARM. Mas não adiantava nada ter os sistemas compilados se o código não consegue interagir com o hardware, pois não era uma interação simples, como botar o driver wifi para funcionar, mas uma interação low-level, de forma que impossibilitava a inicialização do sistema porque não era possível descomprimí-lo na memória RAM de forma adequada.

No próximo post, continuo a história que trouxe o Android para o Linux, falando sobre os passos seguintes que tornaram o fato possível.

Postado por Leo Borges. Outras postagens:

3 respostas para “Entenda como o Android para iPhone foi possível [Parte 1 de 2]”