Neste post vamos instalar o sistema operacional Android no kit FriendlyARM mini2440.

No último post sobre o kit FriendlyARM mini2440, instalamos o U-boot e a dis­tribuiçã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 con­figurando 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 procedimen­tos 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.

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. 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:

INI2440 # setenv bootargs console=ttySAC0,115200 root=/dev/mmcblk0p3 rootfstype=ext3 mini2440=0tb rootdelay=3 init=/linuxrcMINI2440 # 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 uIm age” conseguimos ler da segunda partição do cartão SD um sistema de arquivos ext2 e carregar o arquivo uIm age 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 trava­mentos, 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 tool chain e uma distribuição Linux customizada para o mini2440. Até lá!

Um abraço,

Sergio Prado


Post publicado no Blog do Sérgio Prado: http://www.sergioprado.org em 12/09/2010
Reprodução autorizada pelo autor.

Exibições: 1474

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Laboratório de Garagem em 20 setembro 2010 às 14:22
Opa! Aí está o homem! Hehehe...
Valeu Sérgio!
Comentário de Sergio Prado em 20 setembro 2010 às 14:15
Olá Arilson,

É possível acessar o hardware sem problemas com o Android. Você precisará apenas desenvolver um device driver para se comunicar com este hardware, seja um conversor A/D ou um pino de I/O.

Conheço a BeagleBoard e o ODroid, mas ainda não tive a oportunidade de brincar com um desses.

Um abraço!

Sergio Prado.
Comentário de Laboratório de Garagem em 20 setembro 2010 às 13:31
Arilson,
Veja a mensagem no final do post. Este post foi publicado sob autorização do seu autor, Sérgio Prado. Para entrar em contato com ele, por favor acesse http://www.sergioprado.org
Abraço!
Comentário de Arilson Mendes em 20 setembro 2010 às 10:42
Belo trabalho paulo, parabéns!!
Tenho uma duvida quanto a rodar Android em placas como essa ou a Beagleboard e gostaria de esclarece-la se for possível,
Paulo é possível acessar os I/Os dessa placa usando o Android?
Ler uma entrada analógica por exemplo? ou mudar o estado de um pino?
você conhece a Beagleboard? e o ODroid?
até mais

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço