View
278
Download
6
Category
Preview:
Citation preview
Hardware FreeHackeando um SmartBOX e instalando Linux & JAVA gráfico
Ricardo JL Rufinorjlr@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-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>
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
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>
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
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 ?
OpenDeviceOpen 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/)
Recommended