A ferramenta devtool do Yocto Project
- por Sergio Prado
A ferramenta devtool foi criada para que o desenvolvedor de aplicações pudesse integrar mais facilmente a sua aplicação na distribuição criada pelo Yocto Project, sem que precise conhecer em detalhes a sintaxe do BitBake e do sistema de build. Ela automatiza o processo de criação de receitas, compilação da aplicação e instalação no target, facilitando bastante a vida do desenvolvedor.

Por exemplo, dado o código-fonte de uma aplicação chamada app, os três comandos abaixo irão criar uma receita para a aplicação, compilar e instalar a aplicação no target:
$ devtool add app /path/to/app/source $ devtool build app $ devtool deploy-target app root@device_ip  | 
Simples assim!
Vamos estudar mais detalhadamente como esta ferramenta funciona.
EXEMPLO 1: PROGRAMA SIMPLES EM C
Dado um simples programa em C:
$ vim /home/sprado/apps/apptest/apptest.c  | 
#include <stdio.h> int main(int argc, const char *argv[]) { printf("Aplicação de Teste V1.0\n"); return 0; }  | 
O comando “devtool add” é capaz de criar um esqueleto de receita para este programa:
$ devtool add apptest /home/sprado/apps/apptest  | 
Primeiro, o comando irá criar uma camada chamada “workspace” no diretório de build do Yocto Project:
$ tree workspace/
workspace/
├── appends
│   └── apptest.bbappend
├── conf
│   └── layer.conf
├── README
└── recipes
    └── apptest
        └── apptest.bb | 
Esta camada será adicionada automaticamente no bblayers.conf, e dentro dela serão criados todos os arquivos de trabalho da ferramenta, incluindo código-fonte, patches, receitas e arquivos de append.
Esta é a receita criada pela ferramenta devtool para a aplicação de teste:
$ cat workspace/recipes/apptest/apptest.bb
# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)
 
# Unable to find any files that looked like license statements. Check the accompanying
# documentation and source headers and set LICENSE and LIC_FILES_CHKSUM accordingly.
#
# NOTE: LICENSE is being set to "CLOSED" to allow you to at least start building - if
# this is not accurate with respect to the licensing of the software being built (it
# will not be in most cases) you must specify the correct value before using this
# recipe for anything other than initial testing/development!
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
 
# No information for SRC_URI yet (only an external source tree was specified)
SRC_URI = ""
 
# NOTE: no Makefile found, unable to determine what needs to be done
 
do_configure () {
	# Specify any needed configure commands here
	:
}
 
do_compile () {
	# Specify compilation commands here
	:
}
 
do_install () {
	# Specify install commands here
	:
} | 
Perceba que, como a aplicação de teste não tem um Makefile e não é baseada em nenhum sistema de build de aplicações como o autotools, a ferramenta devtool criou apenas um esqueleto da receita, que precisa de adaptações.
Podemos utilizar o comando “devtool edit-recipe” para adaptar a receita, que irá abrir o código-fonte da receita com o editor de textos padrão do terminal, que pode ser alterado através da variável de ambiente EDITOR.
$ devtool edit-recipe apptest  | 
Para testar, apaguei todos os comentários e implementei as tarefas do_compile() e do_install():
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
 
# No information for SRC_URI yet (only an external source tree was specified)
SRC_URI = ""
 
do_compile () {
        ${CC} apptest.c -o apptest
}
 
do_install () {
        install -d ${D}${bindir}
        install -m 0755 apptest ${D}${bindir}
} | 
Com o comando “build apptest” podemos processar a receita e compilar a aplicação:
$ devtool build apptest  | 
E o comando “devtool deploy-target” possibilita instalar a aplicação no target (via SSH) para testá-la:
$ devtool deploy-target apptest root@192.168.7.2  | 
EXEMPLO 2: AUTOTOOLS
Como outro exemplo, podemos facilmente criar uma receita para a aplicação bc (baseada em autotools), processá-la e instalar no target com os comandos abaixo:
$ devtool add bc https://ftp.gnu.org/gnu/bc/bc-1.06.tar.gz $ devtool build bc $ devtool deploy-target bc root@192.168.7.2  | 
Fácil, não?
A ferramenta devtool é bem interessante e pode nos ajudar bastante no processo de criação de receitas, desenvolvimento e testes de aplicações. Mais informações sobre ela estão disponíveis no manual de desenvolvimento do Yocto Project.
Um abraço,
Sergio Prado
