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

Comentarios

Unknown ha dicho que…
How can I create image for flashing without booting Orange2G-IOT from sd card ?

Entradas populares de este blog

Orange Pi IoT 2G Flashear memoria NAND

Usar datos gratis para proyectos IoT FreedomPop y Orange Pi 2G IoT (también Simyo).

Configurar modem GSM en la Orange Pi 2G IoT (Orange España)