Por Bill Courington y Gary Collins
Publicado en abril 2013
O Linux e o Java SE Embedded prontos para serem executados no Raspberry Pi em menos de uma hora...
É só um pouco maior do que um cartão de crédito. Custa quase o mesmo do que um livro sobre programação Java.
É o computador Raspberry Pi, que suporta o Java SE Runtime completo para permitir a execução de aplicativos incorporados de linha de comando. Este artigo oferece uma introdução à programação Java no Raspberry Pi, incluindo os seguintes temas:
NOTA: existem muitas variantes para as introduções oferecidas aqui, especialmente no que diz respeito às operações executadas no computador host (desktop ou notebook) e as executadas no Raspberry Pi. Aplique seus conhecimentos e preferências (e, talvez, alguns dos temas tratados na seção Ajustes e modificações opcionais do Linux) para criar um fluxo de trabalho apropriado para você.
Raspberry Pi
O Raspberry Pi é uma pequena placa, de baixa potência, construída a partir de uma CPU de 700 mHz ARMv6, com hardware de ponto flutuante e processador gráfico integrados em um único chip. O processador gráfico e a CPU compartilham 256 MB de memória RAM. A placa inclui conexões para USB, Ethernet, gráficos de alta definição, áudio, cartão SD e E/S para finalidades gerais. Na figura 1 pode se observar um Raspberry Pi modelo B com cartão SD inserido para referência de tamanho. O cartão SD desempenha uma função especial: o Raspberry inicia a partir dele. Este artigo oferece, em grande parte, instruções para criar e modificar arquivos em um cartão SD de inicialização.

Figura 1 Raspberry Pi modelo B
Você pode interagir com o Raspberry Pi mediante um teclado e um mouse USB e um monitor ou televisão HDMI (de até 1080 p). A conexão Ethernet da placa oferece uma opção adicional: interagir a partir de um host conectado em rede mediante sessões ssh. Na seção Ajustes e modificações opcionais do Linux deste artigo, descreve-se como habilitar inícios de sessão seguros ssh.
Requisitos
Para configurar a execução do Java SE Embedded no Raspberry Pi modelo B você deve ter:
Instalação básica do Linux
Quando o Raspberry Pi recebe energia, o firmware arranca a partir do compartimento do cartão SD. O Java SE Embedded é executado no Linux, portanto, o primeiro passo é a instalação do Linux em um cartão SD.
Download da imagem do Debian Squeeze Linux para Raspberry Pi
NOTA: as instruções fornecidas aqui são para o Debian Squeeze. É provável que outras implantações do Linux para Raspberry Pi funcionem corretamente, mas é indispensável que tenham sido desenvolvidas para as operações de ponto flutuante por software do chip ARM. É provável que as imagens linkadas no web site do Raspberry Pi tenham sido criadas para hardware de ponto flutuante: não funcionam com o Java SE Embedded.
Em http://elinux.org/RPi_Distributions#Debian_ARM, você encontrará um link para uma imagem zipada do Debian Squeeze para Raspberry Pi. O arquivo pesa aproximadamente 450 MB. Nas instruções a seguir, presume-se que o download foi feito para uma pasta nova ~/RaspberryPi/. Para conferir o download do arquivo, siga as instruções SHA-1 Checksum da página mostrada no início do download.
Descomprima a imagem da seguinte maneira:
$ cd ~/RaspberryPi $ unzip *.zip
A descompressão cria uma subpasta com um nome similar a debian6-19-04-2012.
Copie a imagem do Debian Squeeze no cartão SD
No seu computador host, procure o identificador do cartão SD seguindo as instruções a seguir (se preferir, faça de um modo diferente):
[ 110.084625] sdb: detected capacity change from 0 to 3963617280 [ 118.055249] sd 2:0:0:0: [sdb] 7741440 512-byte logical blocks: (3.96 GB/3.69 GiB) [ 118.059409] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 118.064547] sd 2:0:0:0: [sdb] Assuming drive cache: write through [ 118.066015] sdb: sdb1A dica é sdb, que significa que o identificador do dispositivo é /dev/sdb. sdb1 se refere à única partição do cartão do nosso exemplo. Seu cartão pode ter diversas partições.
Nas seguintes instruções, considera-se que o identificador do cartão SD é /dev/sdb e que o cartão tem uma única partição sdb1. Altere as instruções de acordo com o seu ambiente.
$ cd ~/RaspberryPi/debian6-19-04-2012 $ sudo dd if=yourDebian.img of=/dev/sdb bs=1M 1859+1 records in 1859+1 records out 1950000000 bytes (2.0 GB) copied, 212.344 s, 9.2MB/sA operação de cópia mediante dd em um cartão SD é lenta. Pode demorar de 5 a 10 minutos no caso de um cartão de 4 GB classe 4. O comando dd não mostra o progresso, de modo que é necessário aguardar pacientemente até a tarefa finalizar.
Se neste ponto você quer comprovar que a instalação do Linux no cartão SD está sendo feita de maneira correta, consulte a seção Primeira inicialização e depois volte para Redimensionamento das partições do cartão SD.
Redimensionamento das partições do cartão SD
O cartão SD contém agora três partições e espaço não alocado. A seguir, vamos adicionar espaço não alocado ao sistema de arquivos do Linux para criar mais espaço para o Java SE Embedded e os aplicativos. Para alocar espaço não alocado ao sistema de arquivos, vamos modificar as partições do cartão SD eliminando e criando novamente uma das partições e redimensionando a outra.

As três partições são:
Aproximadamente a metade do espaço do cartão não foi alocado. A maior porção do espaço livre segue a partição /dev/sdb3 . Para adicionar esse espaço a /dev/sdb2 (o sistema de arquivos), /dev/sdb3 deve ser temporalmente eliminado, /dev/sdb2 ampliado e, na sequência, /dev/sdb3deve ser novamente criado.




Primeira inicialização
Nota: para realizar estes passos, você deve ter os seguintes componentes conectados ao Raspberry Pi: monitor, teclado e cabo Ethernet operacional.
$ sudo /etc/rc.local RaspberryIP
$ sudo update-rc.d -f ssh defaults 20
$ sudo sync; sudo shutdown -r nowSe o shutdown demorar muito tempo, pode desligar e ligar o Raspberry Pi.
Agora estamos prontos para ler e gravar o cartão SD do Raspberry Pi mediante a rede a partir do computador host.
Instalação do Java SE Embedded
Nesta seção, explica-se como usar o computador host para download do Java SE Embedded e sua cópia no sistema de arquivos do Linux do Raspberry Pi através da rede. A seguir, mostra-se como descomprimir o download e iniciar Java também de forma remota.
Obtenção do software de avaliação do Java SE Embedded


$ ssh pi@RaspberryIP mkdir /home/pi/java
$ scp ~/Downloads/*.gz pi@RaspberryIP:/home/pi/java
$ ssh pi@RaspberryIP $ cd /home/pi/java $ tar -zxvf *.gz ...
$ ls ejre* ejre1.7.0_04 $ cd ejre* $ ./bin/java -version java version "1.7.0_04-ea" Java(TM) SE Runtime Environment for Embedded (build 1.7.0_04-ea-b20, headless) Java Hotspot(TM) Embedded Client VM (build 23.0-b21, mixed mode)É provável que alguns dados, como os números de versão e compilação, tenham mudado após a elaboração deste artigo.
$ rm /home/pi/java/*.gz
Ajustes e modificações opcionais do Linux
Os comandos incluídos nesta seção podem aumentar a confiabilidade, o nível de resposta ou a praticidade do seu sistema Raspberry Pi. Selecione os que você preferir e execute no Raspberry Pi. Para simplificar o diagnóstico de problemas, inicie novamente o sistema depois de realizar cada alteração.
Nesta seção:
Configurar um endereço IP estático
Se sua rede reutiliza endereços IP dinâmicos, você pode omitir a alteração para um endereço IP estático pois o endereço IP do Raspberry Pi será efetivamente constante. É provável que o endereço IP dinâmico do Raspberry Pi seja diferente a cada inicialização do sistema, por isso, é conveniente configurar um endereço IP estático, pois ele é melhor para o início de sessão ssh. Nas seguintes instruções, presume-se que você deseja dar o nome de host raspberrypi ao Raspberry Pi.
Comece abrindo /etc/hosts como superusuário em um editor de texto (p. ex., sudo vi /etc/hosts). Adicione uma linha para o Raspberry Pi, que deverá incluir um endereço IP estático válido na sua rede, um nome de domínio e um pseudônimo. A seguir, apresentamos um exemplo hipotético em que identificamos o Raspberry Pi como raspberrypi:
127.0.0.1 localhost 192.168.0.100 raspberrypi.yourDomain raspberrypi loghost
Salve o arquivo e saia do editor.
Como superusuário, abra /etc/hostname em um editor de texto. Adicione uma linha similar à seguinte:
raspberrypi
Salve o arquivo e saia do editor.
As seguintes instruções vão permitir que você evite que a sobrecarga da rede faça com que o sistema operacional troque o endereço IP estático do Raspberry Pi. Caso o endereço seja trocado, o início ssh ou outras operações que usam o endereço IP estático deixariam de funcionar.
Encontre o endereço do hardware da porta Ethernet mediante os seguintes passos:
Primeiro, determine o nome do controlador Ethernet (osx representam os dígitos do endereço):
$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1488 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether b8:27:eb:b5:e8:90 brd ff:ff:ff:ff:ff:ff inet xx.xxx.xxx.xx/xx brd xx.xxx.xxx.xxx scope global eth0
Neste exemplo, é eth0. O endereço do hardware são os dígitos hexadecimais a seguir de link/ether; neste exemplo, b8:27:eb:b5:e8:90.
Agora que você conhece o endereço de hardware do controlador Ethernet, abra como superusuário /etc/network/interfaces em um editor de texto e adicione linhas similares às que seguem o comentário # New entries mostrado a continuação, substituindo os dados do exemplo pelos da sua rede.
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or # /usr/share/doc/ifupdown/examples for more information. auto lo iface lo inet loopback # # New entries to support static IP follow: auto eth0 iface eth0 inet static hwaddress ether b8:27:eb:b5:e8:90 address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1
Habilitar a troca e otimizar o tempo de acesso ao sistema de arquivos
A troca está desabilitada por default no Debian Linux. Se uma operação ultrapassa os 256 KB de RAM do Raspberry Pi, o sistema falha. Outro problema menos grave é que, também por default, o sistema de arquivos perde tempo mantendo dados do acesso mais recente a cada arquivo, o que é de pouca utilidade no caso de aplicativos integrados. Manter dados sobre acessos mais recentes, além disso, pode diminuir a vida útil de um cartão SD. Ambas as condutas por default são especificadas no arquivo /etc/fstab .
Como superusuário, abra /etc/fstab em um editor como vi. O arquivo se apresenta assim:
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 0 #/dev/mmcblk0p3 none swap sw 0 0
Para habilitar a troca, tire as marcas de comentário da terceira linha.
NOTA: em um cartão SD, a troca é lenta. No caso de aplicativos integrados, é conveniente gerenciar a memória para evitar isto.
Para eliminar a sobrecarga associada aos dados sobre acessos mais recentes, insira um ponto de montagem p2 entre p1 e p3. As opções noatime e nodiratime são as indicadas para atingir o resultado desejado. Quando o arquivo ficar como é mostrado a seguir, salve e saia do editor:
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 0 /dev/mmcblk0p2 / auto rw,noatime,nodiratime,errors=remount-ro 0 1 /dev/mmcblk0p3 none swap sw 0 0
Aloque p3 (a partição de troca criada no host como /dev/sdb3) como espaço para troca:
$ sudo mkswap /dev/mmcblk0p3
Definir o fuso horário e a configuração regional
Por default, o Raspberry Pi é configurado para o fuso horário Europa/Londres e a região en_GB_UTF-8. Para modificar a configuração regional do seu computador, faça o seguinte.
Para mudar o fuso horário, escreva o seguinte comando:
$ sudo dpkg-reconfigure tzdata
Mostra-se uma interface gráfica falsa.

Figura 9 Interface de usuário para fuso horário
Movimente o cursor de seleção pelas regiões e cidades com as teclas de fecha acima e abaixo. Para selecionar <Ok> (aceitar) ou <Cancel> (cancelar), use as flechas direita e esquerda. Para aceitar uma seleção, aperte a tecla de retorno.
Defina a configuração regional da seguinte maneira:
$ sudo dpkg-reconfigure -p low locales
A interface de usuário é similar à utilizada para definir o fuso horário.
Configurar um servidor de horário
Muitas operações, entre elas, as atualizações de pacotes de software, dependem de a data e a hora serem corretas. Para definir a data e a hora de forma automática, informe-se sobre a identidade do servidor de horário da rede e, a seguir, execute o seguinte comando:
$ sudo ntpdate yourNTPServer
Para definir a hora em cada inicialização, modifique como superusuário /etc/rc.local e adicione a seguinte linha antes da saída do código:
ntpdate yourNTPServer
Configurar um proxy da Internet
Faça ping para um host da Internet conhecido, como www.lego.com. Caso o host não responda, informe-se se sua rede está detrás de um proxy e, se fosse necessário, defina a variável de ambiente http_proxy segundo as convenções de sua rede, por exemplo (caso hipotético):
$ sudo export http_proxy =’http:192.168.0.1:3128’
Para definir o proxy a cada início de sessão, adicione o comando de exportação a ~/.bash_profile ou outro equivalente se usa um shell diferente.
Alterar funções e distribuição do teclado
Use este comando se as teclas não são interpretadas corretamente ou se deseja alterar a distribuição do teclado:
$ sudo dpkg-reconfigure keyboard-configuration
A interface de usuário é similar à descrita na seção Definir o fuso horário e a configuração regional deste artigo.
Atualizar pacotes do Debian
Antes de atualizar os pacotes que são distribuídos com o Debian, abra /etc/apt/sources.list como superusuário em um editor de texto. Este arquivo contém as localizações do repositório de pacotes novos ou atualizados. Tal como são distribuídas, as localizações incluem ftp.uk nos seus URL. Se você não estiver na Grã Bretanha, pode melhorar o desempenho modificando as entradas para incluir uma localização física mais próxima. Por exemplo, se você estiver nos Estados Unidos, pode mudar ftp.uk para ftp.us em geral. No web site http://ftp.debian.org/debian/README.mirrors.html são oferecidas informações sobre localizações de repositórios do Debian.
Para atualizar os pacotes instalados, confira que o Raspberry Pi esteja conectado à Internet e, a seguir, escreva estes comandos:
$ sudo apt-get update $ sudo apt-get upgrade
Caso apareça uma mensagem notificando que existem duplicados na lista de pacotes, abra novamente /etc/apt/sources.list em um editor e coloque marcas de comentário em uma das entradas duplicadas. Com frequência, é conveniente conservar a entrada que contém maiores informações.
Iniciar a interface gráfica de usuário automaticamente
Se você quer que o sistema de janelas se ative de forma automática quando inicia sessão localmente no Raspberry Pi, mude o nível de execução por default da seguinte maneira. Como superusuário, abra /etc/inittab em um editor de texto. Procure a seguinte entrada:
# The default runlevel. id:2:initdefault:
Substitua por 5:
# The default runlevel. id:5:initdefault:
NOTA: os gráficos consomem uma grande parte da memória RAM do Raspberry Pi, aproximadamente 90 MB.
Adicionar um navegador web
Se você tem problemas com o navegador web por default midori, tente com o iceweasel:
$ sudo apt-get update $ sudo apt-get install iceweasel
Habilitar som
A saída de áudio do Raspberry Pi não é habilitada por default. Para habilitá-la, abra /etc/inittab como superusuário em um editor de texto. Adicione esta linha no final do arquivo:
snd_bcm2835
Salve e feche o arquivo. Ao inicializar novamente o Raspberry Pi, o som estará habilitado.
Postado por Bill Courington y Gary Collins.
