SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
Hardware Free
Hackeando um SmartBOX e instalando Linux & JAVA gráfico
Ricardo JL Rufino
rjlr@cin.ufpe.br
ricardo@criativasoft.com.br
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.
Qual o Alvo ?
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
SoC (A20) – Visão Geral
Outros Similares
● Olinuxino Micro
Outros Similares
● Cubietruck (Cubieboard)
http://www.cnx-software.com/2013/06/25/cubietruck-development-board-features-allwinner-a20-
soc-2gb-ram-and-gb-ethernet/
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.
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
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
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
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
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)
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
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
Infra-RED
Deve 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 = 1
ir0_rx = port:PB04<2><default><default><default>
WIFI
Deve ser habilitado no Script.bin (fex)
Verificar se tem:
[wifi_para]
wifi_used = 1
wifi_sdc_id = 3
wifi_usbc_id = 2
wifi_usbc_type = 1
Etc...
[usb_wifi_para]
usb_wifi_used = 1
usb_wifi_usbc_num = 2
NOTA: Internamente é ligado em um barramento USB
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 = 1
gpio_num = 2
gpio_pin_1 = port:PH20<1><default><default><0>
gpio_pin_2 = port:PH10<0><default><default><0>
JAVA
JAVA 8 ARM
wget --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
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
~/.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
E quando as coisas NÃO dão CERTO ?
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
Placa
Debugando usando o Arduino
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
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 !!
Dúvidas ?
OpenDevice
Open IoT (Internet Of Things) Platform and Framework.
“Conjunto de ferramentas e APIs para construção de
soluções de Internet das Coisas”
OpenDevice
● Apis e Ferramentas que permitem construir
sistemas de:
– Automação Residencial
– Monitoramento de Sensores
– Monitoramento de Energia
– Controle de Robôs
– Smart City
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.
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.
Tecnologias Envolvidas
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)
Visão Geral
Event-driven and Real-Time
Você não precisa consultar a informação,
ela vem até você quando os dados
estiverem disponíveis
Hands-On/Of
Uma pitada de java...
Blink - Arduino
* C / Arduino
Blink - Java
Blink Java (mais livre)
Blink Java (Comandos)
Incrementando no Arduino
* C / Arduino
Incrementando no JAVA
Definição de Dispositivos
Definição das Conexões
* JAVA
Adicionando Rest !
Adicione essa linha e seja feliz !!!
Você pode acessar pelo navegador
… ou com JavaScript !
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
Api JavaScript para WebSocket
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
Instalação
● Adicionar o repositório da Sonatype
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
HORÁRIO RESERVADO
À PROGRAMAÇÃO E MÃO NA MASSA
Postura !
Nós somos desenvolvedores, não somos “normais”
ACEITE ISSO.. !!!
Devemos ser agentes de Transformação e Criação.
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
Dúvidas ?
Contatos
● E-mail:
– ricardo@criativasoft.com.br
– rjlr@cin.ufpe.br
● Facebook
– /ricardojlrufino
Link's
● OpenDevice:
– http://opendevice.io
– https://github.com/OpenDevice
– https://opendevice.atlassian.net/wiki
– http://opendevice.criativasoft.com.br
● Facebook
– /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/)
Obrigado pela sua atenção.

Más contenido relacionado

La actualidad más candente

Kubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdfKubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdfLibbySchulze
 
Music With Pharo
Music With PharoMusic With Pharo
Music With PharoESUG
 
Git flow for daily use
Git flow for daily useGit flow for daily use
Git flow for daily useMediacurrent
 
The Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps ToolkitThe Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps ToolkitWeaveworks
 
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdateAngelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdatelinuxlab_conf
 
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...Anne Nicolas
 
Introduction to git and github
Introduction to git and githubIntroduction to git and github
Introduction to git and githubAderemi Dadepo
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHubNicolás Tourné
 
GemStone Update
GemStone Update GemStone Update
GemStone Update ESUG
 
ブランチを綺麗に保ち、どうやって本番アップするのか
ブランチを綺麗に保ち、どうやって本番アップするのかブランチを綺麗に保ち、どうやって本番アップするのか
ブランチを綺麗に保ち、どうやって本番アップするのかSaeko Yamamoto
 
Introduction to Git Commands and Concepts
Introduction to Git Commands and ConceptsIntroduction to Git Commands and Concepts
Introduction to Git Commands and ConceptsCarl Brown
 

La actualidad más candente (20)

GitHub Basics - Derek Bable
GitHub Basics - Derek BableGitHub Basics - Derek Bable
GitHub Basics - Derek Bable
 
Kubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdfKubermatic CNCF Webinar - start.kubermatic.pdf
Kubermatic CNCF Webinar - start.kubermatic.pdf
 
Music With Pharo
Music With PharoMusic With Pharo
Music With Pharo
 
Git flow for daily use
Git flow for daily useGit flow for daily use
Git flow for daily use
 
The Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps ToolkitThe Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps Toolkit
 
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdateAngelo Compagnucci - Upgrading buildroot based devices with swupdate
Angelo Compagnucci - Upgrading buildroot based devices with swupdate
 
Power point 2010 bengali tutorial
Power point 2010 bengali tutorialPower point 2010 bengali tutorial
Power point 2010 bengali tutorial
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
 
Introduction to git and github
Introduction to git and githubIntroduction to git and github
Introduction to git and github
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
U boot-boot-flow
U boot-boot-flowU boot-boot-flow
U boot-boot-flow
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHub
 
GemStone Update
GemStone Update GemStone Update
GemStone Update
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
ブランチを綺麗に保ち、どうやって本番アップするのか
ブランチを綺麗に保ち、どうやって本番アップするのかブランチを綺麗に保ち、どうやって本番アップするのか
ブランチを綺麗に保ち、どうやって本番アップするのか
 
Git and git flow
Git and git flowGit and git flow
Git and git flow
 
Introduction to Git Commands and Concepts
Introduction to Git Commands and ConceptsIntroduction to Git Commands and Concepts
Introduction to Git Commands and Concepts
 
GitHub Presentation
GitHub PresentationGitHub Presentation
GitHub Presentation
 

Similar a Hackeando um SmartBOX e instalando Linux, Java e OpenDevice

OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)Ricardo Rufino
 
ArduinoDay 2015 - OpenDevice
ArduinoDay 2015 -  OpenDeviceArduinoDay 2015 -  OpenDevice
ArduinoDay 2015 - OpenDeviceRicardo Rufino
 
Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Douglas Esteves
 
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry piImpressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry piMarcos Aurelio Barranco
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoÁlvaro Justen
 
Internet das coisas, conhecendo plataformas de desenvolvimentos
Internet das coisas, conhecendo plataformas de desenvolvimentosInternet das coisas, conhecendo plataformas de desenvolvimentos
Internet das coisas, conhecendo plataformas de desenvolvimentosDouglas Esteves
 
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014Fabio Souza
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Introdução à plataforma Arduino
Introdução à plataforma ArduinoIntrodução à plataforma Arduino
Introdução à plataforma Arduinoentrebits
 
Noções básicas do Raspberry pi 2/3 na prática
Noções básicas do Raspberry pi 2/3 na práticaNoções básicas do Raspberry pi 2/3 na prática
Noções básicas do Raspberry pi 2/3 na práticaFlavio Ribeiro de Lira
 
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceTDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceRicardo Rufino
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfCliverRaimundo2
 
Sindpd introducao arduinodomotica
Sindpd introducao arduinodomoticaSindpd introducao arduinodomotica
Sindpd introducao arduinodomoticaDesiree Santos
 
TDC2014 - Internet das Coisas - Arduino & OpenDevice
TDC2014 - Internet das Coisas - Arduino & OpenDeviceTDC2014 - Internet das Coisas - Arduino & OpenDevice
TDC2014 - Internet das Coisas - Arduino & OpenDeviceRicardo Rufino
 

Similar a Hackeando um SmartBOX e instalando Linux, Java e OpenDevice (20)

OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)
 
ArduinoDay 2015 - OpenDevice
ArduinoDay 2015 -  OpenDeviceArduinoDay 2015 -  OpenDevice
ArduinoDay 2015 - OpenDevice
 
Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12
 
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry piImpressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
 
Tutorial beagleboard
Tutorial beagleboardTutorial beagleboard
Tutorial beagleboard
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 
Cisco ios
Cisco iosCisco ios
Cisco ios
 
Internet das coisas, conhecendo plataformas de desenvolvimentos
Internet das coisas, conhecendo plataformas de desenvolvimentosInternet das coisas, conhecendo plataformas de desenvolvimentos
Internet das coisas, conhecendo plataformas de desenvolvimentos
 
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Arduino
ArduinoArduino
Arduino
 
Introdução à plataforma Arduino
Introdução à plataforma ArduinoIntrodução à plataforma Arduino
Introdução à plataforma Arduino
 
Noções básicas do Raspberry pi 2/3 na prática
Noções básicas do Raspberry pi 2/3 na práticaNoções básicas do Raspberry pi 2/3 na prática
Noções básicas do Raspberry pi 2/3 na prática
 
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceTDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDevice
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdf
 
Mini Curso IoT - Sieng 2016 - Dia 2
Mini Curso IoT - Sieng 2016 - Dia 2Mini Curso IoT - Sieng 2016 - Dia 2
Mini Curso IoT - Sieng 2016 - Dia 2
 
Sindpd introducao arduinodomotica
Sindpd introducao arduinodomoticaSindpd introducao arduinodomotica
Sindpd introducao arduinodomotica
 
TDC2014 - Internet das Coisas - Arduino & OpenDevice
TDC2014 - Internet das Coisas - Arduino & OpenDeviceTDC2014 - Internet das Coisas - Arduino & OpenDevice
TDC2014 - Internet das Coisas - Arduino & OpenDevice
 
Raspberry Pi + Python
Raspberry Pi + PythonRaspberry Pi + Python
Raspberry Pi + Python
 
Pal bpi
Pal bpiPal bpi
Pal bpi
 

Hackeando um SmartBOX e instalando Linux, Java e OpenDevice

  • 1. Hardware Free Hackeando um SmartBOX e instalando Linux & JAVA gráfico Ricardo JL Rufino rjlr@cin.ufpe.br ricardo@criativasoft.com.br
  • 2. 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.
  • 4. 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
  • 5. SoC (A20) – Visão Geral
  • 7. Outros Similares ● Cubietruck (Cubieboard) http://www.cnx-software.com/2013/06/25/cubietruck-development-board-features-allwinner-a20- soc-2gb-ram-and-gb-ethernet/
  • 8. 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.
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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)
  • 14. 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
  • 15. 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
  • 16. Infra-RED Deve 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 = 1 ir0_rx = port:PB04<2><default><default><default>
  • 17. WIFI Deve ser habilitado no Script.bin (fex) Verificar se tem: [wifi_para] wifi_used = 1 wifi_sdc_id = 3 wifi_usbc_id = 2 wifi_usbc_type = 1 Etc... [usb_wifi_para] usb_wifi_used = 1 usb_wifi_usbc_num = 2 NOTA: Internamente é ligado em um barramento USB
  • 18. 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 = 1 gpio_num = 2 gpio_pin_1 = port:PH20<1><default><default><0> gpio_pin_2 = port:PH10<0><default><default><0>
  • 19. JAVA
  • 20. JAVA 8 ARM wget --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
  • 21. 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
  • 22. ~/.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
  • 23. E quando as coisas NÃO dão CERTO ?
  • 24. 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
  • 25. Placa
  • 27. 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
  • 28. 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 !!
  • 30. OpenDevice Open IoT (Internet Of Things) Platform and Framework. “Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas”
  • 31. OpenDevice ● Apis e Ferramentas que permitem construir sistemas de: – Automação Residencial – Monitoramento de Sensores – Monitoramento de Energia – Controle de Robôs – Smart City
  • 32. 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.
  • 33. 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.
  • 35. 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)
  • 37. Event-driven and Real-Time Você não precisa consultar a informação, ela vem até você quando os dados estiverem disponíveis
  • 39. Blink - Arduino * C / Arduino
  • 44. Incrementando no JAVA Definição de Dispositivos Definição das Conexões * JAVA
  • 45. Adicionando Rest ! Adicione essa linha e seja feliz !!! Você pode acessar pelo navegador … ou com JavaScript !
  • 46. 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
  • 47. Api JavaScript para WebSocket
  • 48. 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
  • 49. Instalação ● Adicionar o repositório da Sonatype
  • 50. 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
  • 52. Postura ! Nós somos desenvolvedores, não somos “normais” ACEITE ISSO.. !!! Devemos ser agentes de Transformação e Criação.
  • 53. 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
  • 55. Contatos ● E-mail: – ricardo@criativasoft.com.br – rjlr@cin.ufpe.br ● Facebook – /ricardojlrufino
  • 56. Link's ● OpenDevice: – http://opendevice.io – https://github.com/OpenDevice – https://opendevice.atlassian.net/wiki – http://opendevice.criativasoft.com.br ● Facebook – /opendevice
  • 57. 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/)
  • 58. Obrigado pela sua atenção.