SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
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.

Contenu connexe

Tendances

UE4 Twitch 2016 05-05: Unreal Message Bus Overview
UE4 Twitch 2016 05-05: Unreal Message Bus OverviewUE4 Twitch 2016 05-05: Unreal Message Bus Overview
UE4 Twitch 2016 05-05: Unreal Message Bus OverviewGerke Max Preussner
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージMori Ken
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)ryos36
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術
【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術
【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術Unity Technologies Japan K.K.
 
Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Yamashita Takeshi
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현noerror
 
ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴mganeko
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理KageShiron
 
ゲーム向けマネジメントツール 「Hansoft」の概要と コンシューマ開発で1年間 運用した事例
ゲーム向けマネジメントツール「Hansoft」の概要とコンシューマ開発で1年間運用した事例ゲーム向けマネジメントツール「Hansoft」の概要とコンシューマ開発で1年間運用した事例
ゲーム向けマネジメントツール 「Hansoft」の概要と コンシューマ開発で1年間 運用した事例Hiroyuki Tanaka
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装Koji Morikawa
 
Web API The Good Partsの紹介 ~美しいWebAPIの作り方~
Web API The Good Partsの紹介 ~美しいWebAPIの作り方~Web API The Good Partsの紹介 ~美しいWebAPIの作り方~
Web API The Good Partsの紹介 ~美しいWebAPIの作り方~Futa HIRAKOBA
 
Go Friday 傑作選
Go Friday 傑作選Go Friday 傑作選
Go Friday 傑作選Takuya Ueda
 
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!Kensaku Komatsu
 

Tendances (20)

UE4 Twitch 2016 05-05: Unreal Message Bus Overview
UE4 Twitch 2016 05-05: Unreal Message Bus OverviewUE4 Twitch 2016 05-05: Unreal Message Bus Overview
UE4 Twitch 2016 05-05: Unreal Message Bus Overview
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術
【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術
【Unity道場スペシャル 2018仙台】お手軽クオリティアップ術
 
Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
 
Timers
TimersTimers
Timers
 
ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴
 
Go入門
Go入門Go入門
Go入門
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
【Unity】Scriptable object 入門と活用例
【Unity】Scriptable object 入門と活用例【Unity】Scriptable object 入門と活用例
【Unity】Scriptable object 入門と活用例
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
 
ゲーム向けマネジメントツール 「Hansoft」の概要と コンシューマ開発で1年間 運用した事例
ゲーム向けマネジメントツール「Hansoft」の概要とコンシューマ開発で1年間運用した事例ゲーム向けマネジメントツール「Hansoft」の概要とコンシューマ開発で1年間運用した事例
ゲーム向けマネジメントツール 「Hansoft」の概要と コンシューマ開発で1年間 運用した事例
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
 
Web API The Good Partsの紹介 ~美しいWebAPIの作り方~
Web API The Good Partsの紹介 ~美しいWebAPIの作り方~Web API The Good Partsの紹介 ~美しいWebAPIの作り方~
Web API The Good Partsの紹介 ~美しいWebAPIの作り方~
 
Go Friday 傑作選
Go Friday 傑作選Go Friday 傑作選
Go Friday 傑作選
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
 

Similaire à 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
 

Similaire à 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.