Projeto de Kiosk Interativo para a Beaglebone Black com Yocto - parte 3

projeto de kiosk interativo
Este post faz parte da série Projeto de Kiosk Interativo para a Beaglebone Black com Yocto. Leia também os outros posts da série:

Vimos na primeira e segunda partes da série do projeto do Kiosk Interativo como gerar, gravar e testar as imagens do web-kiosk e kiosk-manager na Beaglebone Black. Essas imagens servem como ponto de partida para desenvolvermos o produto e aplicação que desejamos. É muito provável que queremos ir além do que está pronto, customizando arquivos de configuração e adicionando novos pacotes a imagem.

O Yocto possui um conjunto de metadados organizados em camadas que serão processados pelo bitbake para a geração dos artefatos de software (bootloader, kernel, pacotes, bibliotecas e sistema de arquivos raíz) para o nosso target. Basicamente esses metadados podem ser dos tipos: Configurações do Yocto, da Distribuição e do Target (Machine) e Receitas para a construção dos artefatos (arquivos .bb).

As modificações desejadas podem ser realizadas sem que tenhamos que alterar as receitas originais. Isso facilita eventuais atualizações do sistema de build e o controle de mudanças fica bastante simplificado.

No processo de configuração do ambiente descrito na primeira parte, fizemos uso da organização em camadas quando baixamos e integramos a meta-ti e meta-web-kiosk. A meta-ti é classificada como uma camada de BSP (Board Support Package) e contém as receitas necessárias para a construção dos softwares baixo nível (bootloader, kernel, drivers e bibliotecas específicas) para placas que contém processadores fabricados pela Texas Instruments. Já a camada meta-web-kiosk possui as receitas de software alto nível, não se preocupando com o hardware em que será executado a aplicação.

Neste artigo vamos aprender como criar uma camada e estender as funcionalidades presentes nas imagens core-image-web-kiosk-image e core-image-kiosk-manager. A estrutura padrão de uma camada é composta por um arquivo de configuração presente em conf/layer.conf e de receitas (arquivos bb e bbappend) distribuídos em diferentes diretórios do tipo recipes-"categoria"/nome-do-pacote/nome-do-pacote_versão.bb|bbappend. As receitas com extensão bbappend servem para que possamos modificar as receitas originais sem que tenhamos que editá-las, ou seja, iremos adicionar ao arquivo o original através do arquivo bbappend.

Customizando as imagens

Vamos criar a nossa camada de customização meta-kiosk-custom com os seguintes comandos:

cd ~/yocto/kiosk-src
mkdir -p meta-kiosk-custom/conf
echo -e '# We have a conf and classes directory, append to BBPATH\nBBPATH .= ":${LAYERDIR}"\n\n# We have a recipes directory, add to BBFILES\nBBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend"\n\nBBFILE_COLLECTIONS += "kiosk-custom"\nBBFILE_PATTERN_kiosk-custom := "^${LAYERDIR}/"\nBBFILE_PRIORITY_kiosk-custom = "6"' > meta-kiosk-custom/conf/layer.conf

Como resultado, teremos o arquivo ~/yocto/kiosk-src/meta-kiosk-custom/conf/layer.conf:

# We have a conf and classes directory, append to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have a recipes directory, add to BBFILES
BBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend"

BBFILE_COLLECTIONS += "kiosk-custom"
BBFILE_PATTERN_kiosk-custom := "^${LAYERDIR}/"
BBFILE_PRIORITY_kiosk-custom = "6"

Este arquivo tem as variáveis de configuração para o Yocto poder buscar e usar as receitas presentes.

Digamos que queremos adicionar todos os módulos do Python (pacote python-modules) disponíveis por padrão no Yocto em ambas as imagens a serem construídas. Os arquivos que definem essas imagens são: meta-web-kiosk/recipes-browser/images/core-image-web-kiosk.bb e meta-web-kiosk/recipes-manager/images/core-image-kiosk-manager.bb, respectivamente. Para isso vamos criar os respectivos arquivos bbappend dentro da nossa camada meta-kiosk-custom executando os comandos:

cd ~/yocto/kiosk-src
mkdir -p meta-kiosk-custom/recipes-browser/images/
echo -e 'IMAGE_INSTALL += " python-modules"' > meta-kiosk-custom/recipes-browser/images/core-image-web-kiosk.bbappend
mkdir -p meta-kiosk-custom/recipes-manager/images/
echo -e 'IMAGE_INSTALL += " python-modules"' > meta-kiosk-custom/recipes-manager/images/core-image-kiosk-manager.bbappend

Como resultado teremos em ambos arquivos meta-kiosk-custom/recipes-browser/images/core-image-web-kiosk.bbappendmeta-kiosk-custom/recipes-manager/images/core-image-kiosk-manager.bbappend o seguinte conteúdo:

IMAGE_INSTALL += " python-modules"

A variável IMAGE_INSTALL é a responsável por conter quais pacotes devem ir na imagem e note que estamos incrementando-a com o operador "+=" pois assim não removemos o que já foi inserido na receita original.

Para saber quais os pacotes disponíveis use a ferramenta de busca disponibilizada pelos desenvolvedores do Yocto/Openembedded. Atente-se ao fato de qual camada (Layer) provê um determinado pacote. Se ele não estiver presente no openembbeded-core você terá que baixar o repositório da camada em questão, usar o branch dora e adicionar o seu caminho na variável BBLAYERS dentro do arquivo ~/yocto/kiosk-build/conf/bblayers.conf.

Agora vamos supor que queremos que o nosso web-kiosk tenha a página web inicial diferente da que está no padrão. Para isso teremos que alterar o arquivo de configuração da sessão do Midori, que é o web browser utilizado. O arquivo de configuração original está presente em: meta-web-kiosk/recipes-browser/midori-session/files/config e o modificaremos para abrir a página do Embarcados. Vamos criar um bbappend da receita original (meta-web-kiosk/recipes-browser/midori-session/midori-session_0.1.bb) e adicionar o nosso novo arquivo de configuração. Execute os comandos abaixo:

cd ~/yocto/kiosk-src
mkdir -p meta-kiosk-custom/recipes-browser/midori-session/files
echo -e '[settings]\ndefault-encoding=ISO-8859-1\nload-on-startup=MIDORI_STARTUP_HOMEPAGE\nhomepage=https://www.embarcados.com.br\nmaximum-cookie-age=0\nmaximum-history-age=0\nalways-show-tabbar=false\nclose-buttons-on-tabs=false\nopen-new-pages-in=MIDORI_NEW_PAGE_CURRENT\nenable-html5-database=true\nenable-plugins=true\n#proxy-type=MIDORI_PROXY_HTTP\n#http-proxy=proxy_address\n#http-proxy-port=port_number' > meta-kiosk-custom/recipes-browser/midori-session/files/config
echo -e 'FILESEXTRAPATHS_prepend := "${THISDIR}/files:"' > meta-kiosk-custom/recipes-browser/midori-session/midori-session_0.1.bbappend

Como resultado teremos o arquivo meta-kiosk-custom/recipes-browser/midori-session/files/config com o seguinte conteúdo:

[settings]
default-encoding=ISO-8859-1
load-on-startup=MIDORI_STARTUP_HOMEPAGE
homepage=https://www.embarcados.com.br
maximum-cookie-age=0
maximum-history-age=0
always-show-tabbar=false
close-buttons-on-tabs=false
open-new-pages-in=MIDORI_NEW_PAGE_CURRENT
enable-html5-database=true
enable-plugins=true
#proxy-type=MIDORI_PROXY_HTTP
#http-proxy=proxy_address
#http-proxy-port=port_number

E o arquivo meta-kiosk-custom/recipes-browser/midori-session/midori-session_0.1.bbappend

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

Veja que criamos a variável FILESEXTRAPATHS indicando qual o caminho que deve ser usado para encontrar os arquivos. A extensão "_prepend" força o bitbake a usar os arquivos nesse caminho como os padrões. Logo ele levará em consideração o arquivo meta-kiosk-custom/recipes-browser/midori-session/files/config invés do meta-web-kiosk/recipes-browser/midori-session/files/config.

Agora devemos configurar o Yocto para "enxergar" a nossa camada de customização. Adicione a linha abaixo no arquivo ~/yocto/kiosk-build/conf/bblayers.conf para a variável BBLAYERS.

${TOPDIR}/../kiosk-src/meta-kiosk-custom \

Construindo as imagens customizadas 

O mesmo procedimento de construção das imagens descrito nos artigos anteriores serão realizados. Basta executar os seguintes comandos:

cd ~/yocto
. kiosk-src/oe-init-build-env kiosk-build
bitbake core-image-web-kiosk
bitbake core-image-kiosk-manager

Gravando e testando as imagens customizadas do Kiosk Interativo

Estes processos são os mesmos descritos nas partes anteriores, com a diferença que teremos novas imagens geradas com as nossas customizações. Recorra a parte 1 para gravar e testar a imagem do web-kiosk e a parte 2 para o kiosk-manager.

Agora, ao invés da página inicial do web-kiosk ser a do Yocto Project, teremos a página no Embarcados entrando em cena logo a partir do primeiro boot do equipamento.

 

Conclusão

Essa série apresentou um passo-a-passo sobre processo de criação de uma distribuição Linux embarcado com o Yocto para um produto com aplicação real. Vimos como podemos customizar o processo de construção para adicionar modificações que desejamos para a nossa aplicação.

E você? Qual o produto irá desenvolver com o Yocto Project?

 

Para aprender mais

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

 

Outros artigos da série

<< Projeto de Kiosk Interativo para a Beaglebone Black com Yocto - parte 2
Este post faz da série Projeto de Kiosk Interativo para a Beaglebone Black com Yocto. 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.

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.

12
Deixe um comentário

avatar
 
12 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
BeagleBone Black + Qt Embedded + Yocto - Parte 2Raspberry Pi - Qt5 + YoctoRaspberry pi Qt5 YoctoBeaglebone Black + Qt5 + YoctoBeaglebone Black Qt5 Yocto Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[…] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 […]

trackback

[...] Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3 [...]