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.
CONFIGURANDO O CARTÃO SD
O cartão SD deverá ser de no mínimo 1G. Vamos criar 3 partições:
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 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 tool chain e uma distribuição Linux customizada para o mini2440. Até lá!
Um abraço,
Sergio Prado
Comentar
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)