Criando uma distribuição Linux com Yocto Project para Toradex Colibri i.MX7

Linux na Toradex Colibri i.MX7
Este post faz parte da série Toradex Colibri i.MX7. Leia também os outros posts da série:

Introdução

 

Utilizando o Yocto Project 2.5, codinome Sumo, lançado em abril de 2018, iremos preparar o ambiente, clonar os repositórios do Yocto Project, Freescale, OpenEmbedded e Angstrom. Será customizada uma distribuição Linux baseada no Angstrom, sem ter que criar meta camadas e realizar muitas modificações.

 

Nesta primeira etapa iremos customizar e gerar a distribuição com os devidos arquivos (Bootloader, Kernel e RootFS) e sistemas de arquivos para facilitar o processo de gravação, e a geração do toolchain para desenvolvimento e compilação-cruzada para a placa alvo, neste caso Toradex Colibri i.MX7.

 

Em outro artigo iremos abordar o processo de gravação do Host para o Target, e outro abordando uma aplicação exemplo em FreeRTOS que iremos clonar, compilar, realizar a gravação do firmware no microcontrolador ARM Cortex-M4 do Colibri i.MX7. E através do RPMSG realizaremos a comunicação entre o ARM Cortex-A onde está o SO GNU Linux e o ARM Cortex-M4 com o firmware utilizando FreeRTOS.

 

 

Hardware

 

O kit utilizado para este artigo foi um SoM Toradex Colibri i.MX7D v1.1C e a Placa Base Toradex IRIS. A seguir mais detalhes técnicos:

 

SoM Toradex Colibri i.MX7D v1.0A
Figura 1 - SoM Toradex Colibri i.MX7D v1.0A

 

CPU

NXP/Freescale i.MX7 Solo

NXP/Freescale i.MX7 Dual

Tipo

1x ARM Cortex-A7

1x ARM Cortex-M4

2x ARM Cortex-A7

1x ARM Cortex-M4

Clock

800 MHz(A7)

200 MHz(M4)

1.0 GHz(A7)

200 MHz(M4)

Memória RAM

256 MB DDR3

512MB/1GB DDR3

Memória Flash

512 MB SLC NAND

512MB SLC NAND / 4GB eMMC

USB OTG

1x

1x

UART

7x

7x

I2C

3x

3x

SPI

4x

4x

PWM

20x

20x

Entradas Analógicas

4x

4x

Vídeo

(sem GPU)

Integrado

RGB (1920x1080x24bpp)

Integrado

RGB (1920x1080x24bpp)

Temperatura

-20º a +85º

-20º a +85º

 

A utilização deste módulo requer uma placa base, e os modelos suportados são Viola, Aster, Iris e Colibri Evaluation Board.

 

Entramos em outro patamar de Sistemas Embarcados com mais este membro na família Toradex Colibri. Neste módulo podemos desprezar a adição de um microcontrolador para alguma tarefa específica e de alta prioridade e/ou preempção.

 

Junto a isso, o poder de executar aplicações em nível de usuário e em diversas linguagens, como C/C++, Python, Perl, Java, Go, entre diversas outras. Mesmo ausentando de um GPU dedicado, possui um vídeo integrado que supri a necessidade de requisitos de aplicações gráficas básicas e que não requerem uso de aceleração gráfica.

 

 

Preparando o Host

 

No Yocto Project 2.5 Sumo as seguintes distribuições Linux são oficialmente suportadas:

  • Ubuntu 14.10;
  • Ubuntu 15.04;
  • Ubuntu 15.10;
  • Ubuntu 16.04 (LTS);
  • Fedora release 22;
  • Fedora release 23;
  • CentOS release 7.x;
  • Debian GNU/Linux 8.x (Jessie);
  • Debian GNU/Linux 9.x (Stretch);
  • openSUSE 13.2;
  • openSUSE 42.1.

 

Outras Distribuições devem funcionar sem grandes problemas, porém o mínimo de requisito no host é:

  • Git 1.8.3.1 ou superior;
  • tar 1.27 ou superior;
  • Python 3.4.0 ou superior;
  • 50 GB de espaço livre em disco.

 

Para o correto funcionamento de todo ecossistema de ferramentas do Yocto Project é necessário instalar as seguintes ferramentas:

 

Ubuntu/Debian

 

Fedora

 

OpenSuse

 

CentOS

 

Mais detalhes sobre essas etapas podem ser visualizados no manual completo do Yocto Project na seção Yocto Project - Supported Linux Distributions.

 

 

Instalando e configuração Yocto Project no Host

 

Nesta etapa será criado o diretório para buildsystem e clonados todos os repositórios para o correto funcionamento do Yocto Project e das suas dependências e configurações.

 

Criando o diretório yocto no /home do seu usuário e clonando os repositórios.

 

Ao final, executando o comando ls -1 será visualizada uma estrutura de diretórios e arquivos como a seguir:

 

A próxima etapa é criar o projeto build-trdx-imx7 que irá armazenar todo o trabalho realizado de baixar as dependências até gerar a imagem e demais arquivos, como bootloader e kernel.

 

 

 

Customizando o projeto

 

Será criada uma Distribuição GNU Linux com propósito de auxílio no desenvolvimento/depuração e um PoC mais direto com diversas ferramentas para auxiliar. Utilizando Yocto Project inicialmente você irá manipular dois arquivos que são:

 

build-trdx-imx7/conf/bblayers.conf

Inserindo as camadas a serem utilizadas.

build-trdx-imx7/conf/local.conf

Inserindo e alterando opções como Distribuição, local de trabalho, download dos fontes baixados, diretório de trabalho, programas e bibliotecas a serem instalados, e etc

 

Algumas customizações realizadas serão:

 

Pacotes/Ferramentas

Descrição

coreutils

Inserindo mais comandos e com mais opções além do básico do busybox.

cpufrequtils

Utilitário para alterar as opções e monitorar a política de escalonamento do CPU.

cronie

Pacote que possui as ferramentas de agendamento de tarefas crond e crontab.

htop

Utilitário para visualização dos processos, algo como o top com mais opções para ajudar na visualização.

i2c-tools

Utilitário para auxiliar na depuração de I2C sem necessidade de escrever.

go

Compilador Go.

minicom

Utilitário para abrir e manipular uma conexão serial.

powertop

Utilitário para monitorar o consumo de energia e auxiliar em alterações para melhorar a eficiência.

procps

Versão com mais opções do comando ps, além de comandos como pgrep e pkill.

psmisc

Complementando com mais comandos para auxiliar a administração, neste caso agrega o fuser e killall.

python3

Será instalado o python3.

openssh-sftp-server

SFTP Server para utilizar com desenvolvimento/deploy Host -> Target.

openssh

SSH Server para acesso e administração remota.

 

Diversas outras ferramentas/utilitários/bibliotecas podem ser adicionadas alterando a variável IMAGE_INSTALL no arquivo build-trdx-imx7/conf/local.conf.

 

A seguir é exibido o arquivo build-trdx-imx7/conf/bblayers.conf com a configuração das camadas. Você pode abrir o seu arquivo e substituir o seu conteúdo pelo abaixo:

OBS: Adicionado suporte a meta-webserver que corrige o erro do nginx_%.bbappend conforme apontado usuário Anderson Ferreira Rodriguez nos comentários.

E o build-trdx-imx7/conf/local.conf com todas configurações e customizações:

 

Antes de executarmos o comando para dar início ao processo de build, algumas configurações a se destacar:

 

MACHINE

Configuramos o hardware para qual será feita toda configuração.

DL_DIR

Diretório onde será armazenado tudo que será baixado.

DISTRO

Configuramos a Distribuição base a ser utilizada.

IMAGE_FSTYPES

Sistema de arquivos a ser gerado, importante ter definido a opção ubifs, será abordado em outro artigo seu uso.

IMAGE_INSTALL

Pacotes, ferramentas, utilitários e tudo que deseja instalar e incluir na image final.

PNBLACKLIST[python]

Removemos suporte a Python2.7, como sabe-se EOL(End-Of-Life) dele é 2020, então garantimos para usar somente python3.

PEP373 - Python2.7 Release Schedule

 

 

Construindo a Distribuição

 

A distribuição a ser construída será baseada no Angstrom com sistema de inicialização systemd, apenas console-terminal sem servidor gráfico.

 

Após executar o comando:

 

Será executado o comando bitbake que ao passar o nome de uma receita irá ler e processar todas configurações e gerar como resultado uma imagem, além dos arquivos de Bootloader, Kernel, Device-Tree e o que mais estiver configurado para o MACHINE especificado.

 

A imagem utilizada será meta-angstrom/recipes-images/angstrom/console-image.bb

 

 

O desempenho e conclusão irá depender de fatores como velocidade da internet e o computador realizando o trabalho, então tenha paciência!

 

Como resultado final, navegue até o diretório build-trdx-imx7/tmp-glibc/deploy/images/colibri-imx7 e listando o diretório será retornado o conteúdo como a seguir:

 

No próximo artigo será abordada uma das formas de gravar esta image em um SoM Toradex Colibri i.MX7.

 

Boa diversão e até a próxima!

 

 

Saiba mais

 

Acelerando o Build de Yocto com ajuda da Nuvem

Embarcando ScadaBR com Yocto na Toradex Colibri i.MX6

Yocto Project: Quick Start

 

 

Referências

 

https://www.toradex.com/pt-br/computer-on-modules/colibri-arm-family/nxp-freescale-imx7

https://www.yoctoproject.org/docs/2.5/mega-manual/mega-manual.html

https://www.kernel.org/doc/Documentation/rpmsg.txt

 

Webinar: Desenvolvendo Sistemas Embarcados com o Colibri i.MX7

Lançamento do novo Toradex Colibri iMX7

 

Outros artigos da série

Gravando imagem customizada Linux na Toradex Colibri i.MX7 >>
Este post faz da série Toradex Colibri i.MX7. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Cleiton Bueno
Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

9
Deixe um comentário

avatar
 
5 Comment threads
4 Thread replies
5 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
Cleiton BuenoDIEGO SALESAnderson Ferreira RodriguezjorgitoCleiton Bueno Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
DIEGO SALES
Visitante
Diego Sales

Olá Cleiton, Grato por compartilhar seu conhecimento em sistemas embarcados, o post me auxiliou a entender melhor o processo de criar um SO custumizado para o imx7. Sou novo no estudo de SO e sistemas embarcados com linux, fiquei com algumas dúvidas quanto a custimizar o SO para rodar no imx7: 1. Caso eu queira fazer um teste e criar um SO custimizado para efetuar a leitura de sensores na porta i2c e spi, visualizando os resultados e comunicando com a placa via ssh tem como custumizar para esta aplicação especifica e deixar o SO bem enxuto ? quais arquivos… Leia mais »

Cleiton Bueno
Visitante
Cleiton Bueno

Olá Diego, que bom que ajudou nos seus estudos. 1. Você pode desenvolver em diversas linguagens como C, C++, Java, Python, Perl, Go, Rust e diversas outras, neste caso, irá "abrir" e manipular o I2C e SPI via /dev, a Toradex possui artigos sobre além do Linux oferecer utilitários para auxiliar nos testes. https://developer.toradex.com/knowledge-base/i2c-(linux) https://developer.toradex.com/knowledge-base/spi-(linux) 2. Não sei se entendi muito bem esta questão, mas para utilizar/comunicar com o M4 via Linux que esta rodando sobre o Cortex-A é utilizado o RPMsg, link a abaixo: https://developer.toradex.com/getting-started/advanced-module-heterogeneous-multicore-processing-hmp/heterogeneous-multicore-processing-hmp-communicating-between-cores-with-rpmsg 3. Não entendi sua duvida, mas pode trabalhar com threads sem problemas, fazendo o… Leia mais »

DIEGO SALES
Visitante
Diego Sales

Olá Cleiton, Grato por compartilhar seu conhecimento em sistemas embarcado, o post me auxiliou a entender melhor o processo de criar um SO custumizado para o imx7. Sou novo no estudo de SO e sistemas embarcados com linux, fiquei com algumas dúvidas quanto a custimizar o SO para rodar no imx7: 1. Caso eu queira fazer um teste e criar um SO custimizado para efetuar a leitura de sensores na porta i2c e spi, visualizando os resultados e comunicando com a placa via ssh tem como custumizar para esta aplicação especifica e deixar o SO bem enxuto ? quais arquivos… Leia mais »

Anderson Ferreira Rodriguez
Membro
Anderson Ferreira Rodriguez

Olá Cleiton, Primeiramente parabéns pelo artigo, está sendo de grande ajuda para mim. Estou seguindo os passos da série de artigos e me deparei com uma mensagem de erro que pode acabar ocorrendo com outros leitores e gostaria de compartilhar como resolvi. Estou utilizando como host o Ubuntu 14.04 rodando em um container do docker. Seguindo os passos do artigo no meu host, o processo de build estava sendo interrompido com a seguinte mensagem de erro: ERROR: No recipes available for: /workspace/yocto/poky-sumo/build-trdx-imx7/../meta-angstrom/recipes-tweaks/nginx/nginx_%.bbappend Após pesquisar no índice de camadas do site do OpenEmbedded, verifiquei que a receita para compilar o nginx… Leia mais »

jorgito
Visitante
jorgito

Dear Claiton,
thank You for Your well done step by step guide to build an image for the iMX7.

To build an image I had to write the following line to: /poky-sumo/meta-angstrom/conf/layer.conf

LAYERSERIES_COMPAT_angstrom-layer = "sumo"

to avoid an error message while builing the image....

best regards Jorgito (means Juergen)

Rafael Dias
Visitante
Rafael Dias

Pergunta de n00b: a imagem que construímos neste artigo é a imagem mínima? Se não, qual é a configuração para gerar uma imagem mínima com o yocto?