30 gennaio 2018

Android 7.x Nougat su UDOO Dual/Quad e Neo

lo scorso anno insieme al team di sviluppo di UDOO ci siamo coordinati per iniziare il porting di Android 7.x Nougat per le board Dual/Quad e Neo.
Per vari impegni prioritari però, ci abbiamo potuto dedicare meno tempo durante i mesi ed alcuni punti sono rimasti in sospeso, ora che ho nuovamente un po' di tempo da dedicare mi piacerebbe ultimare i lavori con l'aiuto di chiunque abbia voglia di partecipare.

Cosa funziona:

  • WiFi
  • Touchscreen 7''
  • Touchscreen 15''
  • Audio via HDMI
  • Permessi di root
  • TWRP Recovery
  • Disabilitato verity
  • "Disabilitato" SELinux (impostato su permissivo)

Cosa c'è da sistemare/verificare:

  • Bluetooth
  • Audio IN/OUT AC97
  • OTG
  • Bossac
  • Mount periferiche UMS/SATA
  • Camera (e l'autofocus)
  • Open GAPPS

Informazioni tecniche dell'attuale workspace:

  • Versione Android: android-7.1.2_r36 (Build N2G48H)
  • Versione Kernel: 4.1.35
  • Versione U-BOOT: 2015.04
  • Versione del BSP utilizzato: android_N7.1.1_1.0.0

Attualmente è disponibile il BSP aggiornato, android_N7.1.2_2.0.0, ma bisognerebbe fare il porting del nuovo Kernel 4.9 e l'implementazione di tutto il nuovo HAL.

Ci sarebbe anche il BSP per Android 8.x Oreo ma ancora non ho avuto modo di guardarci e se non sbaglio supporta solo le board i.MX 8MQuad, vedi https://www.nxp.com/support/develop...oftware-and-development-tool-resources:IMX_SW

Tutti i sorgenti sono disponibili qui mentre qui c'è il manifest con le istruzioni su come scaricare l'intero workspace.

Un grazie in anticipo a chi vorrà partecipare.


11 gennaio 2018

RetroPie Box con XBOX

Era da un po' di tempo che pensavo di riutilizzarla per farci qualcosa ed alla fine l'idea che ha prevalso è stata quella di farci una bella RetroPie box per poter tornare a divertirmi con gli storici giochi da sala giochi, Sega Master System, Super Nintendo, Play Station ed altri, che hanno fatto parte della mia infanzia.

Ho iniziato con lo smontare la XBOX in modo da tenere solamente cinque componenti fondamentali:
  1. Il case di plastica nella sua parte superiore e inferiore e da quella inferiore ho rimosso tutto il laminato che la circondava. 
  2. Le 6 viti lunghe utilizzate per la chiusura del case. 
  3. La parte frontale dello sportello del lettore CD. 
  4. Il pannello frontale che contiene il pulsante di accensione/spegnimento, quello dell’apertura dello sportello del lettore CD ed i due LED di notifica. 
  5. Il connettore della 220V rimosso dalla scheda dell’alimentazione interna (questo per intenderci) 

Componenti che ho utilizzato:
  • RaspberryPi 3 
  • MicroSD 32 GB (classe 10) 
  • 4 cavi USB Maschio/Maschio (eBay
  • 4 connettori USB Femmina/Femmina (eBay
  • 1 Cavo HDMI Maschio/Femmina (eBay
  • 1 Cavo RJ45 Maschio/Femmina (eBay
  • 1 Alimentatore 220V → 5V 2A 
  • Saldatore, un po’ di filo elettrico per bassa tensione 
  • Colla a caldo

Il montaggio dei componenti è davvero semplice, i quattro connettori USB vanno sistemati dove prima c’erano le rispettive quattro porte dei game pad, il connettore RJ45 dove c’era quello della board originale della XBOX, quello HDMI dove prima c’era il connettore TV out ed infine quello per l’alimentazione sostanzialmente torna al suo posto originario.



La parte che forse ha richiesto un po’ più di tempo per la messa a punto è la scheda logica che ho leggermente modificato per avere i due led bicolore sempre accesi sul colore verde quando la RetroPie box sarà accesa ed il tasto di alimentazione che accenderà e spegnerà il RaspberryPi.

Ecco lo schema:
Con un filo ho pontato i due piedini centrali (negativo) dei due LED e con un altro filo i due esterni (positivo) che accendono il colore verde.
Dai due piedini esterni del pulsante di accensione ho saldato due fili che poi andranno collegati alla porta GPIO, pin 5 (+) e pin 6 (-) del RaspberryPi.
Ora, per poter far accendere e spegnere il RaspberryPi bisogna creare un piccolo script in Python che controlli gli eventi sui pin occupati dal pulsante, ma prima ho dovuto installare i pacchetti necessari:

$ sudo apt-get install python-dev python-dev gcc python-pip

Dopodiché va installato il pacchetto RPi.GPIO che è un modulo Python per il controllo della porta GPIO:

$ wget https://pypi.python.org/packages/e2/58/6e1b775606da6439fa3fd1550e7f714ac62aa75e162eed29dbec684ecb3e/RPi.GPIO-0.6.3.tar.gz
$ tar xvfz RPi.GPIO-0.6.3.tar.gz
$ cd  RPi.GPIO-0.6.3
$ sudo python3 setup.py install

Dopo aver installato il modulo ho creato lo script:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess

# we will use the pin numbering to match the pins on the Pi, instead of the 
# GPIO pin outs (makes it easier to keep track of things)
GPIO.setmode(GPIO.BOARD)  

# use the same pin that is used for the reset button (one button to rule them all!)
GPIO.setup(5, GPIO.IN, pull_up_down = GPIO.PUD_UP)  

oldButtonState1 = True

while True:
    #grab the current button state
    buttonState1 = GPIO.input(5)

    # check to see if button has been pushed
    if buttonState1 != oldButtonState1 and buttonState1 == False:
      subprocess.call("shutdown -h now", shell=True, 
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      oldButtonState1 = buttonState1

    time.sleep(.1)

L'ho chiamato shutdown.py e copiato in /usr/local/bin.

Infine, per farlo avviare automaticamente al boot l'ho inserito in rc.local;

$ sudo nano /etc/rc.local

ed ho inserito la riga:

sudo python /usr/local/bin/shutdown.py &

Questo è il risultato dei due LED accesi sul verde quando la RetroPie box è accesa:


Per finire non ho fatto altro che abilitare il server FTP su RetroPie in modo da poter caricare le ROM e gli eventuali BIOS tranquillamente da remoto, oppure, nella quarta porta USB posso inserire qualsiasi dispositivo UMS compatibile dove ho precedentemente copiato i files necessari.

- Fonte per l'idea del pulsante On/Off


29 novembre 2017

Linux Mint x86 e boot UEFI su MacBook


Nel cercare un'alternativa all’ormai obsoleto MacOS X 10.7 Lion del mio MacBook di fine 2006 ho pensato di provare ad installarci Linux Mint 18.x (Mate) che già utilizzo sulla mia Workstation.

Ma c’è un problema; La versione per x86 di Linux Mint non supporta il boot da UEFI mentre il MacBook pur essendo un x86 con ormai più di una decade sulle spalle supportava già a suo tempo unicamente il boot da UEFI.

Cercando in rete una soluzione mi sono imbattuto in una guida di un utente il quale ha avuto il mio stesso problema proponendo una soluzione semplice ed efficace.
Si tratta di aggiungere il file .efi all’immagine iso di Linux Mint una volta estratta in un supporto USB, in questo caso una chiavetta.

Prima di procedere assicuratevi di avere:
  • Una chiavetta USB o comunque un supporto UMS compatibile.
  • Il file bootia32.efi (scaricabile da qui: github.com - bootia32.efi)
  • Una versione di Linux Mint 32bit
  • Il pacchetto gdisk installato

Vediamo i passaggi da effettuare ed iniziamo dal preparare la chiavetta USB per lo scopo:

$ sudo sgdisk --zap-all /dev/sdx
$ sudo sgdisk --new=1:0:0 --typecode=1:ef00 /dev/sdx
$ sudo mkfs.vfat -F32 /dev/sdx1
Con questi primi tre comandi viene creata una tabella GPT delle partizioni, creata una partizione EFI (ef00) ed un'altra in FAT32.
Ricordatevi di sostituire sdx con il vostro corrispondente device.

Procediamo ora con il montare la partizione FAT32 su /mnt:

$ sudo mount -t vfat /dev/sdx1 /mnt
Ricordatevi di sostituire sdx con il vostro corrispondente device.

Estraiamo il contenuto della iso in /mnt:

$ sudo 7z x linuxmint-xx.x-xxxx-32bit.iso -o/mnt/
Ricordatevi di sostituire xx.x-xxxx con la versione corrente di Linux Mint e con il nome corretto, se state utilizzando la variante Mate, Cinnamon o altre.

Ora bisogna creare le directories che ospiteranno il file .efi:

$ sudo mkdir /mnt/EFI
$ sudo mkdir /mnt/EFI/BOOT/

Copiamo il file .efi nella posizione creata in precedenza:

$ sudo cp bootia32.efi /mnt/EFI/BOOT/

Ed infine smontiamo la chiavetta USB pronta per l'uso:

$ sudo umount /mnt

A questo punto non vi rimane che spegnere il MacBook, inserire la chiavetta USB, accendere il MacBook mantenendo premuto il tasto ALT Option, questo per intenderci, ed attendere che il sistema venga caricato.

Per esperienza vi posso dire di pazientare anche se inizialmente lo schermo sembra restare nero in quanto il primo avvio da chiavetta richiede un po' di tempo.

Have Fun!

Fonte di questa guida: forums.linuxmint.com

5 ottobre 2017

AOSPMod OREO-R.01 per Nexus 5X

 Nell'attesa di Android Things per il Raspberry Pi3 ho cominciato a metter mano alla nuova versione Android 8.0 Oreo iniziando a sviluppare la mia ROM AOSPMod per il mio Nexus 5X (bullhead).

 Non sono un patito delle personalizzazioni più svariate, sostanzialmente nelle mia ROM includo quelle che preferisco oltre a quelle che ritengo utili per trarre il meglio dalle build che si basano su Android AOSP.

Nello specifico per questa prima versione R.01, rispetto alla versione AOSP le modifiche e le specifiche sono le seguenti:

  • Android 8.0.0 Release 17 (OPR5.170623.007)
  • Livello patch di sicurezza: 5 ottobre 2017
  • Kernel aggiornato alla versione 3.10.89
  • Sorgenti compilati con il compilatore Linaro GCC 7.2.0
  • Incluso il WebView v61.x precompilato di Google
  • Aggiornato SQLite alla v3.20.1
  • Launcher3: Possibilità di rimuovere la barra di ricerca
  • Launcher3: Possibilità di scegliere diversi stili di maschere per le icone
  • Launcher3: Possibilità di attivare l'opzione icone adattive
  • Launcher3: Possibilità di abilitare le ombre nelle icone
  • SystemUI: Aggiunti i tile PiP, NFC, bussola, reboot/ reboot recovery
  • SystemUI: Modificati i colori di sistema con il tema blu ispirato ai Pixel
  • SystemUI: Possibilità di personalizzare i QuickSettings e scorrimento della QuickBar
  • SystemUI: Convertite diverse dozzine di png in formato vettoriale
  • SystemUI: Aggiunte freccie di spostamento verso destra e sinistra quando la tastiera è aperta
  • SystemUI: Aggiunto il monitor del traffico di rete wireless e dati 
  • SystemUI: Aggiunto pulsante chiudi tutto con posizione personalizzabile
  • SystemUI: Diverse ottimizzazioni riguardante scroll, transazioni ed animazioni di sistema
  • Settings: Disabilitato il check per gli aggiornamenti OTA ufficiali di Google
  • Bluetooth: Indicatore della carica della carica residua del dispositivo collegato (se supportato)
  • DownloadProvider: Visualizzazione velocità di download, percentuale e tempo rimanente
  • Messaging: Aggiunta opzione Swipe to delete per la cancellazione dei messaggi
  • Molti altri fix e miglioramenti minori

Se volete installare questa ROM assicuratevi che il vostro Nexus 5X abbia bootloader, radio e vendor aggiornati!

Per la precisione:

Download:


Come sempre, non esitate ad utilizzare i commenti per eventuali critiche o suggerimenti.

14 agosto 2017

AOSPMod NGT-R.05 per RaspberryPi 3

La R.05 sarà probabilmente l'ultima versione prima del rilascio ufficiale di Android per RaspberryPi 3 che dovrebbe ormai essere imminente, vedi articolo Android Things DP5 per Raspberry Pi 3.

Anche questa versione come la precedente non include nessuna novità se non prevalentemente aggiornamenti software, ecco quindi il changelog:
  • Aggiornato ad Android Nougat 7.1.2 build NZH54D (android-7.1.2_r33)
  • Livello patch di sicurezza Android: agosto 2017
  • Kernel aggiornato alla versione 4.4.81 (AOSP kernel-common branch android-4.4)
  • Aggiornato il WebView alla v59
  • Aggiornato il file hosts per il blocco delle pubblicità
  • Fix e miglioramenti minori

Download:

BUG conosciuti:
  • Il puntatore del mouse si vede distorto
  • Non è possibile impostare uno sfondo personalizzato
  • La connessione WiFi non si riconnette automaticamente alla rete preferita

Come sempre, non esitate ad utilizzare i commenti per eventuali critiche o suggerimenti.

11 agosto 2017

Android Things DP5 per Raspberry Pi 3

Era da un po' di tempo che non scrivevo riguardante l'avanzamento dei lavori da parte di Google sul progetto Android Things e le varie Developers Preview che si sono succedute nel tempo ma questa nuova DP5 merita due righe riguardante le novità che porta con se.

Innanzitutto la DP5 è basata sull'imminente Android O rispetto alla precedente DP4.1 che utilizzava Android Nougat, le future app degli sviluppatori quindi dovranno avere come targhet le API 26 per poter usufruire delle nuove librerie a disposizione.

Ma, la novità più interessante ed attesa per il RPi3 è, finalmente, l'accelerazione grafica hardware tramite la GPU grazie al supporto OpenGL ES 2.0!

Il rilascio di Android Things è sempre più vicino, non ci resta che attendere pazientemente il rilascio dei sorgenti così da poter iniziare lo sviluppo di custom ROM.

Approfondimenti (in inglese):