Cómo cargar android kitkat desde sata con banana pi

Cómo compilar Android 4.2.2 para arrancar Banana Pi por SATA

En este tutorial verás cómo compilar una imagen de android para Banana Pi o Raspberry pi, además de cómo configurar el Banana Pi para que arranque desde el disco SATA y no utilice la tarjeta de memoria para casi nada.

En las pruebas ha dado una velocidad sostenida en transferencia de datos de unos 70 megas trabajando desde el disco duro, por lo que si tenemos en cuenta eso, la capacidad que puede tener un disco de 2,5» y la durabilidad de estos comparado con una tarjeta SD todo son ventajas.

Como compilar Android para el Banana Pi

Sería mucho más fácil si pudiese colgar la imagen que hemos generado y usado para este tutorial, pero tiene ciertos archivos con copyright, o eso tengo entendido, por lo que preferimos no arriesgar, así que no queda otra que realizar una compilación por tu cuenta, pero tranquilo que es muy sencillo y solo necesitarás un par de cosas:

  • Virtualbox instalado en tu equipo (o un pc con linux si lo tienes)
  • La versión 14.04 de Kubuntu o Ubuntu es la ideal, aunque también funciona con la 14.10 en teoría.

Una vez descargado tienes que o bien instalarlo en una VM, o en un equipo físico con suficientes recursos, recuerda que si va muy justito le costará mucho más realizar la compilación. Una vez la tengas instalada lo ideal es que abras una consola y te pongas en modo root, pero si no puedes usar sudo delante de los comandos.

Preparativos

Necesitaremos los siguientes repositorios, configuraciones y paquetes, ejecútalos uno después de otro:

sudo apt-get install zlib1g:i386

dpkg --add-architecture i386

sudo apt-get install libncurses5-dev xsltproc libxml2-utils python-software-properties

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install g++ libswitch-perl u-boot-tools oracle-java6-installer gperf lib32stdc++6 lib32z1 lib32z1-dev git

En un principio no debería ser un orden exclusivo, pero a mí me ha funcionado ejecutarlos en este orden. Todos estos paquetes nos van a hacer falta para luego poder hacer la compilación sin que nos de errores, si las omites vas a encontrarte fallos a mitad de la compilación y como es tan lenta será todo dolores de cabeza.

Descargando y compilando el git

Vamos a tener que clonar el git de Android Kitkat dentro de una carpeta, esto queda a tu elección pero en mi caso la he creado en /var/ANDROID. Para ello nos vamos a var:

cd /var

Una vez estás aquí simplemente ejecutas el siguiente comando

sudo git clone https://github.com/ChrisP-Android/BananaPi-Android-4.2.2-Liab ANDROID

y cuando termine (es grande tardará un rato), puedes empezar a editar.

cd ANDROID

NOTA: En mi caso me ha tocado ejecutar como root un editor de texto, ya que desde consola no me dejaba guardar los cambios.

Lo primero será copiar la configuración predeterminada, estando en la carpeta ejecutaremos el comando

sudo cp lichee/linux-3.4/arch/arm/configs/bpi_defconfig lichee/linux-3.4/.config

Ahora tenemos que editar el siguiente archivo:

/ANDROID/android/device/softwinner/sugar-lemaker/init.sun7i.rc

y sustituir su contenido con este otro

import init.sun7i.usb.rc

on early-init

    export EXTERNAL_STORAGE /mnt/sdcard
    mkdir /mnt/sdcard 0000 system system
    # for backwards compatibility
    symlink /mnt/sdcard /sdcard
    mkdir /mnt/extsd 0000 system system
    mkdir /mnt/usbhost0 0000 system system
    mkdir /mnt/usbhost1 0000 system system
    mkdir /mnt/usbhost2 0000 system system
    mkdir /mnt/sata 0000 system system
    mkdir /databk 0700 root  system

    #insmod  /disp.ko
    #insmod  /lcd.ko
    #insmod  /hdmi.ko

on early-fs
    dispe2fsck
    #mount ext4 /dev/block/system /system wait noatime nodev barrier=0
    mount ext4 /dev/block/sda7 /system wait noatime nodev barrier=0
    #insmod /system/vendor/modules/disp.ko
    #insmod /system/vendor/modules/lcd.ko
    #insmod /system/vendor/modules/hdmi.ko

on fs
# try to mount /sdcard
    wait /dev/block/sda4
    mount vfat /dev/block/sda4 /mnt/sdcard defaults

# try to mount /data
    #wait /dev/block/data
    #mount ext4 /dev/block/data /data wait noatime nosuid nodev barrier=1
    #setupfs /dev/block/data
    #umount /data
    #exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/data
    #exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=1,journal_checksum,noauto_da_alloc /dev/block/data /data
    wait /dev/block/sda8
    mount ext4 /dev/block/sda8 /data wait noatime nosuid nodev barrier=1
    setupfs /dev/block/sda8
    umount /data
    exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/sda8
    exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=1,journal_checksum,noauto_da_alloc /dev/block/sda8 /data

# try to mount /cache
    mount ext4 /dev/block/cache /cache wait noatime nosuid nodev barrier=1
    setupfs /dev/block/cache
    umount /cache
    exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/cache
    exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=1,journal_checksum,noauto_da_alloc /dev/block/cache /cache

    format_userdata /dev/block/UDISK SUGAR

# try to mount /private
    export PRIVATE_STORAGE /mnt/private
    format_userdata /dev/block/private PRIVATE
    mkdir /mnt/private 0000 system system
    #mount vfat /dev/block/private /mnt/private gid=1019,uid=1019,fmask=0001,dmask=0003
    mount vfat /dev/block/private /mnt/private

# try to format /databk
    #wait /dev/block/databk
    #mount ext4 /dev/block/databk /databk wait noatime nosuid nodev barrier=1
    #setupfs /dev/block/databk
    #umount /databk
    #rmdir /databk
    wait /dev/block/sda13
    mount ext4 /dev/block/sda13 /databk wait noatime nosuid nodev barrier=1
    setupfs /dev/block/sda13
    umount /databk
    rmdir /databk

on post-fs-data

    #install ir driver . by Gary.
    insmod /system/vendor/modules/sun7i-ir.ko
    #install gpio driver . by Chenjd.
    insmod /system/vendor/modules/gpio-sunxi.ko

    #insmod key & tp driver
    insmod /system/vendor/modules/sunxi-ts.ko

    #insmod mali driver
    insmod /system/vendor/modules/ump.ko
    insmod /system/vendor/modules/mali.ko

    #insmod video driver
    #insmod /system/vendor/modules/cedarx.ko

# csi module
    insmod /system/vendor/modules/videobuf-core.ko
    insmod /system/vendor/modules/videobuf-dma-contig.ko
    insmod /system/vendor/modules/camera.ko
    insmod /system/vendor/modules/ov5640.ko
    insmod /system/vendor/modules/sunxi_csi0.ko
    insmod /system/vendor/modules/uvcvideo.ko

#ctp module
    insmod /system/vendor/modules/sw_device.ko
    #insmod /system/vendor/modules/ft5x_ts.ko
# network module
    #insmod /system/vendor/modules/asix.ko bsize=0
    #insmod /system/vendor/modules/qf9700.ko
    #insmod /system/vendor/modules/mcs7830.ko
    insmod /system/vendor/modules/rtl8150.ko

#insmod gmac
    #insmod /system/vendor/modules/sunxi_gmac.ko



#add by jszeng : 2013.3.22
#make adb work through the network transport
#setprop service.adb.tcp.port 5555

# 1. realtek wifi service
# 1.1 realtek wifi sta service
service wpa_supplicant /system/bin/wpa_supplicant -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -e/data/misc/wifi/entropy.bin
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot

# 1.2 realtek wifi sta p2p concurrent service
service p2p_supplicant /system/bin/wpa_supplicant \
    -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf -e/data/misc/wifi/entropy.bin -N \
    -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot

# 2. broadcom wifi service
# 2.1 broadcom wifi bcm40181 bcm40183 station and softap
#service wpa_supplicant /system/bin/wpa_supplicant \
#   -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -e/data/misc/wifi/entropy.bin
#   class main
#   socket wpa_wlan0 dgram 660 wifi wifi
#   disabled
#   oneshot

# 2.2 braodcom wifi sta p2p concurrent service
#service p2p_supplicant /system/bin/wpa_supplicant \
#   -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -N \
#   -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf -e/data/misc/wifi/entropy.bin -puse_p2p_group_interface=1
#   class main
#   socket wpa_wlan0 dgram 660 wifi wifi
#   disabled
#   oneshot

# 3. realtek rtl8723as bt hciattach
#service hciattach /system/bin/logwrapper /system/bin/hciattach -n -s 115200 /dev/ttyS1 rtk_h5 1500000
#   user root
#   group bluetooth net_bt_admin
#   disabled
#   oneshot

# 4. broadcom bcm40183 bt hciattach
#service hciattach /system/bin/hciattach -n -s 115200 /dev/ttyS1 bcm4329 1500000
#    user root
#    group bluetooth net_bt_admin
#    disabled
#    oneshot

# 5. broadcom ap6210 bt brcm_patchram_plus
#service hciattach /system/bin/brcm_patchram_plus --tosleep=200000 --no2bytes --enable_hci \
#    --baudrate 1500000 --enable_lpm --patchram system/vendor/modules/bcm20710a1.hcd /dev/ttyS1
#    class main
#    user bluetooth
#    group bluetooth net_bt_admin misc
#    disabled
#    oneshot

Sustituye todo el contenido del archivo que hay en la carpeta con el anteior. Lo que hacemos es preparar las particiones para que busquen los datos y trabajen sobre el disco duro en lugar de hacerlo sobre la SD.

Léete también  Cómo seguir usando el atajo de teclado de pantalla completa en Windows 10

Guardamos los cambios (asegúrate de que se han cambiado, cierra el archivo y vuelvelo a abrir para evitar sorpresas o volverte loco sin saber por qué no funciona).

Compilar android kitkat para Banana Pi por sata

Por fín nos vamos a meter de lleno en la compilación. estando dentro de la carpeta /var/ANDROID, nos iremos a la subcarpeta scripts:

cd scripts

y antes de empezar con la compilación de la imagen tendremos que compilar el kernel:

sudo ./build_kernel.sh

Una vez termine sin errores podremos ya lanzar la compilación de android:

sudo ./build_android.sh

Nos va a preguntar si queremos hacer la compilación completa, le diremos yes, y la siguiente pregunta será qué versión queremos usar, elegiremos la 17 que es la que hemos modificado.

compilar-android-ubuntu

Tras estos pasos veremos que se pone manos a la obra, ten en cuenta que va a tardar bastante, con un i7-3770k ha tardado varias horas (máquina virtual con 6GB de ram asignados y 4 núcleos). Debería terminar sin dar ningún error.

Una vez termine nos indicará la carpeta en la que está la imagen que podremos copiar a una memoria usb, otro disco duro o directamente al equipo con la que la vayamos a pasar a la sd.

/var/ANDROID/lichee/tools/pack/sun7i_android_sugar-lemaker.img

Si te ha dado algún problema alguna de las compilaciones puedes dejar un comentario con los errores y te ayudaré a solucionarlos.

Como cargar una imagen de android en una SD para Banana Pi y Raspberry Pi

Tengo que darle las gracias a Txavinet por la segunda parte de este tuto, ya que ha sido él el que se ha estado peleando con el platanito hasta hacerlo funcionar con la imagen que hemos compilado antes. Nos quedan unos cuantos pasos pero no son muy difíciles de ejecutar.

Léete también  Cómo liberar el espacio fantasma ocupado en Android [root]

Lo primero que te va a hacer falta es lo siguiente:

  • Una SD de mínimo 8GB (sino no se grabará bien aunque quepa)
  • SdFormatter
  • Phoenixcard (toca buscar en google)
  • Un equipo con linux, o una máquina virtual que te permita conectar un disco sata y una tarjeta de memoria (no lo hemos conseguido así)

Lo primero será formatear la tarjeta sd con sdformatter activando format size adjustement. Asegúrate de que has seleccionado la tarjeta que toca, o evita en su lugar tener ninguna otra unidad usb conectada para no borrar la que no es por accidente.

Ahora abriremos phoenixcard y seleccionaremos la imagen que hemos creado antes así como la tarjeta sd que tengamos puesta. Una vez te asegures de que es la correcta (como antes) puedes darle a startup > burn.

El mensaje que debe aparecer será magic complete. burn end, en ese momento te vas a la bandeja del sistema y le das a quitar hardware con seguridad, de esta forma te aseguras que no se haya quedado ningún archivo de la tarjeta abierto y que de posibles fallos más adelante.

quitar-hardware-seguridad

Clonar la tarjeta SD al HDD para Banana Pi

Ahora que tienes extraída la tarjeta de memoria vas a necesitar conectar los dos a una máquina con linux que sea funcional. Es problemático pero este paso no se puede saltar, ya que se trata de replicar el contenido de la tarjeta de memoria sobre el disco duro. Si conoces alguna forma de hacerlo sobre windows por favor deja un comentario con los pasos.

Una vez conectadas en el equipo lo iniciaremos, en este caso se ha usado kubuntu pero debería funcionarte con otras distribuciones similares, ya que haremos uso de dd y gparted.

Ejecuta gparted con el fín de identificar las unidades, para componer luego el comando de duplicación, en mi caso han aparecido así:

  • /dev/sdb es mi disco sata de 160gb
  • /dev/sdc es mi sd de 8gb

Ahora vas a copiar la sd al disco sata, modifica las unidades segun te aparezcan a tí. Para eso abriremos una ventana del terminal o consola y ejecutaremos el siguiente comando.

sudo dd if=/dev/sdc of=/dev/sdb bs=4M

 

Léete también  Como probar el rendimiento de unidades usb en Raspberry Pi con dd

Aunque parezca que no está haciendo nada debes esperar, ya que está trabajando y lo normal es que tarde entre 5 y 10 minutos en hacer la copia, dependerá de la velocidad de tus unidades. Si tu tarjeta de memoria o lector tiene led puedes ver que está leyendo.

Lo siguiente será crear la partición que nos falta en la lista de particiones, la /dev/sdb4 (en el disco duro), que es la que se montará como sdcard en el sistema android. Es importante crearla en cuarta posición, podemos elegir formatearla en fat32 o ntfs (ver pasos abajo), dependerá del tamaño de archivos que vayas a usar. Para crear la partición lo tienes que hacer con fdisk:

sudo fdisk /dev/sdb

p nos mostrará el contenido, podemos ver que la partición número 4 no existe (/dev/sdb4), vamos a crearla siguiendo estos comandos:

  • n
  • tipo de particion p (tras esto selecciona automáticamente el identificador número 4)
  • primer sector intro
  • ultimo sector intro
  • t (cambiar id de sistema)
  • 4 (seleccionar particion 4)
  • codigo exadecimal: b (para w95 fat32)
  • w (guardar cambios)

Una vez ya la tenemos creada tienes que formatearla:

mkfs -t vfat /dev/sdb4

Ahora ya puedes apagar el equipo y desconectar la tarjeta y el disco duro, conectarlos al banana pi y android arrancará perfectamente desde el disco duro. Recuerda dejar puesta la tarjeta sd ya que hará de sector de arranque y le indicara al banana que tiene que usar el disco SATA.

Android en Banana Pi con partición NTFS

Si quieres usar la partición de sdcard con el sistema de archivos en NTFS tienes que hacer lo siguiente.

En primer lugar tendrás que conectar el disco duro y la sd al Banana, para que realice un primer arranque con la partición formateada en fat32. Una vez haya arrancado del todo el sistema ya podemos apagarlo. De no hacer este primer arranque montará de forma incorrecta la partición en NTFS y no funcionará.

Conecta el disco duro a un equipo con windows o linux, desde windows te vas al administrador de discos desde el meú inicio, haces click derecho sobre la partición (que será la más grande) y la formateas en NTFS. En caso de usar linux (que puedes hacerlo antes de desconectar el disco y ponerlo en el plátano, ejecuta este comando:

mkfs.ntfs -f /dev/sdb4

Configurar la partición sdcard en Android y Banana Pi

Ahora volveremos a conectarlo todo en el Banana Pi e instalaremos un explorador con permisos de root, en mi caso he usado root explorer. Abriremos con el editor de texto el archivo:

/etc/vold.fstab

Comentaremos una línea y modificaremos la otra:

# /dev/mount sata /mnt/sata auto /devices/plattform/sw_ahci.0
/dev/mount sdcard /mnt/sdcard 4 /devices/plattform/sw_ahci.0

Guardaremos el archivo y saldremos. La primera línea es la que monta el sata, y al comentarla no veremos la misma partición montada en dos puntos. La segunda línea es la que monta la partición formateada en ntfs como sdcard para que aparezca como memoria usable en android.

Como curiosidad, al menos ha mi me ha pasado, la primera vez que edito y guardo el archivo, realmente no se guarda aunque no de ningún error (lo podemos comprobar mirando la fecha y hora de modificación del archivo). Para que lo guarde correctamente hay que volver a abrirlo, modificar y guardar. Lo que yo hago es que lo abro, pongo un carácter, guardo, cierro, vuelvo a abrir y ya lo puedo editar tranquilo sabiendo que cuando lo guarde no habrán problemas.


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.