hackeando um smartbox (com android) e instalando linux & java & opendevice

58
Hardware Free Hackeando um SmartBOX e instalando Linux & JAVA gráfico Ricardo JL Rufino [email protected] [email protected]

Upload: ricardo-rufino

Post on 21-Jul-2015

275 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Hardware FreeHackeando um SmartBOX e instalando Linux & JAVA gráfico

Ricardo JL [email protected]

[email protected]

Page 2: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

AgendaApresentação

Ricardo JL Rufino

➔ Esp. em Engenharia de Software➔ Mestrando em Gestão de TI (UFPE)➔ Sócio fundador da CriativaSoft.

➔ Atuo no desenvolvimento de Software desde 2007, focado em soluções empresariais sobre plataforma JavaEE. Desenvolvedor de softwares open-source como Framework Web MVC Mentawai, ProjectNCode e instrutor de cursos de Java.

Page 3: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Qual o Alvo ?

Page 4: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Qual o Alvo ?● ANDROID TELEVISION BOX

– DealExtreme: AT-758 Box de TV Smart Android 4.2.2

● Fabricante: Sunchip● SoC A20 @ 1Ghz ( ARM Cortex-A7)● 512MiB DDR3 @ 384MHz● FLASH (NAND) - 4 GB● HDMI● WiFi 802.11 b/g/n● Ethernet● Micro-SD● 1 USB2.0 Host, 1 USB2.0 OTG● IRDA (Infra-Vermelho)● VALOR: ~ $45 / R$128

http://linux-sunxi.org/Sunchip_SDK-758

Page 5: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

SoC (A20) – Visão Geral

Page 6: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Outros Similares

● Olinuxino Micro

Page 7: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Outros Similares

● Cubietruck (Cubieboard)

http://www.cnx-software.com/2013/06/25/cubietruck-development-board-features-allwinner-a20-soc-2gb-ram-and-gb-ethernet/

Page 8: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Instalação do Linux

● Fácil e a Difícil● Fácil: Usando uma imagem já pronta:

– http://linux-sunxi.org/Bootable_OS_images

– LOGO DISPONIBILIZAREI A MINHA !

● Difícil: Compilando e extraindo as informações do dispositivo.

Page 9: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Instalação do Linux (Fácil)

● Existem já algumas distribuições prontas para vários dispositivos.

● Se não encontrar a imagem para o dispositivo idêntico, procura um do mesmo processador – Foi o que eu fiz !! Usando o Debian para A20

– http://linux-sunxi.org/Bootable_OS_images

Page 10: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Gravação da Imagem

● Linux: Usando DD– dd bs=4M sd.img of=/dev/sdX

– CUIDADO COM O X !!

● Windows– http://www.raspberrypi.org/documentation/installatio

n/installing-images/windows.md

Page 11: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Estrutura do SD

● O SD tem duas partições:– 1 – BOOT (64 MB – FAT)

● uEnv.txt : Parâmetros de Configuração● script.bin : Configurações do Hardware (binário)● uimage : Kernel● SETOR onde fica o u-boot (não visível)

– 2 – LINUX FS / ROOTFS (> 2GB EXT4)● Sistema de Arquivos do LINUX● No caso estamos usando o Debian

Page 12: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Entendendo o Processo de BOOT

● Principais envolvidos– U-BOOT (u-boot-sunxi)

– Kernel / Linux – (linux-sunxi)

● Etapas– O Processador inicia um chip com software de boot (Boot ROM) / BIOS

– Segundo verifica se tem um SD e a partição de boot (u-boot)

– O u-boot é configurado usando o uEnv.txt e script.bin

– U-boot carrega o kernel(uImage) e passa o comando pra ele.

– Kernel faz todo o processo normal do linux

Page 13: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

BOOT pela USB

● É mais rápido (empírica e teoricamente)● Pode usar a mesma imagem para o SD● Alterar arquivo uEnv.txt na partição de Boot do SD:

– root=/dev/sda2 ro rootwait

No caso sda2, porque a imagem tem duas partições e o linux tá na segunda, mas você pode usar só uma partição (tem que ser EXT4)

Page 14: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Algumas coisas mais avançadas

● Quando não se tem o mesmo modelo é preciso extrair algumas informações do dispositivo.– Script.bin

– Alguns links referentes a isso:● http://linux-sunxi.org/Identification_guide● http://linux-sunxi.org/Retrieving_device_information

Page 15: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Script.bin ● É um arquivo que guarda as informações do hardware● Ele pode ser capturado e descompilado (FEX) usando o Sunxi-

tools● Quando for usar uma imagem feita para outro equipamento

você deve usar o Script.bin do seu equipamento.– NOTA: É bom desativar a partição NAND no A20, pois a minha

corrompeu por algum motivo e perdi o S.O original...

– Setar: nand_used = 0

● Guida de Configuração:– http://linux-sunxi.org/Script.bin

– http://linux-sunxi.org/Fex_Guide

Page 16: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Infra-REDDeve ser habilitado no Script.bin (fex)

● Carregar módulo – modprobe sunxi-ir

● Verificar se foi inicializado corretamente– cat /proc/bus/input/devices

– dmesg | grep IR

● Teste:– apt-get install input-utils

– Input-events 0

● Aparentemente funciona apenas com protocolo NEC

[ir_para]ir_used = 1ir0_rx = port:PB04<2><default><default><default>

Page 17: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

WIFI

Deve ser habilitado no Script.bin (fex)

Verificar se tem:

[wifi_para]wifi_used = 1wifi_sdc_id = 3wifi_usbc_id = 2wifi_usbc_type = 1Etc...

[usb_wifi_para]usb_wifi_used = 1usb_wifi_usbc_num = 2

NOTA: Internamente é ligado em um barramento USB

Page 18: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

GPIO● Deve ser habilitado no Script.bin (fex)

– http://linux-sunxi.org/GPIO

● Carregar módulo– modprobe gpio-sunxi

● Programação Basica– # Exportar pino para o usarspace

– echo 1 > /sys/class/gpio/export

– # Configurar direção (Output)

– echo out > /sys/class/gpio/gpio1_ph20/direction

– # Alterar Valores

– echo 1 > /sys/class/gpio/gpio1_ph20/value

– echo 0 > /sys/class/gpio/gpio1_ph20/value

[gpio_para]gpio_used = 1gpio_num = 2gpio_pin_1 = port:PH20<1><default><default><0>gpio_pin_2 = port:PH10<0><default><default><0>

Page 20: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

JAVA 8 ARMwget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u6-b23/jdk-8u6-linux-arm-vfp-hflt.tar.gz

tar zxvf jdk-8u6-linux-arm-vfp-hflt.tar.gz -C /opt

mv jdk1.8.0_XX jdk1.8.0

update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0/bin/javac 1

update-alternatives --install /usr/bin/java java /opt/jdk1.8.0/bin/java 1

update-alternatives --config javac

update-alternatives --config java

● Verificar se foi instalado corretamente

java -version

Page 21: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

JAVA 8 ARM - interface gráfica

Não precisamos de um ambiente gráfico completo como: GNOME , KDE, LXDE

Podemos rodar diretamente no 'X' sem nenhuma coisa no monitor (nem o relógio)

● Você pode usar a API da Swing e AWT– Ainda não funciona o JAVA FX !!! = (

– Precisa fazer o driver da GPU MALI400 funcionar !!

● Instalar o X– # apt-get install xorg

● Configurar o script: ~/.xsession● Startar o Servidor gŕafico

– # startx

Page 22: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

~/.xsession

xrandr --output VGA1 --mode 1280x720 #For setting a video mode

xrandr --fb 1280x720 #Not always required, sets the framebuffer size

xset -dpms s off

# Sua aplicação !java -jar /opt/jdk1.8.0/demo/jfc/SwingSet2/SwingSet2.jar

Page 23: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

E quando as coisas NÃO dão CERTO ?

Page 24: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Debugar pela UART

● É possível monitorar o processo de BOOT e saber o que está acontecendo pela porta UART

● Usei um ARDUINO UNO pra isso !!

PS: No Leonardo acho que não da certo ! Tem que ter um chip separado de USB

Page 25: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Placa

Page 26: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Debugando usando o Arduino

Page 27: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Debugando usando o Arduino

● Nessa configuração o arduino está em RESET, ou seja, ele está funcionando apenas o CHIP USB (Atmega16U2) para fazer a conversão:– Serial UART → USB

● Plugue o arduino no seu computador ● Abra um terminal serial (pode ser o putty)● No Linux:

– # screen /dev/ttyACM{X} 115200

Page 28: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Melhor que Raspberry ?!?!

● Bonitinho (vem com “case”)● Mais rápido (1Ghz sem overclock)

– FALAR MAIS..

● Micro-SD● WiFI● Memória Interna (FLASH)● MAAAAAsss não tem GPIO !!

Page 29: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Dúvidas ?

Page 30: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

OpenDeviceOpen IoT (Internet Of Things) Platform and Framework.

“Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas”

Page 31: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

OpenDevice

● Apis e Ferramentas que permitem construir sistemas de:– Automação Residencial

– Monitoramento de Sensores

– Monitoramento de Energia

– Controle de Robôs

– Smart City

Page 32: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

OpenDevice

● Objetivo:

O principal objetivo é monitorar e controlar hardwares baratos como Arduino, RaspberryPI e plataformas semelhantes, local (offline) ou sobre a nuvem usando linguagens de programação de alto nível e com a abstração de protocolos e detalhes de baixo nível.

Page 33: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Foco no que é importante !

Isso permite que você se concentre em seu projeto e na inovação, deixar os detalhes obscuros de protocolos de comunicação e especificações com OpenDevice, você vai dar um passo importante para o sucesso de seu projeto.

Page 34: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Tecnologias Envolvidas

Page 35: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Funcionalidades ● Open API (for: REST, JavaScript, Java, Android, Arduino,

EnergiaIDE)● Real-time (WebSockets)● Event-Based● Async & non-blocking● Multi-protocolo (Usb, Bluetooth, TCP)● Independente de Linguagem● Independente de Plataforma (Windows, Linux, Mac, MIPs on

OpenWRT)● Lightweight/Built-in Servers (não precisa do tomcat ou glassfish)

Page 36: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Visão Geral

Page 37: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Event-driven and Real-Time

Você não precisa consultar a informação, ela vem até você quando os dados estiverem disponíveis

Page 38: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Hands-On/Of

Uma pitada de java...

Page 39: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Blink - Arduino

* C / Arduino

Page 40: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Blink - Java

Page 41: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Blink Java (mais livre)

Page 42: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Blink Java (Comandos)

Page 43: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Incrementando no Arduino

* C / Arduino

Page 44: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Incrementando no JAVA

Definição de Dispositivos

Definição das Conexões

* JAVA

Page 45: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Adicionando Rest !Adicione essa linha e seja feliz !!!

Você pode acessar pelo navegador

… ou com JavaScript !

Page 46: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Agora ficou sério ! WebSockets !Adicione essas linhas e fique Real-Time e de quebra servidor http !

Biblioteca de Rest e WebSocket ! (adicione no pom.xml)

Ao adicionar o servidor de W.S automaticamente já é adicionado o servidor de REST

Page 47: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Api JavaScript para WebSocket

Page 48: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Instalação

● Usamos o Maven (arquivo pom.xml)

Substitua: ${opendevice-version} pela ultima versão, atualmente: 0.1.2-SNAPSHOT.

Qualquer dúvida consulte:https://opendevice.atlassian.net/wiki/display/DOC/A.+First+Steps+with+OpenDevice

Page 49: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Instalação

● Adicionar o repositório da Sonatype

Page 50: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Instalação (lib arduino/similar)

● Baixar ou Clonar o repositório do GIT– opendevice-hardware-libraries

● Copiar a pasta: arduino/OpenDevice– Para pasta /libraries da IDE do Arduino

● Reinicie a IDE do Arduino

Github / Sources: https://github.com/OpenDevice

Page 51: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

HORÁRIO RESERVADOÀ PROGRAMAÇÃO E MÃO NA MASSA

Page 52: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Postura !

Nós somos desenvolvedores, não somos “normais” ACEITE ISSO.. !!!

Devemos ser agentes de Transformação e Criação.

Page 53: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Atitude !

Não espere a ideia brilhante !

Execute a ideia que você gosta.

Descubra o que você gosta

Não escute os outros ● Muita gente vai dizer que você não consegue

● Muita gente vai dizer que já existe

Page 54: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Dúvidas ?

Page 55: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Contatos

● E-mail: – [email protected]

[email protected]

● Facebook– /ricardojlrufino

Page 56: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Link's

● OpenDevice: – http://opendevice.io

– https://github.com/OpenDevice

– https://opendevice.atlassian.net/wiki

– http://opendevice.criativasoft.com.br

● Facebook– /opendevice

Page 57: Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice

Link's● Onde Comprar ? (Gringos):

– www.adafruit.com

– www.sparkfun.com

– www.seeedstudio.com

– imall.iteadstudio.com

– www.dx.com (mercado livre – demora....)

● Brasil– Lab de Garagem (http://www.labdegaragem.org

– Multilógica Shop (http://multilogica-shop.com/);

– Rlrobotics (http://www.rlrobotics.ind.br/arduino);

– Webtronico (http://www.webtronico.com/)