Raspberry Pi + Yocto (dora)

Raspberrypi

É bem provável que você já tenha ouvido falar da Raspberrypi. Juntamente com a Beaglebone Black, essas placas são consideradas como mini-pcs e estão sendo largamente adotadas pela comunidade open-source e têm viabilizado diversos projetos por conta de seu baixo preço, USD35 e USD45, respectivamente.

 

 

Vejamos algumas características do hardware da Rpi Modelo B (a partir de 15/10/12):

  • SoC: Broadcom BCM2835 (CPU + GPU)
  • CPU: 700 MHz ARM11 ARM1176JZF-S
  • GPU: Broadcom VideoCore IV,OpenGL ES 2.0,OpenVG 1080p30 H.264 high-profile encode/decode
  • Memória (SDRAM)iB: 512 MiB
  • USB 2.0: 2 portas
  • Saída de Video: Composite video | Composite RCA, HDMI
  • Saída de Audio: TRS connector | 3.5 mm jack, HDMI
  • Armazenamento: Secure Digital | SD / MMC / SDIO card slot
  • Interface de rede: 10/100 Ethernet RJ45
  • Periféricos de comunicação: GPIO, SPI, I²C, I²S, UART

 

rpi

 

A comunidade desenvolveu o Raspbian, que é o Debian modificado para rodar na Raspberrypi. Porém esta distribuição é para uso de propósito geral e dependendo da aplicação/produto que se queira desenvolver com a Rpi, o processamento e consumo de memória e energia podem ficar comprometidos. Portanto é mais recomendado que se construa uma distribuição Linux customizada afim de atender a esses requisitos.

 

Vamos apresentar uma maneira rápida e simples de como gerar uma distribuição Linux embarcado com o Yocto Project para a Raspberrypi. Se você ainda não conhece o Yocto, sugiro que leia o artigo do Henrique Beaglebone Black + Yocto, onde ele faz uma introdução sobre ele.

 

 

Preparando o Host

 

O Yocto Project suporta oficialmente as seguintes distribuições GNU/Linux como ambiente de construção:

  • Ubuntu 12.04, 13.10 e 14.04
  • Fedora 19 e 20 
  • CentOS 6.4 e 6.5
  • Debian 7.0, 7.1, 7.2, 7.3 e 7.4
  • openSUSE 12.2, 12.3 e 13.1

 

Para que ele execute no Host alguns pacotes necessitam ser instalados.

 

Ubuntu e Debian:

 

Fedora:

 

openSUSE:

 

CentOS:

 

 

 

Montando o Ambiente de construção

 

Vamos criar os diretórios e baixar os fontes necessários:

 

Note que estamos usando a versão "dora" do Yocto Project.

 

Agora vamos configurar o ambiente para gerarmos os artefatos de software:

 

Adicione a linha abaixo no arquivo ~/yocto/build-dora/conf/bblayers.conf  para a variável BBLAYERS:

 

Modifique e adicione as seguintes variáveis no arquivo ~/yocto/build-dora/conf/local.conf

Note que configuramos nossa machine como sendo raspberrypi, mudamos o diretório de download para podermos reutilizar os fontes baixados em outros projetos, usaremos o gerenciador de pacotes ipk (ele é mais indicado para sistemas embarcados porque não exige muitos recursos para funcionar) e vamos instalar na imagem todos os módulos do kernel gerados.

 

Se você já fez o tutorial do Henrique ou tutorial: "Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto", você pode simplesmente atualizar a sua cópia local do repositório do yocto (git pull origin dora), adicionar o repositório da meta-raspberrypi (git clone git://git.yoctoproject.org/meta-raspberrypi) e modificar os arquivos bblayers.conf e local.conf como descrito anteriormente.

 

Veja que para adicionar o suporte a Raspberrypi ao Yocto tivemos que adicionar o layer meta-raspberrypi. Esse layer possui as receitas necessárias para construir o kernel para a Raspberrypi, baixar o bootloader proprietário da Broadcom, configurar a quantidade de memória destinada a GPU do processador e construir algumas libs e aplicativos exclusivos para a Rpi. Devido a estas características dizemos que o layer meta-raspberrypi é um layer de BSP (Board Support Package). Mais detalhes podem ser encontrados no arquivo  ~/yocto/poky-dora/meta-raspberrypi/README.

 

Gerando a imagem

 

Depois de ter o ambiente de construção configurado vamos gerar uma imagem, sem bibliotecas e aplicativos gráficos:

 

Se você quiser gerar uma imagem com suporte a interface gráfica rode o seguinte comando:

 

 

Gravando a imagem

 

O Yocto gerou a imagem do SDcard que está disponível em: ~/build-dora/tmp/deploy/eglibc/images/raspberrypi/ . De posse desse arquivo podemos gravá-lo no SDcard.

 

Insira o SDcard 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 os seguintes comandos para gravar a imagem no SDcard:

 

 

Testando a imagem

 

Conecte o  o cabo serial na Rpi de acordo com essas instruções e energize a placa.

 

Para a imagem básica, sem interface gráfica, teremos o seguinte log do boot do sistema:

 

Para imagem com interface gráfica (core-image-sato) teremos as seguintes telas pela conexão HDMI:

 

Raspberrypi

 

 

Raspberrypi

 

Agora você pode criar as suas aplicações e adicionar pacotes a partir de uma distribuição enxuta e leve.

 

 

Para aprender mais

 

Embedded Linux Build Systems

Desvendando Yocto Project – Primeiros passos

Raspberry pi + Qt5 + Yocto

 

 

Onde Comprar

 

Você pode conferir o preço da Raspberry Pi Modelo B e acessórios na loja virtual FILIPEFLOP: Arduino e Componentes Eletrônicos. Acesse!

 

 

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.

Diego Sueiro
Formado em Engenharia de Controle e Automação pela UNIFEI e CEO do Embarcados, atualmente trabalho na Inglaterra com Desenvolvimento de Sistemas Linux Embarcado Real Time. Sou consultor e desenvolvedor de software para Sistemas Embarcados com vasta experiência em projetos com processadores de 8bits a 32bits, sistemas bare metal, RTOS, Linux Embarcado e Android Embarcado. Um apaixonado por Pink Floyd e Empreendedorismo.

78
Deixe um comentário

avatar
 
31 Comment threads
47 Thread replies
2 Followers
 
Most reacted comment
Hottest comment thread
13 Comment authors
Igor GallonIgor GallonDiego SueiroIgor GallonThiago Lima Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Igor Gallon
Visitante
Igor Felipe Gallon

Olá, Diego. Sei que estou um pouco atrasado no post, mas tentei seguir o tutorial e aconteceu um problema semelhante ao Thiago Lima. Consegui gerar uma imagem sem interface gráfica porém estou recebendo um erro quando tento gerar uma imagem com interface. Estou utilizando a versão "sumo" do Yocto. Segue abaixo: ERROR: Nothing PROVIDES 'faad2' (but /home/igorgallon/yocto/poky-sumo/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.12.4.bb DEPENDS on or otherwise requires it) NOTE: Runtime target 'gst-examples-dev' is unbuildable, removing... Missing or unbuildable dependency chain was: ['gst-examples-dev', 'gstreamer1.0-plugins-bad', 'faad2'] NOTE: Runtime target 'gst-examples' is unbuildable, removing... Missing or unbuildable dependency chain was: ['gst-examples', 'gstreamer1.0-plugins-bad', 'faad2'] NOTE: Runtime target 'packagegroup-core-x11-sato-games' is… Leia mais »

Igor Gallon
Membro
Igor Gallon

Consegui aqui! Muito obrigado!

Igor Gallon
Membro
Igor Gallon

Outra coisa... Eu tenho um cabo prolific PL2303 pra fazer a interface serial e não consigo de jeito algum obter o command line pela serial no meu host. Vi que tinham algumas modificações a serem feitas no /boot/cmdline (adicionando "console=tty0") e no /boot/config (enable_uart=1). Tentei com o picocom, porém sem sucesso. Sei que foge um pouco do escopo do artigo, mas você tem alguma ideia do que pode ser?

Igor Gallon
Membro
Igor Gallon

Consegui resolver o problema! O vendedor me passou a pinagem dos cabos incorreta... O RX e TX estavam invertidos... rs Mesmo assim, muito obrigado pela ajuda!

Bruno Cardoso
Visitante
Bruno Cardoso

Olá Diego, tudo bem? Estou querendo dar meus primeiros passos com o Yocto e resolvi começar por aqui já que possuo uma Raspberry, mas quando mando o comando bitbake para gerar a imagem (qualquer uma das duas), ocorre o seguinte erro: ERROR: Traceback (most recent call last): File "/home/bruno/yocto/poky-jethro/bitbake/lib/bb/cookerdata.py", line 178, in wrapped return func(fn, *args) File "/home/bruno/yocto/poky-jethro/bitbake/lib/bb/cookerdata.py", line 200, in parse_config_file return bb.parse.handle(fn, data, include) File "/home/bruno/yocto/poky-jethro/bitbake/lib/bb/parse/__init__.py", line 113, in handle return h['handle'](fn, data, include) File "/home/bruno/yocto/poky-jethro/bitbake/lib/bb/parse/parse_py/ConfHandler.py", line 124, in handle abs_fn = resolve_file(fn, data) File "/home/bruno/yocto/poky-jethro/bitbake/lib/bb/parse/__init__.py", line 136, in resolve_file raise IOError(errno.ENOENT, "file %s not found" % fn)… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Me parece que o path do meta-raspberrypi está errado.

Cola o conteúdo do seu arquivo bblayers.conf

Bruno Cardoso
Visitante
Bruno Cardoso

Conferi o conteúdo do arquivo bblayers.conf e vi que havia colocado o caminho errado para o meta-raspberrypi.

Obrigado!

Thiago Lima
Visitante

Oi Diego, estou tentando utilizar o bitbake para cozinhar a minha imagem com interface grafica para a Raspberry. Consegui com a interface sem ser grafica, mas o comando com o core-image-sato nao esta funcionando de jeito nenhum.

Tentei encontrar ajuda aqui mas nao entendi nada =)
https://www.mail-archive.com/[email protected]/msg24975.html

Veja o aviso quando tento levar ao forno.

ERROR: Nothing RPROVIDES 'packagegroup-core-x11-sato-gameskernel-modules' (but /home/thiago/yocto/poky-dora/meta/recipes-sato/images/core-image-sato.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'packagegroup-core-x11-sato-gameskernel-modules' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['packagegroup-core-x11-sato-gameskernel-modules']
ERROR: Required build target 'core-image-sato' has no buildable providers.
Missing or unbuildable dependency chain was: ['core-image-sato', 'packagegroup-core-x11-sato-gameskernel-modules']

Diego Sueiro
Visitante
Diego Sueiro

Thiago,

Este erro pode estar relacionado á sua pergunta abaixo.
No local.conf você colocou dessa maneira?
IMAGE_INSTALL_append = " kernel-modules"

Note que há um espaço entre a primeira aspas e o kernel-modules.

Veja que o erro diz que não que não existe o pacote "packagegroup-core-x11-sato-gameskernel-modules", ou seja, tá faltando um espaço aí.

Thiago Lima
Visitante

Diego, nao entendi porque tenho que incluir essa linha a seguir. Sao mesmo necessarias? O que elas significam? IMAGE_INSTALL_append = " kernel-modules"

Obrigado.

Diego Sueiro
Visitante
Diego Sueiro

Thiago,

Essa linha diz ao Yocto que ele deve instalar na imagem todos os módulos do kernel gerados. Sem isso algumas funções não vão funcionar.

Thiago Lima
Visitante

mmm... Obrigado Diego!!!

trackback

[…] Raspberrypi + Yocto […]

trackback

[…] Raspberrypi + Yocto […]

trackback

[…] Raspberrypi + Yocto […]

trackback

[…] Raspberrypi + Yocto […]

Abhishek Srivastava
Visitante
abhishek srivastava

Hi all I am using dizzy branch for raspberrypi and my kernel version is 3.18.11. actually, whenever i compile using bitbake, I am getting packages-armel.deb but i want to have packages-armhf.deb in my deployed image. I have made changes in ~/yocto/poky-dizzy-12.0.1/meta-raspberrypi/conf/raspberrypi file at DEFAULTTUNE ?= "arm1176jzfshf" I have also changes in ~/yocto/poky-dizzy-12.0.1/meta-raspberrypi/conf/machine/include/tiune-arm1176jzf.inc file at DEFAULTTUNE ?= "arm1176jzfshf" But his doesnot solve the purpose. I have even set DEFAULTTUNE to arm1176jzfshf in local.conf........still no luck Build Configuration: BB_VERSION = "1.24.0" BUILD_SYS = "i686-linux" NATIVELSBSTRING = "Ubuntu-14.04" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "raspberrypi" DISTRO = "poky" DISTRO_VERSION = "1.7.1" TUNE_FEATURES = "arm… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

I suspect that there is a bug in yocto when naming the deb packages.
I did a test changing the DEFAULTTUNE to "arm1176jzfshf" and the log of the compiled packages has:
"-march=armv6 -mthumb-interwork -mfloat-abi=hard -mtune=arm1176jzf-s -mfpu=vfp"

As you can see it is using hfp but the deb packages are armel.

trackback

[…] Raspberrypi + Yocto […]