Primeiros passos com Apalis i.MX6 e Ixora da Toradex
- por Sergio Prado
Apalis é uma linha de computadores em módulo (COM) da Toradex, projetada para ser independente de arquitetura de CPU, atualmente com suporte às famílias de SoC Tegra da Nvidia e i.MX da Freescale (agora NXP).
O módulo Apalis i.MX6 possui quatro versões diferentes, que variam de 2 a 4 núcleos de CPU ARM Cortex-A9 rodando de 800MHz à 1GHz, 512MB à 2GB de memória RAM, GPU Vivante GC2000 e decodificação de vídeo em hardware. Todos os modelos possuem integrado uma memória flash (eMMC) de 4GB, além do suporte à diversos barramentos de comunicação (PCIe, USB, I2C, SPI, UART, IrDA, PWD, GPIO, Ethernet, SATA, SDIO, CAN) e interfaces multimídia (HDMI, VGA, RGB, câmera, áudio).
Não dá pra fazer muita coisa com um módulo sem uma placa base. Então a Toradex disponibiliza duas placas de suporte, a Apalis Evaluation Board e a Ixora Carrier Board, para auxiliar na prototipação e no desenvolvimento de projetos com os módulos Apalis.
A Ixora é relativamente pequena, mas possui diversos recursos e interfaces para facilitar a prototipação ou mesmo seu uso em um produto final, incluindo duas interfaces USB Host 3.0 e uma USB OTG, mini PCIe com conector para SIM card, I2C, SPI, três UARTs, quatro PWMs, até 40 GPIOs, quatro conversores analógico/digital, micro SDCARD, Ethernet gigabit, SATA, duas interfaces de barramento CAN, saídas multimídia (HDMI, LVDS, TFT, câmera, S/PDIF, áudio analógico), além de um RTC externo. O datasheet completo da placa Ixora está disponível no site da Toradex.
Para auxiliar no desenvolvimento de projetos com estas plataformas, a Toradex fornece soluções de software baseadas no kernel Linux e no Windows Embedded Compact.
O BSP para construir uma distribuição GNU/Linux para esta plataforma é baseado nas ferramentas do Yocto Project, e atualmente está com suporte oficial na camada meta-fsl-arm-extra da comunidade da Freescale (agora NXP).
CONSTRUINDO A DISTRIBUIÇÃO
Todos os testes foram realizados em uma máquina com o sistema operacional Ubuntu 14.04 64 bits.
O primeiro passo é preparar o ambiente de desenvolvimento para o Yocto Project. Para isso, dê uma olhada no Yocto Project Quick Start.
Instale a ferramenta repo, que será utilizada para baixar os repositórios do BSP:
$ mkdir -p ~/bin $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo |
E baixe o BSP executando os comandos abaixo:
$ export PATH=$PATH:~/bin $ mkdir -p ~/fsl-community-bsp && cd ~/fsl-community-bsp $ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b jethro $ repo sync |
Carregue o script para inicializar o diretório de compilação, aceitando o acordo de licença com o usuário final (EULA).
$ source setup-environment build |
Abra o arquivo conf/local.conf e altere a variável MACHINE para apalis-imx6.
MACHINE ??= 'apalis-imx6' |
E processe a receita de imagem:
$ bitbake core-image-minimal |
Agora é só ter um pouco de paciência. :) A compilação pode levar algumas horas, dependendo da capacidade da sua máquina de desenvolvimento.
No final da compilação, as imagens estarão disponíveis em tmp/deploy/images/apalis-imx6:
$ ls tmp/deploy/images/apalis-imx6/ core-image-minimal-apalis-imx6-20151215155406.rootfs.ext4 core-image-minimal-apalis-imx6-20151215155406.rootfs.manifest core-image-minimal-apalis-imx6-20151215155406.rootfs.sdcard.gz core-image-minimal-apalis-imx6.ext4 core-image-minimal-apalis-imx6.manifest core-image-minimal-apalis-imx6.sdcard.gz modules--3.14.28-r0-apalis-imx6-20151215155406.tgz modules-apalis-imx6.tgz README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt u-boot-apalis-imx6.imx u-boot-apalis-imx6.imx-it u-boot.imx u-boot.imx-it u-boot-it-v2015.04-v2.5b2+gitAUTOINC+1ef4a29e8c-r0.imx uImage uImage--3.14.28-r0-apalis-imx6-20151215155406.bin uImage--3.14.28-r0-imx6q-apalis-eval-20151215155406.dtb uImage--3.14.28-r0-imx6q-apalis-ixora-20151215155406.dtb uImage--3.14.28-r0-imx6q-apalis_v1_0-eval-20151215155406.dtb uImage--3.14.28-r0-imx6q-apalis_v1_0-ixora-20151215155406.dtb uImage-apalis-imx6.bin uImage-imx6q-apalis-eval.dtb uImage-imx6q-apalis-ixora.dtb uImage-imx6q-apalis_v1_0-eval.dtb uImage-imx6q-apalis_v1_0-ixora.dtb |
CONECTANDO A PLACA
Segundo as especificações, a placa deve ser alimentada por uma fonte de 12V/3A, mas como não precisei alimentar nenhum dispositivo externo conectado à placa, consegui testar com uma fonte de 12V/1A.
Ao alimentar pela fonte, pressione o botão SW1 para ligar a placa. Caso queira que a placa seja alimentada automaticamente ao conectar a fonte, basta colocar o jumper JP1. Mais detalhes na seção “3.2.2 Power Control” do datasheet da placa.
O terminal serial é exportado através do conector X22 de 10 pinos, que deve ser conectado à serial do PC através de um cabo adaptador (imagem abaixo). As especificações da pinagem deste conector também estão disponíveis no datasheet da placa.
Então é só abrir um programa de comunicação serial (minicom, picocom, etc) com a configuração 115200,8n1.
PROCESSO DE BOOT
Ao ligar a placa, um código de boot em ROM no i.MX6 será executado. Este código é responsável por carregar o bootloader (U-Boot) da memória flash (eMMC) para a RAM e executar.
Por padrão, a memória flash eMMC já vem com o U-Boot gravado. Caso precise regravá-lo, consulte a documentação da Toradex.
Neste artigo iremos testar o boot da distribuição Linux gerada pelo Yocto Project usando um cartão micro SD.
BOOT PELO CARTÃO SD
Entre no diretório das imagens que foram geradas pelo Yocto Project:
$ cd ~/fsl-community-bsp/build/tmp/deploy/images/apalis-imx6/ |
Grave a imagem em um cartão micro SD, substituindo /dev/sdX no comando abaixo pelo nome do arquivo de dispositivo do cartão SD:
$ zcat core-image-minimal-apalis-imx6.sdcard.gz | sudo dd of=/dev/sdX bs=1M && sync |
Ao final do processo de gravação, coloque o cartão micro SD na placa de desenvolvimento.
Ligue a placa, acesse o terminal serial e pressione qualquer tecla para interromper o processo de boot na linha de comandos do U-Boot.
Execute os comandos abaixo no terminal do U-Boot para configurar o boot pelo cartão SD:
# setenv fdt_file imx6q-apalis_V1_0-ixora.dtb # setenv sdargs ip=off root=/dev/mmcblk1p2 rw,noatime rootfstype=ext4 rootwait # setenv sdkernelload 'fatload mmc 2:1 ${kernel_addr_r} ${boot_file}' # setenv sddtbload 'fatload mmc 2:1 ${fdt_addr_r} ${fdt_file}' # setenv bootcmd 'run setup; setenv bootargs ${defargs} ${sdargs} ${setupargs} ${vidargs}; echo Booting from SD card...; run sddtbload; run sdkernelload; bootm ${kernel_addr_r} - ${fdt_addr_r}' # saveenv |
Agora é sé reiniciar a placa e testar.
Se você quiser gravar as imagens na flash interna e fazer o boot pela eMMC, pode utilizar como base o tutorial disponível no site da Toradex.
OUTRAS INFORMAÇÕES
Comparado ao uso de placas de comunidade como a Raspberry Pi e a Beaglebone Black, o uso de módulos de CPU tem algumas vantagens, incluindo estoque local, suporte do fabricante, a garantia de manutenção do hardware e do software do módulo e a compatibilidade pino a pino com outros modelos de módulos, garantindo uma vida útil maior ao produto.
Este e outros módulos e placas de suporte da Toradex podem ser adquiridos diretamente do site da empresa. Caso tenha qualquer dúvida ou precise de mais informações, entre em contato com o Guilherme Fernandes, diretor da Toradex no Brasil.
Um abraço,
Sergio Prado