Translate

viernes, agosto 25, 2017

Orange Pi IoT 2G: Trabajar con la memoria NAND

Trabajar con la memoria NAND 

 

EXPERIMENTAL EXPERIMELTAL 

PRECAUCION: este procedimiento puede dejar totalmente irrecuperable tu placa Orange pi, si sigues el procedimiento es bajo tu responsabilidad!!


1.Trabajar con la memoria NAND desde el PC con Linux



Las utilidades para escribir en la NAND de nuestra Orange Pi Iot 2G:

https://github.com/aib/opi2g-utils


Lo primero necesitaremos poner la placa en modo USB otg:

-Poner el interruptor en modo arranque desde flash (android)
-Poner los Switches en la zona adecuada (1-4 en on y 5-8  en off)
-Con la placa apagada apretar boton y conectar a puerto USB (asi entramos en modo otg, flash)

Foto tal como deben estar los switches e interruptor de placa:


Si lo hacemos bien aparecerá el dispositivo /dev/ttyACM0

La utilidad opi2g_bin_read.py sirve para extraer los ficheros del paquete Android para NAND, os dejo el siguiente enlace de descarga en mega:

https://mega.nz/#!TRNyTJLD!FgtMolmr1c9M_TXCidJ0hqU5qHlOoVespm_7wkAhxjU


Comandos a usar:

Con este comando formateamos y borramos por completo la memoria flash:
./opi2g_nand_write.py -v --format-flash

Si queremos restaurar por completo android en la NAND y sus particiones:

./opi2g_nand_write.py -v bootloader:bootloader.img modem:modem.img boot:boot.img system:system.img vendor:vendor.img



(Sigo investigando)

2 Arranque de Linux desde Tarjeta SD y visualización de NAND

Modificando el U-Boot y grabando en la NAND conseguiremos arrancar linux visualizando los 512MB de la NAND interna.
Es necesario instalar en el boot de la placa un U-Boot modificado, por lo que sera necesario bajar el kit de desarrollo que he preparado:

https://github.com/txurtxil/OrangePiIot2gBuidSystem

1.Una vez seguidos los pasos para instalar el SDK anterior, ejecutaremos
         ./build.sh
2. Elegir la siguiente opción de los menús:

3.Esta opción nos generalara el fichero:
            u-boot.rda
  Este fichero es el que deberemos grabar en la memoria interna NAND de la placa, podemos hacerlo de dos maneras:
                       Manera 1 Encenderemos la placa en modo Android y conectado al PC veremos la memoria interna del telefono "Phone storage" simplemente copiamos el fichero u-boot.rda hay.
                              Despues desde una  sesion putty hacia el puerto COM de la placa entraremos en la shell de Android ( puerto /dev/ttyUSB0, 962500bps en Linux). Y escribiremos el fichero u-boot.rda en la NAND:

                dd if=/mnt/root/u-boot.rda of=/dev/mtd/mtd0 bs=262144 count=2
                       
                        Manera 2: Es mas fácil, podemos usar las utilidades del paso 1 para grabar el u-boot:
                               ./opi2g_nand_write.py -v bootloader:u-boot.rda

Desde ahora dejando el switch en modo arranque Android el U-Boot activará la memoria NAND pero no podrá arrancar Android, así que arrancara Linux desde la memoria SD pero con la Nand activada.

Desde la shell haciendo un "dmesg | grep NAND" veremos que el kernel ha reconocido la particion NAND en el boot:

0.661437] NAND device: Manufacturer ID: 0x98, Chip ID: 0xac (Toshiba TC58NYG2S0H 4G 1.8V 8-bit), 512MiB, page size: 4096, OOB size: 256 



Nota importante: al seguir este tutorial hemos dejado anulado el arranque y uso de Android en la NAND, si queremos restaurar Android lo haremos siguiento el primer punto de este manual (1.Trabajar con la memoria NAND desde el PC con Linux)


3. Aprendiendo a particiona la NAND de la Opi IoT 2G:
       El usuario de github "aib" a preparado una guia en ingles perfecta para instalar Linux en la NAND de esta placa: https://www.aib42.net/article/hacking-orangepi-2g/

 3.1Necesitaremos el fichero boot.cmd, lo editamos, incluiremos las lineas que afectan a la memoria NAND:

setenv bootargs  "mtdparts=rda_nand:64M@0(bootloader),-(nandrootfs) root=${rootdev} rootwait rootfstype=${rootfstype} console=ttyS0,921600 panic=10 consoleblank=0 loglevel=${verbosity} ${extraargs} ${extraboardargs}"

  -64M@0(bootloader):Particion de 64M donde mas adelante instalaremos el boot de linux

  -(nandrootfs): Aqui va el S.O y espacio de usuario, con el parametro "-" le decimos que coja toda la memoria que quede disponible (despues de restar los 64M del bootloader)

Compilamos el fichero boot.cmd para crear el binario boot.scr, lo incluiremos en la particion boot de la tarjeta SD:

mkimage -C none -A arm -T script -d boot.cmd boot.scr 

3.2 Crear unidades, montarlas y copiar datos

Debemos usar el sistema de unidades NAND, UBI:
             
               ubiformat /dev/mtd0

 ubiformat: mtd0 (nand), size 536870912 bytes (512.0 MiB), 2048 eraseblocks of 262144 bytes (256.0 KiB), min. I/O size 4096 bytes

                ubiattach /dev/ubi_ctrl -m 0

UBI device number 0, total 2029 LEBs (515268608 bytes, 491.4 MiB), available 2004 LEBs (508919808 bytes, 485.3 MiB), LEB size 253952 bytes (248.0 KiB)


             -Formateamos el bloque (la etiqueta bootloader el libre, sera arranque):
                  
         ubimkvol /dev/ubi0 -N bootloader -s 64MiB 
 
         -Formateamos el siguiente bloque con el espacio libre que queda para S.O (rootfs)
           ubimkvol /dev/ubi0 -N rootfs -m
 
Volume ID 0, size 2004 LEBs (508919808 bytes, 485.3 MiB), LEB size 253952 bytes (248.0 KiB), dynamic, name "rootfs", alignment 1
          
          Motamos la unidad con el siguiente comando:
         mount -t ubifs ubi0:rootfs /mnt/flash 
 
              ubi0:rootfs on /mnt/flash type ubifs (rw,relatime)
 
 


 

Debemos crear un nuevo fichero boot-nand.scr:

setenv ubiargs "ubi.mtd=1"
setenv rootdev "ubi0:nandroot"
setenv rootfstype "ubifs"

setenv bootargs "${ubiargs} ${mtdparts} root=${rootdev} rootwait rootfstype=${rootfstype} console=ttyS0,921600 panic=10 consoleblank=0 loglevel=8 ${extraargs} ${extraboardargs}"

ubifsload ${initrd_addr} "/boot/uInitrd"
ubifsload ${kernel_addr} "/boot/zImage"
ubifsload ${modem_addr} "/boot/modem.bin"

mdcom_loadm ${modem_addr}
mdcom_check 1

bootz ${kernel_addr} ${initrd_addr}

# Recompile with:
# mkimage -C none -A arm -T script -d /boot/boot-nand.cmd /boot/boot-nand.scr
.......................

jueves, julio 27, 2017

Instalar Domoticz en Raspberry con Razberry

So, like us, you’re into the fantastic world of Z-Wave, which is a great wireless technology for the whole Internet of Things and home automation fields. We will guide you step by step how to install the home automation software ”Domoticz” on to your Raspberry equipped with the Z-Wave add-on card called Razberry (easy to mix up Raspberry and Razberry). We like Domoticz because it has a relatively intuitive and nice looking user interface.

What do you need to get Domoticz up and running with your Raspberry and Razberry?


  • A Raspberry Pi (we use version 2). To install Domoticz, we’ll connect remotely to our Raspberry using the command line interface on our Mac. If you need guidance how to remotely connect to your Raspberry, follow these steps.
  • The Razberry add-on card

Plugging in the Razberry add-on card on top of our Raspberry

A good rule of thumb is to always unplug the power from your Raspberry before you plug in or unplug keyboards, mouse, ethernet cables etc. So we unplug the power and then carefully plug in the Razberry card on top of our Raspberry’s GPIO pins 1-10.

The GPIO pins are the pins facing upwards located along the upper side of the Raspberry in the above image. Now, that’s it hardware wise. Make sure the ethernet cable is connected to your home network and then power up the Raspberry again.

Installing the Domoticz software

It’s recommended to make sure the operating system files on your Raspberry is up to date. Here is a guide how you make sure your Raspberry is up to date. Once your Raspberry is powered on, we’re going to install the Domoticz software. We log in to our Raspberry from our laptop. To install the Domoticz software we type the commands below. This creates a folder a installs the software. Note! the character ”l” in ”armv7l” is not a one, it’s the letter ”l”.
   mkdir ~/domoticz
   cd ~/domoticz
   wget http://domoticz.sourceforge.net/domoticz_linux_armv7l.tgz
   tar xvfz domoticz_linux_armv7l.tgz
   rm domoticz_linux_armv7l.tgz

Make Domoticz start up when Raspberry starts up

Type these commands to make the Domoticz service start up when your Raspberry starts up:
   sudo cp domoticz.sh /etc/init.d
   sudo chmod +x /etc/init.d/domoticz.sh
   sudo update-rc.d domoticz.sh defaults
Reboot your Raspberry by typing:
   sudo reboot
Now connect with a browser on your laptop to see if Domoticz is up and running. In the address field of your browser on your laptop, enter the IP address of your Raspberry followed by ”:8080” . In our case it’s ”192.168.1.99:8080”. It should look like this:

Making Domoticz aware of our Razberry add-on card

Domoticz is made for Z-Wave hardware connected on the USB ports of the Raspberry. Since our Razberry add-on card is connected to the GPIO pins and not a USB port, we need to make a small configuration within Domoticz so Domoticz can speak to the Razberry add-on card. Type the following command in the command line interface:
   sudo nano /etc/udev/rules.d/09-tty.rules
This will open up a basic text editor where you should enter the following text. Press ctrl + O to save the file, and press ctrl + X to exit the text editor.
You have now created a link to a port that Domoticz can use to speak to your Razberry add-on card. Then restart your Raspberry:
   sudo reboot

Configuring Domoticz from the web interface

Once the Raspberry has restarted, we access the Domoticz web interface again by entering the IP address of our Raspberry + portnumber 8080 in the address field of our web browser on our laptop. In our case it’s 192.168.1.99:8080.

Go to the Setup menu and select Hardware.

Make sure ”Enabled” is ticked, and select a name of your choice in the ”Name” field. We choose ”Razberry”. From the drop-down list ”Type”, select ”OpenZWave USB”, and from the drop-down list ”Serial Port” select ”/dev/ttyUSB20”. You probably recognize this as the link we created using the text editor. Finally click ”Add”.

Your Razberry can now speak to Domoticz. Well done! In future posts we will go through how to add your first Z-Wave devices using Domoticz.