Toradex Colibri iMX6 e Yocto Project Fido (1.8)

Colibri iMX6 e Yocto

Introdução

 

Utilizando o Yocto Project 1.8, codinome Fido, o módulo Colibri iMX6 e Placa base IRIS da Toradex, iremos preparar o ambiente, clonar os repositórios do Yocto Project, Freescale e Toradex e explorar o básico para se customizar e construir uma distribuição Linux para esse modulo, sem ter que criar meta camadas e realizar muitas modificações.

 

Em seguida gravar a imagem gerada em um cartão microSD, conectar o console serial e acessar o terminal para visualizar o processo de boot e logar no sistema.

 

Para conhecer mais sobre este kit, pode acessar o artigo CoM Toradex COLIBRI T20 e Carrier Board Iris escrito por Thiago Lima que explora em detalhes sobre a Placa Base IRIS, e o artigo Toradex - Colibri i.MX6 onde realizo uma abordagem geral sobre o módulo  e seus recursos disponíveis.

 

 

Preparando o Host

 

No Yocto Project Fido as seguintes distribuições Linux são oficialmente suportadas pela ferramenta:

  • Ubuntu 14.04 (LTS)
  • Ubuntu 14.10
  • Fedora release 21
  • CentOS release 6.x
  • CentOS release 7.x
  • Debian GNU/Linux 7.x (Wheezy)
  • Debian GNU/Linux 8.x (Jessie)
  • OpenSUSE 13.2

 

Para o correto funcionamento do ecossistema Yocto Project algumas ferramentas devem ser instaladas, mais detalhes acesse Required Packages for the Host Development System.

 

Ubuntu/Debian

 

Fedora

 

OpenSuse

 

CentOS

 

Pronto. As dependências do host estão instaladas baseado em cada distribuição.

 

 

Preparando o ambiente Host

 

Agora que possuímos todas as dependências instaladas, vamos criar nosso ambiente e clonar os repositórios para o correto funcionamento do Yocto Project e a meta camada da Toradex, para possuir todo suporte e customização na tarefa de construir uma distribuição para o módulo Colibri iMX6.

 

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

 

 

Vou abrir um parênteses agora, sobre o branch do repositório da camada Toradex, onde não temos o mesmo codinome utilizado por diversas camadas ou pelo próprio OpenEmbedded. Abaixo uma tabela da relação dos nomes utilizados nos branchs da OpenEmbedded (core), Yocto Project e diversas camadas do projeto versus o equivalente para Toradex.

 

Toradex Version

Ångström Distribution

OpenEmbedded/Yocto Codename

Yocto Project Release

2.1

v2013.06

dylan

1.4

2.2

v2013.12

dora

1.5

2.3

v2014.06

daisy

1.6

2.4

v2014.12

dizzy

1.7

2.5

v2015.06

fido

1.8

 

Podemos ver na tabela acima de onde surgiu o V2.5 do repositório da Toradex.

 

Criando os artefatos do nosso projeto, que irei dar o nome de colibri-imx6.

 

 

 

Customizando o projeto

 

Alterando o arquivo local.conf para dar suporte ao hardware do Colibri iMX6 e algumas personalizações e adaptações para a correta construção da distribuição.

 

Editando o ~/yocto/poky-toradex/colibri-imx6/conf/local.conf.

 

 

O conf/local.conf acima pode ser copiado como exemplo, o importante a ser alterado é:

 

Seleciona a correta MACHINE para o modulo i.MX6, no caso a Toradex já fornece a descrição para o módulo, chamado colibri-imx6.

MACHINE ??= "colibri-imx6"

 

Aceitar o EULA para uso da meta camada da Freescale que é dependência.

ACCEPT_FSL_EULA = "1"

 

Ignorar os alertas para os .bbappend caso não existam as receitas .bb.

BB_DANGLINGAPPENDS_WARNONLY =”1”

 

Não é obrigatório, mas na linha 21 eu altero o hostname que será gerado na imagem.

hostname_pn-base-files = "colibri-imx6-brasil"

 

Adicionando suporte a SSH na linha 57, para poder ter acesso via rede.

EXTRA_IMAGE_FEATURES = "debug-tweaks ssh-server-dropbear"

 

Editando o ~/yocto/poky-toradex/colibri-imx6/conf/bblayers.conf.

 

 

Acima apenas adicionamos a meta camada da Toradex na linha 12 e da Freescale na linha 13.

 

 

Construindo um distribuição mínina

 

Abaixo o comando na linha 1 para construir uma imagem mínima e o resumo da build utilizada no processo de construção.

 

 

Nesta etapa aconselho ir tomar um café, ou melhor, faça uma pipoca e assista Star Wars - O despertar da força. Brincadeiras a parte, mas esta etapa é demorada pois todos os pacotes para criar a distribuição serão baixados, descompactados, configurados, compilados, além do mesmo processo para o kernel e o bootloader. E no final a criação do rootfs e as imagens configuradas para serem geradas.

 

 

Gravando imagem

 

Vamos gravar a imagem gerada em um cartão microSD, no caso vamos usar a com extensão .sdcard.

 

Todos os arquivos (U-boot, Kernel, Rootfs e demais) gerados pelo Yocto Project ficam em:

 

 

Listando o diretório:

 

 

Conecte o microSD/SDCard, identifiquei o device usado pelo cartão (muito importante e tenha cautela nesta etapa).

 

Para auxiliar em descobrir o device correto podemos usar o dmesg, e em seguida conectar o cartão:

 

 

Neste caso é o /dev/sdb, agora o comando para gravar a imagem no cartão.

 

 

Remova o cartão, conecte no slot localizado na parte inferior da Placa Base IRIS, mas ainda não alimente a placa!

 

 

Primeiro boot

 

Primeiro você deve se conectar ao Console Serial. Na placa base IRIS pode ser através do conector X13[UARTA] usando um Conversor USB-Serial para DTK/Intel ou através do GPIO com um Conversor USB-Serial TTL 3.3V usando a seguinte pinagem: Pino 2 para GND, Pino 27 para RX e Pino 28 para TX do conversor.

 

Utilizei ambos os modos para validar e obtive acesso ao console serial com sucesso, conforme pode ser visto na Figura 1.

 

Figura01
Figura 1 - Toradex Modulo Colibri iMX6 com Placa Base IRIS e conexão serial console

 

Mais informações sobre todas as conexões e pinagem da Placa Base IRIS, acesse Manual Técnico Placa Base IRIS, caso necessite de mais informações pode baixar o esquemático da placa ou acessar Placa Base IRIS.

 

Usando o utilitário minicom iremos acessar o console serial pelo device /dev/ttyUSB0.

 

 

Caso uma tela como abaixo seja exibida:

 

 

Você deu boot pela eMMC do modulo Colibri i.MX6, para usar a imagem do microSD, você deve alimentar a placa e na sequência pressionar qualquer tecla no computador para interromper a contagem do bootloader e entrar no modo-interativo.

 

Ao energizar a placa eu pressionei “espaço” e paramos na seguinte etapa:

 

 

Realizando o procedimento para dar boot pela microSD, executando o comando a seguir.

 

 

E no final teremos nossa distribuição Poky iniciada. Para acessar, o usuário é root e a senha em branco.

 

 

Por default a rede esta no modo DHCP, então se conectar em algum roteador ou alguma rede com DHCP habilitado a placa já irá atribuir um IP automaticamente e poderá acessar a mesma via SSH, no meu caso foi atribuído o IP 192.168.0.8.

 

 

Uma visão geral pela distribuição.

 

 

Usando os comando df e free, podemos ver que o rootfs esta ocupando menos de 8M e o Linux usando apenas 74M de memória RAM.

 

 

O que vem por aí

 

Demos o primeiro passo para uma base sólida na preparação, customização e construção de uma distribuição Linux para o módulo Colibri iMX6 da Toradex usando o Yocto Project, onde a partir de agora avançaremos a cada artigo explorando recursos do Placa Base IRIS e do módulo Colibri iMX6 e adicionando novas ferramentas e recursos.

 

Aguarde, pois veremos muito Shell Script, Python e Qt5 com este kit.

 

 

Referências

 

http://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html

http://cleitonbueno.com/toradex-colibri-i-mx6/

https://www.toradex.com/pt_br/products/carrier-boards/iris-carrier-board

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

https://www.toradex.com/pt_br/computer-on-modules/colibri-arm-family/nxp-freescale-imx6

http://developer.toradex.com/software-resources/arm-family/linux/linux-booting

https://en.wikipedia.org/wiki/Secure_Shell

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.

15
Deixe um comentário

avatar
 
2 Comment threads
13 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Diego SueiroÂnderson Ignácio da SilvaCleiton BuenoAndré Curvello Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Ânderson Ignácio da Silva
Visitante
Ânderson Ignácio da Silva

Olá Cleiton, no momento de gerar a imagem o seguinte erro aparece ao utilizar o comando "bitbake core-image-minimal": ERROR: Error parsing configuration files Traceback (most recent call last): File "/projects/yocto/poky-toradex/bitbake/lib/bb/cookerdata.py", line 240, in CookerDataBuilder.parseBaseConfiguration(): try: > self.parseConfigurationFiles(self.prefiles, self.postfiles) except SyntaxError: File "/projects/yocto/poky-toradex/bitbake/lib/bb/cookerdata.py", line 305, in CookerDataBuilder.parseConfigurationFiles(prefiles=[], postfiles=[]): if data.getVar("BB_WORKERCONTEXT", False) is None: > bb.fetch.fetcher_init(data) bb.codeparser.parser_cache_init(data) File "/projects/yocto/poky-toradex/bitbake/lib/bb/fetch2/__init__.py", line 497, in fetcher_init(d=): pass > revs.clear() else: File "/projects/yocto/poky-toradex/bitbake/lib/bb/persist_data.py", line 147, in SQLTable.clear(): def clear(self): > self._execute("DELETE FROM %s;" % self.table) File "/projects/yocto/poky-toradex/bitbake/lib/bb/persist_data.py", line 66, in SQLTable._execute(*query=('DELETE FROM BB_URI_HEADREVS;',)): try: > return self.cursor.execute(*query) except sqlite3.OperationalError as exc: OperationalError: attempt to write a… Leia mais »

Cleiton Bueno
Visitante

Olá Anderson, em que momento da construção ocorre isso? Como esta configurado seu ambiente de Yocto?
Tentou executar um bitbake -c cleanall core-image-minimal e depois bitbake core-image-minimal?
Alias, nunca havia visto este erro.

Ânderson Ignácio da Silva
Visitante
Ânderson Ignácio da Silva

Olá Cleiton,

Obrigado pela resposta! Conforme você citou, executei o bitbake -c cleanall ... e apresentou o mesmo erro similar, acredito que deva ser algo relacionado a ferramente bitbake. Realmente não entendo o porque disso já que estou com as mesmas versões do branch que você... =/

Diego Sueiro
Visitante
Diego Sueiro

Rode o bitbake com o parâmetro -D e veja se ele mostra qual é o arquivo de base de dados que está como leitura e mude-o para aceitar escrita.
Se não resolver, a melhor coisa a fazer é deletar a pasta tmp e começar tudo de novo.

Ânderson Ignácio da Silva
Visitante
Ânderson Ignácio da Silva

Olá Diego,

Realizei novamente os procedimentos do tutorial desde o começo em duas máquinas docker uma do debian8.3(jessie) e outra do ubuntu:14.04 e em ambas ocorreram os mesmos problemas citados anteriormente, testando em containers confirmei isto, poderia me passar em que sistema você testou esse tutorial e/ou validá-lo novamente se possível?

Diego Sueiro
Visitante
Diego Sueiro

Olá Anderson,

Eu não realizei esse tutorial em específico.

Eu uso Ubuntu 14.04 e nunca tive esse tipo de problema com o Yocto/OE.

Sugiro que dê uma olhada na wiki e fórum da Toradex para suporte:
http://developer.toradex.com
https://www.toradex.com/community

Cleiton Bueno
Visitante

Conseguiu solucionar o problema Anderson?

Ânderson Ignácio da Silva
Visitante
Ânderson Ignácio da Silva

Olá Cleiton,

Infelizmente não consegui fazer funcionar mesmo refazendo todos os passos em outra distribuição, também dei uma olhada sobre o bitbake e esse erro e vi outras pessoas com esse mesmo problema. Sinceramente estou investigando outra solução do yocto para esta placa...

Cleiton Bueno
Visitante

Certo.
Qual a distribuição que você usa e qual configuração do seu hardware?
Recomendaria você subir uma VM com Virtualbox mesmo utilizando Ubuntu e deixar com pelo menos 2 Cores e no mínimo 4G de RAM e tentar fazer os procedimentos novamente.

Ânderson Ignácio da Silva
Visitante
Ânderson Ignácio da Silva

Utilizo Debian Jessie 8.0, irei instalar uma VM para testar novamente.

Cleiton Bueno
Visitante

Ok, reporte aqui qualquer problema.

Cleiton Bueno
Visitante

O erro de readonly database é estranho, não havia visto ainda. Se estivesse usando um HD externo ou alguma outra partição e por algum equivoco estivesse como ro, teria sentido, mas por ser o /home é para estar ok.

Quando você fez os procedimentos de clonar e configurar foi com usuário comum certo, não usou o root não né?

Eu também usaria a dica do Diego, remover o conteúdo de colibri_imx6/tmp/ e verificar novamente.

Ânderson Ignácio da Silva
Visitante
Ânderson Ignácio da Silva

Quando clonei realmente não estava como root, vou limpar o colibri_imx6/tmp e tentar o rebuild. Obrigado pelas dicas!

André Curvello
Visitante

Logo eu testo na minha Colibri aqui, viu!

Cleiton Bueno
Visitante

Opa, e qualquer problema é só reportar aqui 😉