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