Compilando Android para Raspberry PI 2 B

Neste artigo iremos ver como preparar o ambiente, sincronizar e baixar dos repositórios tudo que é necessário para a construção bem sucedida do Android 6.0 Marshmallow para uma placa Raspberry PI 2 B.

Podemos pular a parte do que se trata Android certo? Pois imagino que você que esteja lendo no mínimo possua, já possuiu ou lida com equipamentos com sistema operacional Android, seja em Celulares, Tablets, TV’s, Relógios ou até mesmo em Automóveis.

O Android desde quando surgiu possui um parentesco com o Linux, pois compartilhando do mesmo Kernel do Linux incluindo algumas adaptações para o Android. Se assimilou de outras características como o Toolbox que lembra muito o Busybox e a Comunicação entre Processos IPC que poderia utilizar o conhecido System V IPC, mas possui um próprio chamado Binder que realiza a comunicação via socket entre a API e as aplicações.

O que mais me chamou atenção ao conhecer o Android por dentro, foi de saber que não utilizam glibc, uclibc, dietlibc, e sim Bionic, pelo que entendi a decisão por utilizar esta lib e não as citadas foi Small Size e Speed e segundo fontes foi uma grande diferença comparado as padrões, mas houve comentários sobre licenças, pois neste caso a Bionic é BSD.

Em um artigo futuro entraremos em mais detalhes sobre esta estrutura interna, além de conhecer o Zygote e o que seria a Dalvik/ART e qual a relação entre ambos, caso queira se aprofundar neste assunto um excelente artigo é o Introdução ao Funcionamento Interno do Android do Sergio Prado.

 

Porte Android para Raspberry Pi 2 B

O AOSP(Android Open-Source Project), possui toda estrutura interna para a construção de um Android para um celular/tablet Nexus. Com o AOSP em mãos qualquer fabricante pode/deverá portar o Android para seu produto, muito importante obter este suporte do fabricante ou alguma empresa especializada em realizar este porte, pois envolve na criação do produto, adaptação e novas informações para o device, hardware e principalmente o kernel que é em comum do Linux com adaptações para o Android.

Neste caso, um excelente trabalho foi o Peter Yoon, que fez o port do Android 6 Marshmallow para a Raspberry PI 2 B, recentemente sendo trabalhado para a Raspberry PI 3.

Então iremos utilizar o porte do Peter Yoon para RaspPI2.

 

Preparando o ambiente host

Para construir o Android deve-se preparar o computador(host) para realizar compilação-cruzada, no Linux temos ferramentas de Build como Yocto Project, Buildroot e PTX Dist no caso do Android é uma ferramenta própria, unindo repo e muito Makefile.

Primeiro vamos instalar o Repo para realizar download de todos os repositórios para construir o Android, o procedimento encontra-se em Installing Repo em Source Android.

É recomendado o uso de um Linux 64-bits, além da instalação do OpenJDK8, no meu caso utilizando um Ubuntu 14.04LTS e os pacotes abaixo:

Agora algumas ferramentas que acho importante possuir também:

Mais informações e detalhes sobre dependências para outras distribuições Linux acesse Establishing a Build Environment.

 

Repositórios Android

Agora vamos seguir o procedimento do Peter Yoon e baixar o manifest para Android 6 Marshmallow e sincronizar os repositórios, estarei utilizando um diretório em meu /home chamado android-rpi.

No momento que executar o sync, será feito download de todo código-fonte, segue abaixo o tamanho total do diretório após o final da sincronização.

Então tenha uma partição com uma espaço livre que segundo o Source Android deve ser de 50G a 100G.

 

Construindo o Android para Raspberry PI 2

Agora a parte divertida, construir o Android propriamente dito, primeiro instalar mais algumas ferramentas caso já não tenha.

Construindo Kernel:

Construindo o Android, esta etapa levara algumas horas para ser concluída.

Procedimento este que pode ser visto em Build for Rapsberry PI 2 do Peter Yoon.

No final, teremos os seguintes diretórios e seus respectivos tamanhos.

As imagens do Android encontram-se em:

Dos arquivos construídos, inicialmente precisamos conhecer e utilizaremos os arquivos a seguir, onde comento para que seria cada “imagem”.

ramdisk.img Contem o rootfs propriamente dito do Android, montado em /
system.img Possui os componentes gerados pelo AOSP durante a construção como frameworks, aplicações e os daemons, montado em /system
cache.img Para armazenamento temporário durante o funcionamento
userdata.img Possui os arquivos que são gerados durante a execução do Android, e as aplicações instaladas pelo usuário, montado em /data, inicialmente este diretório é vazio.

Dependendo da descrição do Produto, outros arquivos podem surgir como recovery.img e ramdisk-recovery.img partições estas usadas para recuperar dados do usuário ou mesmo do sistema caso algo der errado.

 

 

Preparando o microSD

Agora vamos criar as partições no microSD, estarei usando um de 4G de capacidade mas daria para usar em um de 2G, precisamos criar as seguintes partições, sistema de arquivos e tamanho:

Partição Sistema de Arquivos Tamanho Uso
Partição 1 FAT32 (b) 512MB Arquivos de boot[bootloader, kernel, ramdisk(initrd) e Device tree
Partição 2 EXT4 (83) 512MB /system
Partição 3 EXT4 (83) 512MB /cache
Partição 4 EXT4 (83) 512MB ou restante /data

A Partição 1 e Partição 3 podem ser de 128M ou mais, mas a Partição 2 e Partição 4 é bom ser de pelo menos 512M, principalmente Partição 4 o /data que pode crescer conforme uso do Android e instalação de aplicativos.

Usando o GParted e criando as partições acima, teremos algo como a imagem a seguir.

gparted_Android_cleitonbueno

Uma observação muito importante é marcar a Partição 1 como boot, para isso, cliquei com o botão direito em cima da linha da Partição 1 no meu caso /dev/sdb1 e selecione Manage Flags em seguida seleciona boot, como a imagem abaixo.

gparted_flags_boot_Android_cleitonbueno

O mesmo pode ser feito com o comando fdisk, logo mais as etapas com fdisk usando o meu microSD reconhecido como /dev/sdb, a ultima letra pode variar conforme as unidades utilizadas, para saber qual device esta para seu microSD, pode usar o comando a seguir.

Como o meu é de 4G, então é o device /dev/sdb. Agora vamos as etapas com fdisk.

Em caso de duvidas sobre as opções ou queria saber mais, digite m para abrir o menu de ajuda.

O GParted cria e formata as partições de acordo com o Sistema de Arquivos especificado, com o fdisk apenas criamos as partições e agora vamos formatá-las e adicionar um nome(Label) para cada partição.

Pronto! Até aqui vimos duas maneiras de preparar as partições no microSD.

 

Copiando as imagens/arquivos do Android

Nesta etapa iremos copiar os arquivos gerados pelo processo de construção do Android e gravar as imagens nas partições relacionadas a cada uma, como adicionamos nomes(Labels) para as partições, após inserir o cartão ficara fácil reconhecer cada partição e seu uso através do nome no ponto de montagem.

Primeiro vamos copiar os arquivos necessários para o processo de boot para /media/$USER/BOOT, a variável $USER referenciando ao nome do seu usuário, acesse os diretórios abaixo e copiando os arquivos.

Próximo passo é gravar a imagem system.img na partição que possui ponto de montagem SYSTEM.

As partições com nome DATA e CACHE ficaram vazias, não iremos gravar o cache.img e o userdata.img.

Nosso microSD esta preparado e com o básico para iniciar o Android na Raspberry PI 2 B.

 

Primeiro boot

Inserindo o microSD e alimentando a placa, o primeiro boot levou pouco mais de 1 minuto, as demais inicializações ficaram entre 40s a 50s. Algumas imagens do boot e algumas informações do Android 6 na Raspberry PI 2 B.

 

Android6_RaspberryPI2_Boot_cleitonbueno.com

Android6_RaspberryPI2_Infos

Android6_RaspberryPI2_Memory_cleitonbueno.com

A seguir o video com o processo de boot.

 

Até a próxima!

 

Referencias

http://source.android.com/source/initializing.html

https://github.com/peyo-hd/local_manifests

https://github.com/peyo-hd/device_brcm_rpi2

sergioprado.org/introducao-ao-funcionamento-interno-do-android/

http://tldp.org/HOWTO/Partition/fdisk_partitioning.html

Share Button

CC BY-NC-SA 4.0 Compilando Android para Raspberry PI 2 B by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

  • Sucesso Cleiton!!!
    Quero ver o Android rodando no iMX6 agora =P
    Abraços!

    • Olá Fernando. Pode deixar que já esta na tasklist ;)

  • Denis dos Santos Silva

    tem como liberar o arquivo .img ?

    • Olá Denis, posso tentar subir em algum site de download de arquivos como MEGA entre outros, meu servidor está um pouco limitado quanto a espaço em disco. Mas se seguir a receita é questão de tempo para se ter o mesmo resultado.

      Abraço.

  • Roberto Bartelmebs

    tem como habilitar o touchscreen de um display de 7 polegadas 800×480? o touch é USB

  • Giovani Farias

    Como fica o desempenho ?

    • Olá Giovani, usando o que foi gerado após o carregamento funciona sem problemas, não percebi travamentos, mas se adicionar uma aplicação para subir e executar após a inicialização talvez daria para tentar algumas melhorias para um boot e arranque melhor.

      Abraço.

      • Giovani Farias

        Eu li que o andróid no RP2 fica muito lento a parte gráfica por não ter aceleração de hardware … mas não entendi por que…. se tenho o OPENLEC instalado e ele roda liso, o detalhe que o youtube do kodi anda meio largado e la em casa usamos muito o youtube, por isso estou pensando em instalar o android nele para usar o youtube sem problemas…. É que uso o kodi em minha tv e fica como servidor de midia.

        • Estranha esta informação Giovani, mas a RaspPI2 possui sim aceleração gráfica por hardware.

          • Giovani Farias

            Pois é !!! Vou tentar fazer o tutorial e depois posto minhas próprias conclusões.

          • Maravilha, aguardo seu feedback!