Primeiros passos com Apalis i.MX6 e Ixora da Toradex

- por Sergio Prado

Categorias: Hardware, Yocto Project Tags: , , ,

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

apalis

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.

ixora

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.

adapter-ixora

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

  • Ficou muito legal!

  • Willyan Schultz Dworak

    Parabéns pelo artigo, bem explicativo. Uma duvida, a distribuição Linux gerada pelo Yocto é mesma Angstrom que vem instalada na eMMC? Tenho uma dessas aqui, uma x4 com 1Gb de Ram. É uma placa bem interessante.

    • Olá Willyan,

      Não. Neste artigo gerei a distribuição Poky (distro oficial do Yocto Project), bem mais leve que o Angstrom.

      Se você quiser gerar o Angstrom, basta baixar a camada meta-angstrom e suas dependencias, incluí-las na variável BBLAYERS do bblayers.conf e alterar a variável DISTRO no local.conf para ‘angstrom’. Depois é só processar uma das receitas de imagem do angstrom como a console-image.bb ou a angstrom-image.bb.

      Abs!

      • Willyan Schultz Dworak

        Obrigado Sergio. Vou dar uma olhada como fica com essa distribuição. Abraço.

        • Caio Pereira

          Willyan,
          Utilizando o bsp da Toradex (baseado no Openembedded mas nada impede de utilizar os layers no Yocto) já possui as receitas com o script para tornar mais fácil o processo gravação da imagem na eMMC do módulo.
          Eles disponibilizam uma imagem básica semelhante ao core-image-minimal que á console-trdx-image.

          Ao final da geração da imagem deve gerar um arquivo tar.bz2 com um script que automatiza a gravação da imagem no sdcard.

          Este sdcard ficará preparado para realizar a gravação da imagem na eMMC utilizando os comandos; run setupdate; run update no console do u-boot.

          http://developer.toradex.com/knowledge-base/flashing-linux-on-imx6-modules#Apalis_iMX6

          • Olá Caio,

            Não sei qual foi a sua experiencia com a meta-toradex, mas a minha foi muito ruim (tentando integrá-la com o release jethro do YP). Foram necessárias várias adaptações para fazê-la funcionar, devido às diversas dependencias com outras camadas (incluindo algumas do projeto OpenEmbedded). Ela também não segue o releases do Yocto Project (dizzy, fido, jethro, etc), então fica dificil saber qual branch deve-se utilizar. Eu consegui processar uma imagem com ela, mas depois de muitas adaptações. Por este motivo não utilizei ela no meu artigo.

          • Caio Pereira

            Olá Sérgio, concordo com você, eu também tive alguns problemas com o meta-toradex, principalmente pelo fato de eles não seguirem o padrão do Yocto, todas as facilidades para mudança do devicetree e adição de módulos do kernel não funcionam como deveriam pois não respeitaram o formato de receita do Yocto.

            Eu ainda estou na versão dizzy (tanto do Yocto como OpenEmbedded do BSP), o bsp da Toradex para fido saiu faz pouco tempo. Foi necessário a utilização do meta-toradex, quando começamos a trabalhar com Toradex o bsp da Colibri não estava disponível no meta-fsl-arm-extrae alguns drivers que utilizamos são alterados pela Toradex.

          • Fabiano Ferronato

            Estou usando o yocto de acordo com as versões e configurações fornecidas pela Toradex e está rodando muito bem! Rolou montar toolchain por ele, mudar configurações de kernel, instalar novos programas.

          • Legal Fabiano! Bom saber que eles melhoraram o suporte na camada meta-toradex. Abs!

  • Muito bacana Sergio.
    Bem interessante estes módulos da Toradex e acho um grande diferencial o suporte que eles oferecem, desde possuírem já uma camada para Yocto a exemplos de aplicações como Qt.

    Abraço.

  • Fabiano Ferronato

    Para utilizar o console, segundo a Toradex, além do cabo DB9/IDC10 (que tem que ser do padrão DTK / INTEL e não AT/Everex) também precisa de um cabo serial null modem (cross) além de um conversor usb/serial para PCs sem porta serial. Pra facilitar, se procurar por cabo null modem aparecem várias configurações diferentes.
    Resultado: somente usei um conversor usb/serial, espetei 3 fios (tx/rx/gnd) do conversor para a placa. :)
    Poderia dar uma dica de onde achar o DB9/IDC10 neste padrão?

    • Olá Fabiano,

      Aqui em SP encontramos estes cabos facilmente na Santa Efigenia. Infelizmente não conheço nenhum site de e-commerce que venda. Talvez seja tranquilo montá-lo também.

  • Mendes

    Olá Sérgio,

    Faz sentido não utilizar o Yocto e sim o buidroot para essa placa imx6?

    • Olá Mendes,

      Depende muito das suas necessidades. Atualmente a camada do Yocto Project liberada pela Toradex para esta placa está bastante estável, então as duas opções (Buildroot e Yocto Project) são viáveis.

      Um abraço!

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