Android é um sistema operacional mobile desenvolvido pelo Google™, baseado em Linux e totalmente aberto a desenvolvedores, concorrente direto ao iOS. Recentemente os desenvolvedores da Planetbeing iniciaram o desenvolvimento do iDroid, um projeto fantástico que permite portar o Android para o iPhone. Neste artigo vamos mostrar uma maneira bem didática de como instalar o iDroid no iPhone em dual-boot, permitindo você escolher qual sistema operacional deseja iniciar ao ligar o aparelho.
Introdução
O iDroid é um projeto recente e algumas funcionalidades ainda não foram portadas para o iPhone, mas já é possível desfrutar do sistema em seu aparelho com as funcionalidades básicas, veja abaixo como anda o status de desenvolvimento do projeto, comparando cada versão do iPhone.
Alguns Videos Demontrando Uso:
Status do projeto
iPhone 2g | iPhone 3g | iPhone 3Gs |
OpeniBoot - 100% | OpeniBoot - 100% | OpeniBoot - 10% |
CPU - 100% | CPU - 100% | CPU - 100% |
WLAN - 100% | WLAN - 100% | WLAN - 0% |
Bluetooth - 0% | Audio - 100% | Baseband - 0% |
Audio - 100% (c/ bugs) | NAND (8GB) - 100% | Bluetooth - 0% |
NAND - (4GB) 100% | NAND (16GB) - 100% | NAND (16GB) - 0% |
NAND - (8GB) 100% | NOR - 0% | Audio - 0% |
NAND - (16GB) 100% | Multi-Touch - 100% | GPS - 0% |
Baseband - 80% (c/ bugs) | Baseband - 50% | GPU - 0% |
ALS - 50% | Tri-Band HSDPA LNA - 0% | Acelelerometro - 0% |
Accelerometer - 100% | GPS - 30% |
|
PMU - 0% | ALS - 80% (necessita driver) |
|
GPU - 60% (sem aceleração) | Accelerometer - 100% |
|
| Bluetooth - 80% (necessita driver) |
|
| PMU - 0% |
|
| GPU - 0% |
|
| UMTS Transceiver - 0% |
|
| WEDGE baseband - 0% |
|
| Tritium PA-duplexers - 0% |
|
Como você pode notar, até o momento, o iDroid já está 70% funcional em iPhone’s 2g e 3g, ainda sendo portado para 3gs. Por este motivo nosso tutorial será focado para usuários do 2g/3g.
Requisitos
- Apple iPhone 3g ou 2g (ainda não suporta o 3Gs)
- O aparelho deverá estar ativado com Jailbreak (redsn0w, pwnagetool ou quickpwn), caso não esteja, siga nosso guia de jailbreak aqui.
Downloads necessários
Preparando nosso ambiente virtual Linux
O projeto iDroid pode ser manipulado em vários sistemas operacionais, mas escolhemos o Linux, por ser o mais versátil de todos, permitindo customizar e ter total controle do projeto. Não se preocupe se você não tem experiência com Linux, pois disponibilizamos uma imagem do Ubuntu 10.04 já preparada com todas
dependências necessárias,
vmware-tools instalado para facilitar a interação Windows X Linux,
conexão de internet em bridge c/ ip válido para o roteador e um diretório comun tanto no Windows quanto na máquina virtual Linux para facilitar o
compartilhamento de arquivos.
- Extraia e execute o VMware Wokstation 7.1.0, instale normalmente e ao final registre com o serial gerado pelo Keygen que está incluso no pacote que você fez download.
- Extraia todo conteúdo da imagem do Ubuntu Linux 10.04 em c:\vmware\ (se o diretório não existir, crie).
- Então apenas execute o VMware e abra a imagem, clicando em File/Open
- Selecione que você está utilizando uma cópia da imagem.
- Logue-se com a senha: infohelp.org
- Então, vá até o menu VM/Settings, em Options, vá até Settings/Shared folders e adicione um diretório qualquer de seu computador, será sua pasta de compartilhamento com o Linux, tudo que você jogar nesta pasta no Windows poderá ser acessado através do Linux (Atenção: este passo é importante).
- Então no Linux vá em Places/Computer/File System/mnt/hgfs e sua pasta estará lá, crie um atalho da mesma em seu Destkop.
- Agora configure a conexão com a internet. Para isto, vá até o menu VM/Settings e em Hardware/Network Adapter, selecione Bridged (marque o Replicate), desta forma o ip de sua placa de rede no Linux será na mesma range do DHCP de sua rede, ou seja, se você possuir um router ele atribuirá o IP de sua placa de rede virtual em sua máquina Linux.
- Verifique a conexão com a internet abrindo um Terminal e pingando o infohelp.org.
Pronto, você já tem seu ambiente de trabalho já pré-preparado para a manipulação de qualquer versão do iDroid.
O gerenciador de dual-boot
Para instalar o iDroid em seu iPhone, você deverá primeiro criar um dual-boot de seu aparelho, o que lhe permitirá escolher qual sistema será carregado ao ligar o aparelho. Para isso instalaremos o OpeniBoot.
A instalação do OpeniBoot é a mais complicada de todo o processo, pois será necesário compilar e interpretar alguns erros, de qualquer forma já deixamos a imagem com a maioria das dependências pré-configuradas.
Alguns pediram para deixarmos pré-compilado o OpeniBoot já pronto para instalação, mas optamos por ensinar o usuário a compilar, desta forma não limitamos na versão do aparelho, e será o mesmo processo para futuras atualizações do iDroid.
Métodos de instalação (didático)
Neste artigo vou apresentar dois métodos de instalação, o didático e o automático. recomendo executar e procurar entender primeiramente o método manual didático, pois dominando este método você será capaz de acompanhar todo o desenvolvimento do projeto e solucionar qualquer problema futuramente.
- Método didático – Todos os processos estão descritos e são executados manualmente, e todos erros comuns e suas soluções são citadas no tutorial.
- Método automatizado – Todo o procedimento de instalação será executado automaticamente através de um script, basta ter um iPhone já preparado com o OpeniBoot e um ambiente Linux já customizado com os passos acima.
Download da Git do OpeniBoot
Git é o pacote que contém o source do OpeniBoot. Apenas copie e cole os comandos em seu terminal no Linux.
- Primeiramente certifique-se de que está no ~/
cd ~
- Então instale o gerenciador diretamente via apt:
sudo apt-get install git-core
- Faça download da Git do OpeniBoot c/ o seguinte comando:
sudo git clone git://github.com/planetbeing/iphonelinux.git
cd iphonelinux/
Compilando o OpeniBoot pela primeira vez
Depois de uma vez compilado, você poderá instalar em qualquer aparelho com apenas um comando, porém na primeira vez terá um pouco de trabalho.
- Compile a ARM toolchain (aguarde um bom tempo pela compilação, um bom tempo mesmo. acredite)
sudo toolchain/build-toolchain.sh make
Solução para o erro: Failed to build newlib (stage: newlib_build)
sudo apt-get install texinfo
(Apenas instale o texinfo com o comando acima e reinicie a compilação do toolchain)
Solução para o erro: Failed to create symlink (stage: makesymlink)
sudo rm /usr/local/bin/arm-elf-cc
(exclua o link simbólico e reinicie a compilação do toolchain)
- Compilando o OpeniBoot.
Após a mensagem Toolchain install successful confirmando a instalação do toolchain você já poderá partir para a compilação do OpeniBoot.
- Primeiramente de um apt-get nas dependências:
sudo apt-get install libusb-dev libreadline-dev libpng12-dev libusb-1.0-0-dev
Nota: Caso esteja compilando em um sistema 64bits, você precisará dar um apt-get na libc6-dev-i386 e usaro comando export ARCH=x86_64
antes de prosseguir para os próximos passos.
cd openiboot/
- Para iPhone 3g use o comando
:
sudo PLATFORM=3G make openiboot.img3
- iPhone 2g use
:
sudo PLATFORM=IPHONE make openiboot.img3
Solução para o erro: expected specifier-qualifier-list before ‘AES_KEY’
sudo apt-get install libssl-dev
- Compile tudo em client/:
cd client
sudo make all && cd ..
Concluído com sucesso, você já terá uma imagem do OpeniBoot preparada para a instalação em seu iPhone.
Carregando o console do OpeniBoot em seu iPhone
Chegou o momento de carregar e instalar o OpeniBoot. Primeiramente coloque seu aparelho em
Simple Recovery mode.
Atenção: Simple recovery mode não é DFU mode, faça o seguinte:
- Desligue totalmente o aparelho e desplugue do computador;
- Antes de tudo, vá ao gerenciador de tarefas do Windows e finalize o iTunesHelper.exe para impedir que o iTunes carregue automaticamente ao plugar o iPhone no PC.
- Segure o botão Home do iPhone e então sem soltar, plugue o cabo USB ao computador;
- Aguarde o VMware detectar o iPhone com a seguinte tela:
E o aparelho deverá mostrar esta tela:
- Então execute o comando:
sudo client/loadibec openiboot.img3
Solucionando o erro: open_device: unable to connect to device, your device must be in recovery mode.
Isso significa que seu aparelho não está em Simple recovery mode, ou algum aplicativo está conectado mantendo o dispositivo ocupado, como o iTunes por exemplo, verifique se o aparelho está em simple recovery mode e se o iTunes está fechado e então continue os passos abaixo.
- Vá até o iPhone, pressione o botão Power 1x(uma vez), para selecionar o Console do OpeniBoot, deixe o cursor em cima dele.
- Agora no iPhone você deverá pressionar Home para executar o Console, e quando na tela do iPhone mostrar USB state change: 1 -> 1, você deverá deverá no Linux executar o comando abaixo, fique atento, pois o intervalo de tempo é bem curto.
sudo client/oibc
Feito isso corretamente, você terá a tela acima no Linux sincronizada com seu iPhone, qualquer outra tela significa que não funcionou, repita o processo até conseguir o resultado.
Fazendo backup da NOR de seu iPhone
NOR é o flash chip responsável pela inicialização de seu aparelho, é ela que controla tudo que inicializa antes do sistema, inclusive os modos de restauração.
Fazer um backup é altamente recomendado, pois caso aconteça algum erro no meio do processo de instalação, ou acabe a bateria do aparelho, se você não possuir um backup da NOR, não conseguirá mais iniciar o iPhone nem em DFU restore mode, tornando muito complicado sua restauração.
Para efetuar o backup, apenas digite o seguinte comando abaixo em seu Terminal:
nor_read 0x09000000 0x0 1048576
Instalando o OpeniBoot definitivamente em sua NOR
Então digite o comando abaixo para concluir a instalação, o processo é rápido, mas antes de executar, ceritifique-se de que seu aparelho está com a bateria carregada totalmente:
Install
Ao concluir, deverá exibir a tela abaixo:
Então desligue o aparelho e ligue novamente, e você terá a tela do OpeniBoot sempre que o iPhone for desligado e ligado.
Para bootar o iOS, que é o sistema operacional padrão, apenas selecione usando
Power e pressione
Home para iniciar.
Extraindo e configurando os drivers de seu iPhone
Antes de prosseguir, necessitaremos os drivers de
Wireless e
Multitouch do iPhone. Os drivers de wireless já estão compilados e disponíveis para download no início do tutorial, porém os drivers do display Multitouch deverão ser extraídos de seu próprio aparelho, siga os passos abaixo:
Em seu iPhone, vá até o
Cydia, settings e verifique se o
Hacker mode está ativado.
Então, ainda no Cydia, busque e instale os seguintes apps:
- Open SSH – Openssh para iPhone;
- IOKit Tools – Conjunto de ferramentas Unix command-line para o iPhone;
- VI improved – Editor VIm;
- Core utils – Utilitários Unix para manipulação de shell e arquivos;
- Apt 0.7 strict – Apt debian tools para iPhone.
- Mobile terminal – terminal no iPhone que usaremos para dar input nos comandos.
Tendo todos esses aplicativos instalados em seu iPhone, você poderá prosseguir.
Abra um novo Terminal em sua máquina Linux, e conecte via SSH no IP de seu iPhone usando o comando
SSH 192.168.0.104, considerando que seu iPhone está na mesma rede que o computador e que o IP do iPhone seja 192.168.0.104, ao conectar digite
Yes, para aceitar a nova chave
SSL, caso ele pergunte, e logo após digite sua senha do root do OpenSSH, que por padrão é:
alpine
Você poderá também executar os comandos abaixo diretamente de seu iPhone através do aplicativo Mobile Terminal. Lembrando que neste caso não terá como copiar e colar os comandos, terá que digitar usando o tecladinho do aparelho.
ssh root@192.168.0.104
su root
mkdir /private/var/firmware
cd /private/var/firmware
ioreg -l -w 0 | grep '"Calibration Data" =' | cut -d '<' -f2 | cut -d '>' -f1 | xxd -r -ps
- zephyr2_cal.bin (atenção, não quebre a linha, o - zephyr2... faz parte da linha de cima)
ioreg -l -w 0 | grep '"Calibration Data" =' | cut -d '<' -f2 | cut -d '>' -f1 | xxd -r -ps
- zephyr2_proxcal.bin (atenção, não quebre a linha, o - zephyr2... faz parte da linha de cima)
Isso irá gerar os arquivos
zephyr2_cal.bin e
zephyr2_proxcal.bin na pasta
/firmware.
Agora vamos copiar o
iPhone.mtprops para
/var:
cd /private/var/stash/share.*
cd firmware/multitouch/
cp iPhone.mtprops /private/var
cp iPhone.mtprops /private/var/firmware
.. e finalmente gerar o zephyr2.bin:
cd /private/var/firmware
cat iPhone.mtprops | grep -B2 0x0049 | grep data | sed 's/^\t\t<data>//' | sed 's/<\/data>$//'
| base64 -d > zephyr2.bin (atenção, não faça a quebra de linha)
Faça uma cópia também de todo conteúdo da pasta
/private/var/firmware de seu iphone para sua pasta
~/iphonelinux
scp /private/var/firmware/* root@192.168.0.104:~/iphonelinux
Neste momento você tem os drivers do multitouch devidamente instalados no diretório
/firmware de seu iPhone.
Drivers da WLAN – Preparação
Pegue o arquivo
SD-8686-LINUX26-SYSKT-9.70.3.p24-26409.P45-GPL.zip e copie na pasta de compartilhamento entre Windows e Linux que você criou na preparação do Ambiente.
Vá até sua pasta de compartilhamento no Linux e mova este arquivo para dentro do diretório
~/iphonelinux
Então em sua outra janela de Terminal(não é a conectada ao iPhone) digite os comandos:
cd ~/iphonelinux
unzip SD-8686*.zip
Instalando a estrutura do Android
Antes de enviar o sistema operacional para o iPhone, devemos preparar a imagem, vamos montá-la em um diretório virtual e inserir os drivers que criamos dentro dela e montar novamente.
Então faça o mesmo que fez acima, copie o
idroid-release-0.2-3g_rooted_with_sd_emulation_backlight_and_dns_fixed.zip que você fez download no início do tutorial para a a pasta de compartilhamento e acesse no Linux. Então mova-o para
~/iphonelinux, feito isso digite os comandos:
cd ~/iphonelinux
unzip idroid-relea*.zip
rm idroid-relea*.zip
gunzip android.img.zip
mv *.bin /var/firmware/
Montando o Android na máquina Linux
Montaremos o
android.img.gz em um diretório e copiaremos os arquivos
zephyr_aspeed.bin zephyr_main.bin sd8686_helper.bin sd8686.bin para o diretório
/lib/firmware da imagem montada.
gunzip android.img.gz
sudo mkdir-p /mnt/android
sudo mount-o loop android.img /mnt/android
sudo cp zephyr_aspeed.bin zephyr_main.bin sd8686_helper.bin
sd8686.bin /mnt/android/lib/firmware/ (não existe quebra de linha aqui)
… e então desmonte e gzipe novamente a imagem:
sudo umount /mnt/android
gzip android.img
Agora faremos o mesmo com o system.img, nele copiaremos os arquivos
zephyr_aspeed.bin zephyr_main.bin sd8686_helper.bin sd8686.bin para o diretório
/mnt/android/etc/firmware/ da imagem montada.
sudo mkdir-p /mnt/android
sudo mount system.img-o loop /mnt/android
sudo cp zephyr_aspeed.bin zephyr_main.bin sd8686_helper.bin sd8686.bin
/mnt/android/etc/firmware/ (aqui também não existe quebra de linha)
sudo umount /mnt/android
Enviando o Android para o iPhone via SCP
Agora enviaremos todo o sistema do Android para o diretório
/private/var do iPhone:
cd ~/iphonelinux
scp android.img.gz root@192.168.0.105:/private/var/
scp cache.img root@192.168.0.105:/private/var/
scp ramdisk.img root@192.168.0.105:/private/var/
scp system.img root@192.168.0.105:/private/var/
scp userdata.img root@192.168.0.105:/private/var/
scp zImage root@192.168.0.105:/private/var/
Vá até a
outra janela de Terminal que está conectada ao iPhone via SSH e digite o seguinte comando:
chmod 755 ramdisk.img system.img userdata.img cache.img android.img.gz zImage
Neste momento você acaba de concluir a instalação do iDroid em seu iPhone.
Verificando a estrutura de arquivos
O Android no iPhone é basicamente o diretório
/private/var/firmware contendo os drivers, e as imagens na root da
/private/var. Qualquer arquivo a mais em alguma dessas pastas significa novos drivers, emulação de algum hardware como cartão de memória SD, etc. O que não pode é ter arquivos a menos, confira nas imagens abaixo também o tamanho em bytes dos arquivos.
Para iniciar o novo sistema basta desligar o aparelho, ligar e selecionar através do botão
Power, o ícone do
Android e então pressionar
Home.
Método de instalação (automático)
O método automático nada mais é que um shell script que executa todo o procedimento de instalação sem a intervenção do usuário, SUCCA significa
Speed
Up
Custom
Creation (of)
Android, nós pegamos a última versão deste script, editamos, traduzimos e corrigimos algumas falhas.
Para o perfeito funcionamento de nosso script, você terá que possuir um iPhone com os seguintes requisitos:
- Apple iPhone 2g/3g jailbreaked com redsn0w, pwnagetool ou quickpwn
- Cydia em Hacker mode com os seguintes aplicativos instalados:
- Open SSH – Openssh para iPhone;
- IOKit Tools – Conjunto de ferramentas Unix command-line para o iPhone;
- VI improved – Editor VIm;
- Core utils – Utilitários Unix para manipulação de shell e arquivos;
- Apt 0.7 strict – Apt debian tools para iPhone.
- Mobile terminal – terminal no iPhone que usaremos para dar input nos comandos.
- Um ambiente Linux Ubuntu 10.04 preparado:
- Copie nosso script ih_succa_2010052600.sh para a pasta de compartilhamento.
- Dentro do Linux, vá até a pasta de compartilhamento e mova o arquivo ih_succa_2010052600.sh para ~/iphonedroid (caso a pasta não exista, crie).
- Abra um Terminal e digite os seguintes comandos para iniciar o script:
cd ~/iphonelinux
ih_succa_2010052600.sh
(caso tenha erros de permissões tome acesso de root com su root e a senha "infohelp.org")
Aguarde então a finalização de todos processos, o tempo de conclusão depende muito de sua velocidade de conexão.
Veja abaixo todo o output do processo de instalação.
Succa Installer version 2010052600 (modified by infohelp.org )
Verificando pacotes para instalar localmente... [ OK ]
Testando se seu iPhone está conectado... [ OK ]
Testando se o diretório ./succa_installer_files existe... [ OK ]
Testando se o diretório mnt/android existe... [ OK ]
Criando o diretório /private/var/firmware no iPhone... [ OK ]
Verificando pacotes para instalar remotamente... [ OK ]
Criando zephyr2_cal.bin no iPhone... [ OK ]
Criando zephyr2_proxcal.bin no iPhone... [ OK ]
Localizando por iPhone.mtprops... [ OK ]
Verificando integridade do iPhone.mtprops... [ OK ]
Gerando o zephyr2.bin no iPhone... [ OK ]
Efetuando download do driver de WLAN sd8686.bin em kernel.org... [ OK ]
Efetuando download do driver de WLAN sd8686_helper.bin driver from kernel.org... [ OK ]
Transferindo os drivers de WLAN para o iPhone...[ OK ]
Efetuando download do pacote unofficial do Android (isto pode demorar um pouco)... [ OK ]
Extraindo o pacote do Android... [ OK ]
Efetuando download da zImage já patcheada... [ OK ]
Descompactando a zImage patcheada... [ OK ]
Copiando zImage para o iPhone... [ OK ]
Criando a imagem de emulação do sdcard... [ OK ]
Criando sistema de arquivos na imagem do sdcard... [ OK ]
Efetuando download da libreference-ril.so... [ OK ]
Descompactando a libreference-ril.so... [ OK ]
Montando a imagem de sistema... [ OK ]
Copiando libreference-ril.so para a imagem de sistema... [ OK ]
Desmontando a imagem de sistema... [ OK ]
Removendo os arquivos remotos instalandos anteriormente... [ OK ]
Transferindo arquivos para o iPhone... [ OK ]
Setando as permissões dos arquivos no iPhone... [ OK ]
Editando o arquivo do Openiboot... [ OK ]
Extraindo openiboot... [ OK ]
Concluído!
Neste momento você acaba de concluir a instalação do iDroid em seu iPhone. Para iniciar o novo sistema basta desligar o aparelho, ligar e selecionar através do botão Power, o ícone do Android e então pressionar Home para iniciar o novo sistema.