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