Java na Beaglebone Black com o Yocto Project

- por Sergio Prado

Categorias: Beaglebone Black, Yocto Project Tags: , ,

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!

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.