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.bbappend e meta-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://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://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?






