47 Comentários

BeagleBone Black + Yocto

beaglebone black com yocto 7Masters

Muito tem sido comentado sobre plataformas de desenvolvimento suportadas por grandes comunidades, tal como a BeagleBone Black e a Raspberry Pi. Ambas têm atingido um grande público em específico, aquele ávido por conhecimento em Linux embarcado. Muito bem! Aqui começa um tutorial de como criar imagens personalizadas para a placa BeagleBone Black com Yocto Project

O que é a BeagleBone Black?

A BeagleBone Black é o mais novo membro da família BeagleBoard e suas características estão listadas no seu Wiki oficial. Algumas das grandes melhorias dessa placa com relação à sua versão anterior, “white”, são:

  • Processador: TI Sitara AM3359 de 1GHz;
  • Memória DRAM: DDR3L 400MHz de 512 MB;
  • Memória Flash: eMMC de 2GB e conector para microSD card.

E onde podemos gravar o nosso querido Linux na placa? Tanto a memória Flash eMMC quanto um microSD card podem receber todas as imagens necessárias para compor o sistema Linux, as quais, basicamente, são: 

  • Bootloader;
  • Kernel Linux;
  • Sistema de arquivos.

Agora que é conhecido o que gravar na placa e os dispositivos de armazenamento oferecidos por ela, como é possível gerar tais imagens? Pode-se utilizar tanto imagens pré-compiladas disponibilizadas no site oficial, ou criar imagens customizadas a partir das técnicas apresentadas no artigo Embedded Linux Build Systems, de Diego Sueiro.

Neste artigo será utilizado um microSD card como dispositivo de armazenamento e o Yocto Project como build system.

O que é Yocto Project?

O Yocto Project é um projeto open-source colaborativo que oferece templates, ferramentas e métodos para auxiliar na criação de sistemas baseados em Linux para sistemas embarcados, independente da arquitetura de hardware utilizada. O Yocto inclui em sua arquitetura o build system Poky, que, por sua vez, é derivado do build system OpenEmbedded.

O OpenEmbedded é composto de dois elementos principais, como mostrado abaixo: BitBake e Metadata. BitBake é uma ferramenta de build muito flexível mantida pelos projetos Yocto e OpenEmbedded, comandada pelas instruções presentes no Metadata e com a finalidade de gerar, entre outros, as imagens finais do sistema de arquivos, kernel, bootloader e SDKs.

beaglebone black com yocto
Figura 1: BitBake, ferramenta de build mantida pelos projetos Yocto e OpenEmbedded

Gerando as imagens para a Beaglebone Black com Yocto

Como sistema host foi utilizado um PC com a distribuição Ubuntu 14.04 64-bits instalada. Algumas dependências devem ser resolvidas no sistema antes de prosseguir. Para isso, execute o seguinte comando:

Para a geração das imagens da placa BeagleBone Black é necessário utilizar seus respectivos metadados, tais como receitas, classes, tarefas e configuração.

Precisa-se, agora, realizar o download de todos esses itens. Neste artigo é utilizada a última versão estável do Yocto, na versão 2.2 e nomeada Morty. Para isso, siga os seguintes comandos:

É criado o diretório build-bbb-morty, contendo o sub-diretório conf, onde são armazenados os arquivos de configuração do projeto local.conf e bblayers.conf. Os dois arquivos precisam ser alterados.

Arquivo local.conf

A linha onde a variável MACHINE é configurada precisa ser substituída pelo seguinte conteúdo:

Adicione o seguinte conteúdo:

Arquivo bblayers.conf

Não é necessário acrescentar layers ao build.

Build

Neste ponto é necessário selecionar uma imagem para ser gerada para a BeagleBone Black. É só retornar ao diretório build-bbb-morty e executar o BitBake com os seguintes comandos:

Configuração de build utilizada:

Esse comando cria a menor e mais simples imagem para a placa. Depois de algum tempo, são geradas as imagens em ~/beaglebone-black/yocto/builds/build-bbb-morty/tmp/deploy/images/beaglebone, as quais devem ser gravadas no microSD card. Tais imagens são: 

  • core-image-minimal-beaglebone.tar.bz2 (rootfs - sistema de arquivos);
  • MLO (bootloader de primeiro estágio);
  • u-boot.img (bootloader de segundo estágio - U-Boot);
  • zImage (kernel) e;
  • zImage-am335x-boneblack.dtb (Device Tree Binary).

Gravação das imagens no microSD Card

Para a gravação dessas imagens no microSD card, o mesmo deve ser particionado e formatado de acordo o padrão aceito pelo placa. Para isso foi criado um script, que pode ser obtido com os seguintes comandos:

Insira um microSD card no computador PC ou notebook (sistema host) e descubra qual o device node criado pelo sistema operacional. Tente um dos seguintes comandos:

Caso, por exemplo, o device node criado seja /dev/sdb, use o seguinte comando:

Assim que o processo de particionamento e formatação terminar, duas partições no microSD card são criadas:

  • boot (FAT32);
  • rootfs (ext4).

Execute a “montagem” dessas duas partições no sistema de arquivos do sistema host. Caso esse faça uso da distribuição Ubuntu, basta remover e inserir novamente o dispositivo no seu conector. Dado que, por exemplo, os pontos de montagem criados sejam /media/boot e /media/rootfs, as imagens geradas anteriormente são copiadas da seguinte forma:

Pronto! Agora é conectar o microSD card na Beaglebone Black e curtir! A porta serial de debug da placa é usada para o console do sistema operacional  e o conteúdo de sua saída é mostrado abaixo. Pode ser montado um cabo serial como mostrado no tutorial BeagleBone Black Serial.

Initialized drm 1.1.0 20060810 random: fast init done brd: module loaded mtdoops: mtd device (mtddev=name/number) must be supplied libphy: Fixed MDIO Bus: probed davinci_mdio 4a101000.mdio: davinci mdio revision 1.6 davinci_mdio 4a101000.mdio: detected phy mask fffffffe libphy: 4a101000.mdio: probed davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720 cpsw 4a100000.ethernet: Detected MACID = 1c:ba:8c:e5:41:46 usbcore: registered new interface driver kaweth pegasus: v0.9.3 (2013/04/25), Pegasus/Pegasus II USB Ethernet driver usbcore: registered new interface driver pegasus usbcore: registered new interface driver rtl8150 usbcore: registered new interface driver asix usbcore: registered new interface driver ax88179_178a usbcore: registered new interface driver cdc_ether usbcore: registered new interface driver dm9601 usbcore: registered new interface driver smsc75xx usbcore: registered new interface driver smsc95xx usbcore: registered new interface driver net1080 usbcore: registered new interface driver cdc_subset usbcore: registered new interface driver zaurus usbcore: registered new interface driver MOSCHIP usb-ethernet driver usbcore: registered new interface driver int51x1 usbcore: registered new interface driver cdc_ncm ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci-omap: OMAP-EHCI Host Controller driver usbcore: registered new interface driver usb-storage 47401300.usb-phy supply vcc not found, using dummy regulator musb-hdrc musb-hdrc.0.auto: Failed to request rx1. musb-hdrc musb-hdrc.0.auto: musb_init_controller failed with status -517 47401b00.usb-phy supply vcc not found, using dummy regulator musb-hdrc musb-hdrc.1.auto: Failed to request rx1. musb-hdrc musb-hdrc.1.auto: musb_init_controller failed with status -517 mousedev: PS/2 mouse device common for all mice omap_rtc 44e3e000.rtc: rtc core: registered 44e3e000.rtc as rtc0 i2c /dev entries driver omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec omap_hsmmc 48060000.mmc: Got CD GPIO mmc0: host does not support reading read-only switch, assuming write-enable mmc0: new high speed SDHC card at address 0007 usbcore: registered new interface driver usbhid usbhid: USB HID core driver oprofile: using arm/armv7 u32 classifier Actions configured NET: Registered protocol family 10 sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver NET: Registered protocol family 17 Key type dns_resolver registered omap_voltage_late_init: Voltage driver support not added ThumbEE CPU extension supported. Btrfs loaded, crc32c=crc32c-generic mmcblk0: mmc0:0007 SD8GB 7.21 GiB tps65217 0-0024: TPS65217 ID 0xe version 1.2 mmcblk0: p1 p2 tda998x 0-0070: found TDA19988 tilcdc 4830e000.lcdc: bound 0-0070 (ops tda998x_ops)

Supports vblank timestamp caching Rev 2 (21.10.2013).

No driver support for vblank timestamp query. tilcdc 4830e000.lcdc: No connectors reported connected with modes

Cannot find any crtc or sizes - going 1024x768 Console: switching to colour frame buffer device 128x48 tilcdc 4830e000.lcdc: fb0: frame buffer device

Initialized tilcdc 1.0.0 20121205 on minor 0 omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 1 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected console [netcon0] enabled netconsole: network logging started omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800) mmc1: new high speed MMC card at address 0001 mmcblk1: mmc1:0001 MMC04G 3.66 GiB mmcblk1boot0: mmc1:0001 MMC04G partition 1 1.00 MiB mmcblk1boot1: mmc1:0001 MMC04G partition 2 1.00 MiB mmcblk1: p1 p2 EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext4 filesystem) on device 179:2. devtmpfs: mounted Freeing unused kernel memory: 1024K (c0d00000 - c0e00000) INIT: version 2.88 booting Starting udev udevd[110]: starting version 3.2 udevd[111]: starting eudev-3.2 omap_rng 48310000.rng: OMAP Random Number Generator ver. 20 EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered Populating dev cache Sun Nov 6 23:26:31 UTC 2016 INIT: Entering runlevel: 5 Configuring network interfaces... net eth0: initializing cpsw version 1.12 (0) SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=4a101000.mdio:00, irq=-1) IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready udhcpc (v1.24.1) started Sending discover... Sending discover... Sending discover... No lease, forking to background done. Starting syslogd/klogd: done Poky (Yocto Project Reference Distro) 2.2 beaglebone /dev/ttyO0 beaglebone login: root [email protected]:~# uname -a Linux beaglebone 4.8.3-yocto-standard #1 PREEMPT Sun Nov 6 21:21:52 BRST 2016 armv7l GNU/Linux [email protected]:~#

Nos próximos artigos serão adicionados aplicativos e bibliotecas, tal como Qt, ao sistema de arquivos, de forma a customizar a imagem mínima criada. Também tenho utilizado com frequência o Buildroot como build system, mas no momento tenho preferência pelo Yocto. E você? Usa o Yocto em seus projetos?

Para aprender mais

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

Beaglebone Black + Yocto Daisy (Versão 1.6)

Lançada Nova Versão 1.7 (dizzy) do Yocto Project

Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 1

Beaglebone Black + Qt Embedded + Yocto – parte 1

Beaglebone Black + Qt5 + Yocto - parte 1

Como criar uma imagem customizada para a BeagleBone Black com Buildroot

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

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

Beaglebone Black » BeagleBone Black + Yocto
Comentários:
47 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Rodrigo Machado
Rodrigo Machado
09/01/2016 17:43

Olá Henrique gostaria de saber se você já desenvolveu algo para a beaglebone black utilizando o kinect.

Henrique Rossi
Reply to  Rodrigo Machado
09/01/2016 18:02

Olá Rodrigo!

Nunca trabalhei com o kinect. Parece ser uma implementação muito interessante! 🙂

Fernando França
15/12/2015 14:07

Ótimo artigo Henrique, obrigado por compartilhar esse conhecimento. Venho trabalhando com Linux embarcado profissionalmente há pouco tempo utilizando RPi e Raspbian e me preparando para abandonar o Raspbian para algo mais customizado com o Yocto.

Henrique Rossi
Reply to  Fernando França
19/12/2015 18:19

Muito obrigado Fernando!

Eu acho que está seguindo o caminho correto quando se trata de produto. Também já usei a RPi em projetos e deixa a sua solução mais enxuta e coesa com o que precisa. Se precisar de ajuda, estou à disposição.

Abraços,
Henrique

Gabriel Habib
Gabriel Habib
14/10/2015 19:36

Henrique, gostaria de saber se existe a possibilidade de incluir os drivers do BBView juntamente com Yocto + QT ?

Obrigado!

Henrique Rossi
Reply to  Gabriel Habib
18/10/2015 22:27

Olá Gabriel,

Eu nunca usei essa expansion board, mas teoricamente seria habilitar o seu .dto no arquivo uEnv.txt da partição de boot. Adicione na variável optargs o seguinte conteúdo:

capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-VIEW-LCD7-01

Use estes links também como referência:

http://www.element14.com/community/thread/31051/l/how-to-bb-view-on-latest-debian?displayFullThread=true

http://www.element14.com/community/servlet/JiveServlet/downloadBody/65082-102-5-294046/BB%20VIEW%20User%20Manual%20V3.pdf

Abraços

Joe Papst
Joe Papst
02/08/2014 18:25

Boa Noite meu amigo,
Estou com uma duvida de Linux embarcado (beaglebone Black).
Quero fazer um projeto onde meu software tem que ficar rodando no linux.
Então assim que o linux iniciar, logo inicia meu software.
Qual a melhor solução, fazer rodar como programa ou como serviço?
Pois ser meu software der bug e parar como controlo este erro e reinicio o sistema automático para não ficar travado?

Diego Sueiro
Diego Sueiro
Reply to  Joe Papst
03/08/2014 07:20

Olá Joe, Aos "olhos" do kernel, ser um programa ou serviço não há distinções. A inicialização e monitoramento (se está executando ou não) de sua aplicação e deve ser feito pelo sistema de init. Basicamente você pode usar 2 sistemas de init: o sysVinit e o systemd. Ou se estiver usando o Ubuntu será o upstart. Depois de definido qual o sistema de init a ser utilizado você terá que realizar as devidas configurações para que ele inicie, monitore e pare a sua aplicação. Estes três sistemas de inicialização possuem extensas documentações para te auxiliar. Em relação ao travamento da… Leia mais »

Henrique Rossi
Reply to  Joe Papst
03/08/2014 11:23

Bom dia Joe!

As dicas do Diego são muito valiosas. Estude o sistema de init que está utilizando!

Eu geralmente uso System V e Busybox, e crio um script que gerencia a execução da aplicação principal. A ideia é que se a aplicação for encerrada, o próprio script detecta isso e toma a devida ação de acordo com o retorno gerado pela aplicação. Na maioria dos casos a aplicação é simplesmente re-executada. Em outros, um tratamento mais elaborado é necessário.

Abraços,
Henrique

Eduardo Scherrer
Eduardo C. Scherrer
08/12/2013 19:17

Muito bom este post. Aqui rodou que é uma beleza.
Estou com o ubuntu 12.04 mas de 32bits. Mesmo assim não mudei nada nos passos do post.

Henrique Rossi
Reply to  Eduardo C. Scherrer
09/12/2013 20:40

Muito obrigado Eduardo! Ainda bem que as instruções deram certo. Já começamos a escrever sobre a BeagleBone Black, e está sendo um post um atrás do outro!!

Abraços

Cássio Volcan
Cássio Volcan
22/11/2013 10:21

Parabéns pelo tutorial Henrique. Eu trabalho com Yocto há algum tempo e realmente é uma ferramenta bem interessante. Tenho uma Beagle Bone Black rodando ROS (Robot Operating System) e outros placas (Também com processador Arm, porém com bem menos memória e "poder" de processamento) da minha empresa rodando QT e Proview, por exemplo. Industrialmente é imprescindível o uso de uma distribuição que te dê acesso as bibliotecas necessárias à tua aplicação, porém SÓ as necessárias. O Yocto Project te trás todos esses benefícios com uma ampla gama de tutoriais e fóruns de discussão. Caso eu possa vir a tentar ajudar… Leia mais »

Henrique Rossi
Reply to  Cássio Volcan
22/11/2013 17:48

Olá Cássio,

Comecei a trabalhar com o Yocto recentemente e tenho percebido que vale muito a pena saber trabalhar com essa ferramenta poderosa. Também gosto de trabalhar com o Buildroot, que acho relativamente mais fácil.

Agradeço-lhe pela ajuda e havendo uma oportunidade entro em contato contigo!

Abraços e continue acompanhando o Embarcados!!

adelino
adelino
13/11/2013 09:39

Parabéns, Henrique! Excelente post! Recentemente adquiri uma BeagleBone Black, vou testar utilizando o Yocto.

Henrique Rossi
Reply to  adelino
13/11/2013 09:46

Muito obrigado Adelino! Mais um motivo para brincar com a sua BeagleBone Black 🙂
Dá para produzir muitas coisas com ela! Depois mostra os resultados para a gente!

Abraços!

Ronaldo Nunez
10/11/2013 16:48

Ficou muito boa a materia! Parabéns! Aguardamos mais matérial de yocto! Abraço

Henrique Rossi
Reply to  Ronaldo Nunez
10/11/2013 21:20

Muito obrigado Ronaldo! Essa placa é muito bacana para estudos e novos posts virão.

Abraços

Marcelo Anjos
Marcelo Anjos
10/11/2013 10:22

Valeu Henrique muito bom temos poucas informações sobre Youcto.vou testar
Abraços

Henrique Rossi
Reply to  Marcelo Anjos
10/11/2013 10:25

Marcelo,

Aguarde que teremos muito mais posts sobre a BeagleBone Black e Yocto!

Abraços,
Henrique

trackback
27/05/2015 02:53

[…] BeagleBone Black + Yocto […]

Talvez você goste:

Séries

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link