De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Alessandro de Oliveira Faria
Data de Publicação: 04 de novembro de 2017
Primeiramente, agradeço o trabalho em conjunto a Mackenzie no LabSec (Laboratório de Pesquisas em Segurança Cibernética cujo orientadora é minha mentora Prof. Dra Inês Brosso). Pois todo trabalho de pesquisa e inovação, somente avança quando o espírito colaborativo lidera os ideais de todo o projeto.
Com a evolução da internet das coisas, inúmeros Linux embarcados surgem a todo momento. Entretanto com um elevado números de devices com seus respectivos drivers, aplicativos e outros, torna-se complexo gerenciar as correções de vulnerabilidades. Isto é muito grave, pois estes equipamentos destinados para o mercado de IoT tendem gerenciar nossos eletrodomésticos, armazenar dados sensíveis e administrar uma gama de informações sem precedentes na história da tecnologia.
A tecnologia da Internet das Coisas surgiu para revolucionar o nosso dia a dia, pois nasceu para conectar tudo e todos na rede mundial de computadores. Ou seja, geladeiras, televisão, micro-ondas, relógios, alarmes, ar condicionado, termostatos, máquinas de lavar, carros, enfim TUDO! O conceito vai além de conectar todos os devices e sim torná-los mais eficientes em função da comunicação.
Com o lançamento de um suposto sistema operacional "universal", na teoria, os equipamentos estão menos vulneráveis. Pois quando uma determinada correção surge, todos dos dispositivos deveriam se beneficiar deste patch. Ou seja minimiza-se ao máximo o retrabalho e permite uma evolução da indústria 4.0 mais segura e padronizada. Pois se um determinador hardware for substituído por questões estratégica, o código legado seria no mínimo 100% compatível com a nova plataforma de hardware.
Então em 2016 surge o Android Things, um sistema operacional baseado no Brillo, uma versão minimalista do Android para executar em hardware simples e/ou modesto voltado para a Internet das Coisas. Mas a real diferença é que o Android Things utiliza o legado de ferramentas Android (como Android Studio, Google Play Services e outros), o que torna muito acelerado a adoção da plataforma.
Atualmente o Android Things é compatível com as plataformas a seguir:
Eu penso que um dos maiores problemas das câmeras, roteadores e outros dispositivos modestos, é a falta de atualização. Assim tornando vulneráveis os sistemas Linux, e por consequência, tornam-se alvo de ataques DDOS, que atualmente ultrapassa a 1 terabit por segundo.
A arquitetura conforme a figura acima é muito semelhante a plataforma convencional. Percebe-se a presença da API Things Support Library. Cuja função permite integrar os aplicativos com uma nova gama de hardware denominados dispositivos não móveis.
RaspberryPi: basta gravar a imagem com qualquer ferramenta e utiliza-lo, o Android Things para esta versão possui interface gráfica.
Intel Edson: necessário o uso de ferramenta flash tools para gravação de firmware, não possui interface gráfica.
Por que o Intel Edison se ele foi descontinuado? Bom, nesta vida quem pode mais, também pode menos. Então se soubermos instalar no Intel Edson sem saída de monitor e interface gráfica, fundamentaremos conceitos para instalar em qualquer outro dispositivo.
ATENÇÃO: antes de iniciar deixo claro que o leitor deste post é responsável por qualquer problema que venha a acontecer com o seu aparelho, sendo de sua inteira responsabilidade e risco a utilização das instruções a seguir.
Os requisitos para este artigo são as ferramentas:
Conforme a imagem acima, no lado esquerdo da placa, utilize a porta micro-USB superior (3), ou seja, a mais próxima do Swith.
ATENÇÃO: apenas e somente se desejar monitorar todo processo ligue também a segunda porta micro-USB. Não precisaremos conectar a fonte de energia, a posição do Swith (1) deve estar na posição virado PARA BAIXO e próximo das portas micro-USB. Para ativar o modo de upload do firmware, devemos manter o botão FW (2) durante a inicialização do equipamento.
Agora no modo UPLOAD, se optou conectar o cabo a segunda porta micro-USB utilize o comando a seguir para monitorar o console e boot do Intel Edison:
sudo screen /dev/ttyUSB0 115200
Instale a ferramenta Platform Flash Tool Lite da Intel:
# rpm -ivh platformflashtoollite_5.8.3.0_linux_x86_64.rpm
Para efetuar a instalação, lembre-se de colocar a placa do Intel Edison no modo UPLOAD FIRMWARE conforme mencionado anteriormente. E digite "platformflashtoollite
" para utilizar o modo gráfico bastando apenas selecionar a imagem recentemente baixada:
# /usr/bin/platformflashtoollite
Ou o comando no modo console conforme o exemplo a seguir:
# platformflashtoollitecli -c non_os -f androidthings_edison_devpreview_3.zip -l 3
05/06/17 21:37:45.039 INFO : Intel(R) Platform Flash Tool Lite V 5.8.3.0 x64 (build on Friday February 24th 2017, 05:21:16 UTC)
05/06/17 21:37:45.040 INFO : Using xFSTK Downloader version: 2.0.0
05/06/17 21:37:45.044 INFO : Using DFU Downloader version: 0.8.4
05/06/17 21:37:45.044 INFO : Using DnX Firmware Downloader version: 1.0.0.0 (API: 3.0.0.1108(DBG))
" " " " " " " "
" " " " " " " "
" " " " " " " "
" " " " " " " "
" " " " " " " "
05/06/17 21:38:19.630 INFO : [Port 3] Command `Notify Run 'flash-all.sh' to flash and boot the device.` succeed
05/06/17 21:38:19.630 INFO : [Port 3] Flash success (duration=00:00:34.440)
05/06/17 21:38:19.642 INFO : Platform Flash Tool Lite exited with code 0
Se habilitou com o comando screen
o monitoramento do console anteriormente, teremos as seguintes informações durante a atualização do firmware/bootloader:
******* PSH loader *******
PCM page cache size = 192 KB
Cache Constraint = 0 Pages
Arming IPC driver ..
Adding page store pool ..
PagestoreAddr(IMR Start Address) = 0x04899000
pageStoreSize(IMR Size) = 0x00080000
*** Ready to receive application ***
Edison IA32 CPU Firmware
Copyright (C) 1999-2016, Intel Corporation. All rights reserved.
IA32 FW: CPU 3.1 (INTELFDK) [2016.02.24:15.14]
Other FW: OEM 3.1 (OEMHOOKS); SCU BS 00B0.0003, RT 00B0.0049; C 0000.0045
PSH B018.2B2B; IFWI 00ED.1D0E; PL 824
Hardware: SOC B0 800; 406A8; 50504:292929:505:4E4E
Starting OS recovery
OS recovery complete
Resetting platform
Após gravar o bootloader (ou firmware), o sistema reiniciará, para verificar se tudo esta funcionando corretamente, execute o comando a seguir:
# fastboot devices 1b2f21d4e1fe0129 fastboot
Agora descompacte o arquivo Androidthings_edison_devpreview_3.zip
, entre na pasta recém criada e execute o comando flash
-all para gravar a imagem do Android.
# ./flash-all.sh
target reported max download size of 117440512 bytes
sending 'gpt' (33 KB)...
OKAY [ 0.010s]
writing 'gpt'...
OKAY [ 0.148s]
" " " " " " " "
" " " " " " " "
" " " " " " " "
" " " " " " " "
OKAY [ 0.195s]
writing 'oem_b'...
OKAY [ 0.864s]
finished. total time: 2.122s
Successfully flashed your Edison.
rebooting...
finished. total time: 0.101s
Se habilitou com o comando screen
o monitoramento do console, novamente teremos as seguintes informações durante a atualização do firmware/bootloader:
****************************** PSH KERNEL VERSION: b0182b2b WR: 20104000 ****************************** SCU IPC: 0x800000d0 0xfffce92c PSH miaHOB version: TNG.B0.VVBD.0000000c microkernel built 11:24:08 Feb 5 2015 ******* PSH loader ******* PCM page cache size = 192 KB Cache Constraint = 0 Pages Arming IPC driver .. Adding page store pool .. PagestoreAddr(IMR Start Address) = 0x04899000Starting download of 34304 bytes downloading of 34304 bytes finished fb_mmc_flash_write: updating MBR, Primary and Backup GPT(s) ........ success Erasing blocks 1024 to 9216 due to alignment ........ erased 4194304 bytes from 'u-boot' Starting download of 384180 bytes .. downloading of 384180 bytes finished Flashing Raw Image ........ wrote 384512 bytes to 'u-boot' Starting download of 10625024 bytes .......................................................................... " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " downloading of 61493312 bytes finished Flashing Sparse Image ........ wrote 61493248 bytes to 'gapps_b' Starting download of 4788468 bytes .................................... downloading of 4788468 bytes finished Flashing Sparse Image ........ wrote 4788224 bytes to 'oem_a' Starting download of 4788468 bytes .................................... downloading of 4788468 bytes finished Flashing Sparse Image ........ wrote 4788224 bytes to 'oem_b' resetting ...
Se tudo foi atualizado com sucesso a ferramenta ADB apresentara o seguinte resultado:
adb devices List of devices attached Edisonb74661ad device
@Pronto! Vamos para a configuração do Android Things!
Configurando a rede WIFI:
# adb shell am startservice \ -n com.google.wifisetup/.WifiSetupService \ -a WifiSetupService.Connect \ -e ssid [NOME-DA-SUA-REDE] \ -e passphrase [senha-sua-rede]
Testando a conexão com Internet:
# adb shell
edison:/ $ ping www.uol.com.br
PING homeuol-ib.uol.com.br (200.221.2.45) 56(84) bytes of data.
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=1 ttl=51 time=20.9 ms
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=2 ttl=51 time=21.2 ms
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=3 ttl=51 time=25.3 ms
^C
—- homeuol-ib.uol.com.br ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 20.993/22.551/25.386/2.011 ms
Configurando o ADB para rede sem fio:
No Android Things:
edison:/ # setprop service.adb.tcp.port 5555 edison:/ # stop adbd [ 97.923317] init: Service 'adbd' is being killed... | [ 97.929712] dwc3-device dwc3-device.1: request f54bf900 was not queued to ep0out | [ 97.938557] init: Service 'adbd' (pid 149) killed by signal 9 | [ 97.938688] init: Service 'adbd' (pid 149) killing any children in process group edison:/ # start adbd [ 103.799226] init: Starting service 'adbd'... | [ 103.809732] read descriptors | [ 103.809802] read descriptors
Na sua estação:
# adb kill-server # adb tcpip 5555 # adb connect [IP-DO-ANDROID-THINGS] # adb kill-server # adb connect [IP-DO-ANDROID-THINGS]
Pronto, agora basta efetuar os comandos adb shell
, ou adb install
...
# adb shell edison:/ $
No arquivo AndroidManifest.xml
insira as seguintes linhas:
<uses-library android:name="com.google.android.things"/> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.IOT_LAUNCHER"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter>
No arquivo build.gradle
insira a linha a seguir em dependencies:
dependencies { provided 'com.google.android.things:androidthings:0.3-devpreview'
Na aplicação importe as seguintes classes:
import com.google.android.things.pio.Gpio; import com.google.android.things.pio.PeripheralManagerService;
Achei mais produtivo produzir um vídeo sobre o desenvolvimento para prova de conceito de como pisca um led. O exemplo foi baseado no projeto sample-simplepio cujo código fonte encontra-se no link a seguir. https://github.com/androidthings/sample-simplepio
A seguir um video demonstrativo PASSO A PASSO de como desenvolver um simples aplicativo para o Android Things.
Alessandro de Oliveira Faria é Sócio-fundador da empresa OITI TECNOLOGIA fundada em Junho de 1996, empresa especializada em desenvolvimento de soluções com a tecnologia de Reconhecimento Facial, Consultor Biométrico, Experiência em Realidade Aumentada, Visão Computacional (opencv), Neuro-tecnologia, Redes Neurais e Programação multi-nuclear com CPU e GPU, atua na área de tecnologia desde 1986, leva o Linux a sério desde 1998, membro da comunidade Viva O Linux com mais de 50 palestras e 100 artigos publicados, mantenedor da biblioteca open-source de vídeo captura, Embaixador e openSUSE Member.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários