Java na Beaglebone Black com o Yocto Project
- por Sergio Prado
Uma das grandes vantagens do Yocto Project é a flexibilidade oferecida pela funcionalidade de camadas.
Funcionalidades do sistema como suporte ao hardware e componentes de software são encapsuladas em camadas, e através da combinação de camadas podemos construir desde sistemas GNU/Linux simples até distribuições Linux bem completas.
Existem muitas camadas disponíveis. Camadas de BSP adicionam suporte à plataformas de hardware, camadas de distribuição encapsulam a lógica e a política de geração de uma distribuição GNU/Linux, e camadas de software adicionam suporte à determinados componentes de software, como stack gráfico ou ferramentas de rede. Um banco de dados das camadas existentes e mantidas pela comunidade está disponível para consulta no site do OpenEmbedded.
Existem atualmente duas camadas responsáveis por prover uma máquina virtual Java para um sistema GNU/Linux.
A camada meta-oracle-java contém receitas para instalar os binários do JRE/JDK da Oracle. Além das restrições de licença da Oracle para utilizar estes binários em soluções comerciais, no momento só existem receitas para a plataforma x86.
Já a camada meta-java contém receitas para compilar o OpenJDK, uma implementação de código aberto do JDK.
Vamos então usar o Yocto Project com a camada meta-java para construir um sistema GNU/Linux com suporte à plataforma Java para a Beaglebone Black.
Que comece a diversão!
PREPARANDO O AMBIENTE
O primeiro passo é preparar o ambiente de desenvolvimento para o Yocto Project. Para isso, dê uma olhada no Yocto Project Quick Start.
Instale também a Libstdc++ (se necessário, adapte o comando abaixo conforme a sua distribuição):
$ sudo apt-get install libstdc++6 |
E crie um diretório de trabalho:
$ mkdir -p ~/bbb |
CLONANDO OS REPOSITÓRIOS
Entre no diretório de trabalho:
$ cd ~/bbb |
Clone o repositório do Poky, sistema de build de referência do Yocto Project:
$ git clone -b daisy git://git.yoctoproject.org/poky.git |
Clone também o repositório do BSP da Texas Instruments:
$ git clone -b daisy git://git.yoctoproject.org/meta-ti |
E o repositório de receitas do OpenEmbedded:
$ git clone -b daisy git://git.openembedded.org/meta-openembedded |
Clone agora o repositório da camada Java:
$ git clone git://github.com/woglinde/meta-java $ cd meta-java/ $ git checkout d2b75b615e4612f9fa05950c1d76d4a719e573d4 |
Perceba que eu fiz o checkout da revisão que utilizei para os testes. Se preferir, não faça o checkout e utilize o branch master, com o risco de possíveis erros na compilação.
Por falar em erros de compilação, encontrei alguns durante o processamento das receitas da camada meta-java. Para corrigir estes erros, criei uma camada adicional chamada meta-java-extras e fiz as correções em arquivos de append.
Aproveitei a oportunidade e criei também nesta camada uma distribuição baseada na Poky com as variáveis configuradas para o OpenJDK, além de duas receitas para gerar imagens com o OpenJDK 6 ou OpenJDK 7.
Clone então a camada meta-java-extras:
$ cd ~/bbb $ git clone git://github.com/sergioprado/meta-java-extras |
CONFIGURANDO O BUILD
Inicialize o diretório de compilação:
$ source poky/oe-init-build-env |
Abra o arquivo conf/bblayers.conf e adicione na variável BBLAYERS todas as camadas que utilizaremos para gerar o sistema, conforme abaixo:
BBLAYERS ?= " \ ${TOPDIR}/../poky/meta \ ${TOPDIR}/../poky/meta-yocto \ ${TOPDIR}/../poky/meta-yocto-bsp \ ${TOPDIR}/../meta-ti \ ${TOPDIR}/../meta-openembedded/meta-oe \ ${TOPDIR}/../meta-java \ ${TOPDIR}/../meta-java-extras \ " |
Altere também o conf/local.conf, configurando as variáveis MACHINE e DISTRO conforme abaixo:
MACHINE ??= "beaglebone" DISTRO ?= "poky-java" |
Opcionalmente, configure as variáveis BB_NUMBER_THREADS e PARALLEL_MAKE com o dobro de núcleos de CPU da sua máquina. Exemplo para uma CPU com 4 núcleos:
BB_NUMBER_THREADS ?= "8" PARALLEL_MAKE ?= "-j 8" |
COMPILANDO
Agora é só gerar a imagem.
Para compilar uma imagem com suporte ao OpenJDK 7:
$ bitbake core-image-openjdk7 |
E para compilar uma imagem com suporte ao OpenJDK 6:
$ bitbake core-image-openjdk6 |
A compilação pode levar algum tempo, dependendo da capacidade de processamento da sua máquina.
No final, as imagens estarão disponíveis em tmp/deploy/images/beaglebone/:
$ ls tmp/deploy/images/beaglebone/ core-image-openjdk6-beaglebone-20140806205631.rootfs.jffs2 core-image-openjdk6-beaglebone-20140806205631.rootfs.manifest core-image-openjdk6-beaglebone-20140806205631.rootfs.tar.bz2 core-image-openjdk6-beaglebone.jffs2 core-image-openjdk6-beaglebone.manifest core-image-openjdk6-beaglebone.tar.bz2 core-image-openjdk7-beaglebone-20140806213428.rootfs.jffs2 core-image-openjdk7-beaglebone-20140806213428.rootfs.manifest core-image-openjdk7-beaglebone-20140806213428.rootfs.tar.bz2 core-image-openjdk7-beaglebone.jffs2 core-image-openjdk7-beaglebone.manifest core-image-openjdk7-beaglebone.tar.bz2 MLO MLO-beaglebone MLO-beaglebone-2014.07-r0 modules--3.14+git0+09424cee64_0143c6ebb4-r0-beaglebone-20140806021636.tgz modules-beaglebone.tgz README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt u-boot-beaglebone-2014.07-r0.img u-boot-beaglebone.img u-boot.img u-boot-spl.bin u-boot-spl.bin-beaglebone u-boot-spl.bin-beaglebone-2014.07-r0 uImage uImage--3.14+git0+09424cee64_0143c6ebb4-r0-am335x-bone-20140806021636.dtb uImage--3.14+git0+09424cee64_0143c6ebb4-r0-am335x-boneblack-20140806021636.dtb uImage--3.14+git0+09424cee64_0143c6ebb4-r0-beaglebone-20140806021636.bin uImage-am335x-boneblack.dtb uImage-am335x-bone.dtb uImage-beaglebone.bin |
Para gravar as imagens, você pode seguir o procedimento descrito no artigo do Embarcados.
Have fun!
Sergio Prado
Sem Comentários
Nenhum comentário até agora... é a sua chance de ser o primeiro a comentar!