Boot via microSD na Toradex Colibri i.MX7

Boot via microSD.

Introdução

 

No artigo Criando uma Distribuição Linux com Yocto Project para Toradex Colibri i.MX7 preparamos o ambiente Host e, utilizando Yocto Project, geramos uma Distribuição Linux customizada. Em outro artigo, Gravando imagem customizada Linux na Toradex Colibri i.MX7, foi descrito como gravar a imagem gerada na memória Flash eMMC, baseado nos scripts e ferramentas fornecidas pela Toradex e adequadas ao artigo.

 

Desta vez será descrito como gravar a imagem em um microSD e a configuração necessária para alterar a ordem de boot, de eMMC para microSD.

 

 

Yocto Project

 

A configuração mandatória para que este artigo flua foi realizada ao criarmos a distribuição. Customizamos o arquivo build-trdx-imx7/conf/local.conf para incluir o seguinte conteúdo na variável IMAGE_FSTYPES:

 

 

 

Wic

 

Na variável IMAGE_FSTYPES o destaque se dá para a opção wic.gz. Resumidamente, o wic é uma alternativa à substituição do sdcard utilizado em versões anteriores, e derivado do OpenEmbedded Image Creator (oeic). Porém, para uma melhor pronúncia, o ditongo “oe” foi alterado por “w”.

 

O wic também tem uma leve base no Meego image Creator (mic), no entanto, muitas modificações e reestruturação foram realizados para suportar os artefatos do OpenEmbedded.

 

Então, o comando wic gera imagens particionadas a partir de artefatos existentes do OpenEmbedded. Os comandos e instruções devem estar em um arquivo com extensão .wks, conhecido como OpenEmbedded Kickstarter. Podemos ver um wks da camada meta-freescale, que é uma das camadas utilizadas, imx-uboot-bootpart.wks.

 

 

Diretório "deploy" do Yocto

 

Após abordar sobre a configuração do Yocto Project e a ferramenta utilizada para criar uma imagem com as devidas partições, podemos acessar o diretório com o resultado dos trabalhos do build system. Na listagem pode-se visualizar o arquivo com extensão .wic.gz.

 

 

O arquivo gerado é o Angstrom-console-image-glibc-ipk-v2018.06-colibri-imx7.rootfs.wic.gz, o arquivo console-image-colibri-imx7.wic.gz é apenas um link-simbólico para o primeiro.

 

Para não usar o diretório de trabalho do Yocto Project, copie o arquivo console-image-colibri-imx7.wic.gz para o diretório de sua preferência ou de trabalho, no caso deste artigo será utilizado o ~/Toradex, equivalente a /home/seu_usuario/Toradex.

 

 

Próxima etapa, acessar o diretório ~/Toradex e descompactar o arquivo wic.gz.

 

 

Antes de gravar o wic, podemos verificar se ele possui as devidas partições. Para isso utilizamos o comando "fdisk" do Linux.

 

 

Pode-se notar que há duas partições: uma FAT32, contendo normalmente arquivos de bootloader, device-tree e kernel; e uma partição Linux, neste caso EXT4.

 

 

Gravando a imagem

 

Nesta etapa, após descompactar o wic.gz, deve-se inserir um microSD no computador, identificar o seu respectivo dispositivo (que pode ser feito com o comando "lsblk"), desmontar as partições e realizar a gravação da imagem através do comando "dd" do Linux.

 

 

Após identificar o dispositivo, neste caso /dev/mmclk0, deve-se desmontar as partições. Caso tenha mais de 1, repetir o procedimento para demais partições.

 

 

Realizar a cópia, ou melhor, gravação no microSD:

 

 

Pronto! MicroSD preparado e pronto para ser utilizado em uma das BaseBoards com Toradex Colibri i.MX7.

 

 

Acessando bootloader U-Boot

 

Para correta configuração e alterar a ordem do boot, é necessário acessar o console do bootloader U-Boot utilizando um cabo serial ou conversor USB-Serial. A seguir um vídeo explicativo da Toradex sobre esta etapa.

 

 

Após conectar o cabo serial, insira o microSD gravado, e utilizando qualquer programa para abrir e acessar portas seriais, como Putty para Windows, e minicom ou picocom para Linux, conecte ao dispositivo serial.

 

Neste artigo será utilizado o picocom, e após abrir a porta serial, alimente a placa. Logo no início uma mensagem com o dizer “Hit any key to stop autoboot:” será exibida e deverá pressionar qualquer tecla para interromper o bootloader e poder acessar o console como abaixo:

 

 

Neste momento, o que importa são duas variáveis, que seriam bootcmd e sdboot. bootcmd é procurada logo após expirar o tempo do bootdelay, como pode ser visto no autoboot.c do código-fonte do u-boot. Já sdboot contém os parâmetros e configurações para se realizar um boot através do microSD, quando suportado pelo fabricante.

 

Antes de realizar qualquer mudança, pode-se testar e validar utilizando o comando "run" do U-Boot. Então dentro do prompt do bootloader, irá executar "run sdboot" e verificar se o boot completo e com sucesso acontece.

 

 

Baseado na saída acima, o boot ocorreu com sucesso, chegando até o prompt de login. Deve-se repetir o processo de ligar e acessar o bootloader U-boot para agora modificar e aplicar esta configuração.

 

Pode-se visualizar o conteúdo da variável bootcmd com o comando "printenv".

 

 

Deverá ser alterada a variável bootcmd para antes de "run ubiboot" tente "run sdboot". Para modificar, utiliza-se o comando "setenv", e para salvar a modificação utilizar o comando "saveenv".

 

 

Para validar pode-se desligar e ligar a placa, ou digitar o comando "reset".

 

 

Sucesso! Ordem de boot concluída e funcionando.

 

 

Confirmando o boot via microSD

 

Caso queira confirmar que o boot foi realmente realizado através do microSD, através do comando "dmesg" realizar esta verificação. Serão omitidas diversas mensagens, focando apenas na parte dos dispositivos de bloco.

 

 

Há uma entrada na saída do comando sobre um dispositivo NAND de capacidade 512 MB e, logo a seguir, alguns detalhes sobre partições do MTD. E mais abaixo, sobre o controlador SDHCI e o dispositivo mmc0 de capacidade 3.64 GB e duas partições, sendo os dispositivos /dev/mmcblk0p1 e /dev/mmcblk0p2.

 

No entanto, vale ressaltar a entrada no início do "dmesg" quanto ao cmdline do kernel:

 

 

Observe o "root=/dev/mmcblk0p2", que será entendido na verificação a seguir. Analisando com o "df"e "fdisk":

 

 

O "df" não aponta o "/dev/mmcblk0p2", porém refere-se ao /dev/root que já apontamos no cmdline do kernel, além de informar o tamanho total de 942 MB, o que não seria o caso usando eMMC de 512 MB. E o fdiskreforça estas informações.

 

 

Considerações finais

 

Neste artigo apresentou-se como em uma única configuração utilizando Yocto Project há como resultado estruturas e arquivos para criar mais de uma forma de boot.

 

O simples fato de acessar o console do bootloader e remover "run sdboot" da variável bootcmd, voltará a realizar boot via eMMC com o UbiFS que foi criado.

 

Outras referências e informações sobre variáveis do bootloader U-Boot e exemplos do .wks encontram-se nas referências no final do artigo.

 

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

 

 

Saiba mais

 

Amazon FreeRTOS, núcleos heterogêneos e os novos Apalis e Colibri iMX8

Embarcando ScadaBR com Yocto na Toradex Colibri i.MX6

CoM Toradex COLIBRI T20 e Carrier Board Iris

 

 

Referências

 

https://www.yoctoproject.org/docs/2.5/mega-manual/mega-manual.html#creating-partitioned-images-using-wic

https://www.denx.de/wiki/DULG/UBootEnvVariables

https://github.com/openembedded/openembedded-core/blob/sumo/meta-selftest/recipes-test/images/wic-image-minimal.wks

Outros artigos da série

<< Conectando Toradex Colibri i.MX7 com WiFi
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.

Deixe um comentário

avatar
 
  Notificações  
Notificar