Mini2440 – Instalando o Android

- por Sergio Prado

Categorias: Android, Mini2440 Tags: , , ,

No último post sobre o kit FriendlyARM mini2440, instalamos o U-boot e a distribuição Emdebian. Se você ainda não leu e quiser der uma olhada, clique aqui.

Agora vamos (finalmente) rodar o sistema operacional Android nele.

Depois de muitas tentativas, não consegui rodá-lo a partir da flash. Em algum ponto do processo de inicialização, o script de boot trava e a interface gráfica não sobe. Depois de muita pesquisa, cheguei à conclusão de que o provável causador é a “baixa” quantidade de RAM (64M), pois o Android funcionou sem problemas configurando uma partição de SWAP no cartão SD.

O nosso trabalho aqui então será simples: formatar e copiar os arquivos para um cartão SD (1G no mínimo) e configurar o u-boot para iniciar o Android por este cartão SD. Para isso, você vai precisar do U-boot instalado na NAND. Se ainda não o tiver, execute os procedimentos descritos neste post.

Como sempre, utilizaremos uma máquina Linux para a execução dos procedimentos de instalação. Para facilitar o trabalho de todos, criei um pacote com os arquivos necessários para a instalação. Este arquivo pode ser baixado aqui (link não está mais disponível).

CONFIGURANDO O CARTÃO SD

O cartão SD deverá ser de no mínimo 1G. Vamos criar 3 partições:

  • Partição 1 -> SWAP – 512M – Memória Swap
  • Partição 2 -> EXT2 – 20M – Kernel
  • Partição 3 -> EXT3 – Restante – Rootfs

Você pode usar qualquer ferramenta de particionamento de disco, como “fdisk”, “cfdisk” ou “sfdisk”. Eu usei o “gparted” que tem uma interface gráfica simples. Nosso cartão SD ficou assim:

Depois de formatado, é necessário copiar os arquivos para o cartão SD. Baixe e descompacte o arquivo que disponibilizei neste link (link não está mais disponível). Copie os arquivos da pasta “Partition2” para a partição 2 do cartão SD. Copie também os arquivos da pasta “Partition3” para a partição 3 do cartão SD.

CONFIGURANDO O U-BOOT

Para configurar o U-boot para carregar o Android do cartão SD, precisamos alterar as variáveis de ambiente “bootargs” e “bootcmd”, conforme abaixo:

MINI2440 # setenv bootargs 'console=ttySAC0,115200 root=/dev/mmcblk0p3 rootfstype=ext3 mini2440=0tb rootdelay=3 init=/linuxrc'
MINI2440 # setenv bootcmd 'mmcinit ; ext2load mmc 0:2 0x31000000 uImage ; bootm 0x31000000'
MINI2440 # saveenv

A variável “bootargs” armazena os parâmetros que serão passados ao kernel. O detalhe aqui é o parâmetro “mini2440”, onde você deve usar o valor “0tb” para displays de 3.5″, e “1tb” para displays de 7″.

Na variável “bootcmd” temos os comandos usados pelo U-boot para iniciar o Android pelo cartão SD. Primeiro iniciamos o driver para a leitura do cartão SD com o comando “mmcinit”. Aqui o U-boot mostra o quanto ele é flexivel. Com o comando “ext2load mmc 0:2 0x31000000 uImage” conseguimos ler da segunda partição do cartão SD um sistema de arquivos ext2 e carregar o arquivo uImage para a RAM no endereço 0x31000000. E então iniciamos o Android pela RAM com o comando “bootm 0x31000000”.

E NÃO É QUE FUNCIONA?

O primeiro boot é um pouco demorado, então tenha paciência. Mas funciona! Veja abaixo algumas imagens do Android rodando no mini2440:

       

Confesso que esperava uma performance melhor. Não tive problemas de travamentos, mas a execução do Android ficou um pouco lenta. A imagem precisaria ser mais otimizada para ser embarcada em um produto final, mas já pode servir de base para estudarmos o sistema operacional.

No próximo post vamos aprender a usar o Buildroot para construir do zero um toolchain e uma distribuição Linux customizada para o mini2440. Até lá!

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.