Linux ubuntu

Ubuntu mobile en la Nexus 7

Hace unos dias que Canonical anunciaba que iba a sacar Ubuntu mobile, empezando por los dispositivos Nexus. El viernes pude probar la rom flasheando mi Nexus 7 y ver como funcionaba. Tras tenerla unas horas y probarla, estas han sido las conclusiones:

Pros:

  • Esteticamente está muy cuidado, un nuevo look muy detallado.
  • Aun a pesar de ser versión muy temprana, va muy suave, si aun se puede afinar mas, volará, al menos es la impresión causada en la Nexus 7.
  • Integración con las apps cuidada.
  • Navegación entre menús diferente, pero intuitiva y sobretodo llamativa.

Contras:

  • Versión todavía muy temprana, no se puede probar bien.
  • Por lo mismo que el punto anterior, muchos cuelgues.
  • Aun falta mucho software adaptado.

 

En definitiva, la sensación muy buena, y que deja abierta la puerta para reemplazar la versión del firmware y cambiar Android o convivir con ambos y arrancar uno u otro. Aunque si el software que existe para linux (sobretodo en los repositorios de Ubuntu) empieza a ser usable en la versión mobile (adaptando el interface al táctil), poco se va a echar en falta y la tablet se convierte en un ordenador de bolsillo.

Para poder probarlo, es necesario tener la Nexus con el fastboot desbloqueado, root y bueno, backup de lo que necesites, porque te vas a cargar todo lo que la Nexus tenga, bueno, no solo la tablet, también todos los teléfonos.

[wp_ad_camp_4]

Si quieres probarlo para en tu dispositivo Nexus, estos son los pasos a seguir desde Ubuntu:

Instalamos el repositorio del software:

sudo add-apt-repository ppa:phablet-team/tools

Actualizamos los repositorios:

sudo apt-get update

Instalamos el software:

sudo apt-get install phablet-tools android-tools-adb android-tools-fastboot

 

Ahora con el software instalado, instalaremos, con la tablet encendida y con la depuración USB activada:

phablet-flash -b

 

[wp_ad_camp_1]

Cuando decidamos volver a Android, bajamos la factory image de nuestro dispositivo, la descomprimimos y ejecutamos:

adb reboot-bootloader

./flash-all.sh

Tras un rato, volveremos a tener nuestro/a Nexus como de fábrica.

 

Nexus 7

DVB-T en Nexus 7 Kernel: 3.1.10-g009b6d1 – Ver la TDT en tu tablet

Hace tiempo que un amigo de linux albacete (Thempra) comentó que había podido ver la TDT en su Nexus 7 y enseñó un video demostrándolo. Pues, como se suele decir «si culo veo, culo quiero», en realidad no se si se suele decir, pero lo decía mi madre y a mi me vale como argumento.

Para poder hacerlo, se puede seguir el hilo de xda donde explican como ver la TDT en la Nexus 7, eso siempre y cuando tengamos el mismo kernel para el que están compilados los módulos que pone para descarga (Puedes comprobar el kernel en Ajustes/Información del tablet/Versión del kernel).

En mi caso, el kernel que tengo en la Nexus no es el mismo para el que han sido compilado los módulos del post de xda, sino que tengo el kernel 3.1.10-g009b6d1). Por lo tanto, para hacerlo funcionar será necesario compilar un kernel personalizado para la Nexus 7, en donde le demos soporte para los dispositivos de TDT (en inglés DVB-T) y compilar el módulo para el dispositivo que quiero probar desde fuera del kernel ya que no está incluido en el kernel. Lo primero que haré es compilar el módulo desde fuera del kernel y contra el kernel que se usa en la Nexus:

 

  • Descargamos el módulo del RTL2832U: «git clone https://github.com/ambrosa/DVB-Realtek-RTL2832U-2.2.2-10tuner-mod_kernel-3.0.0.git»
  • Editamos el Makefile: Cambiamos la variable KDIR, y la dejamos para que apunte a nuestro directorio del kernel, en mi caso se ve así: KDIR = /home/rex2k1/Proyectos/Nexus7/android_kernel_grouper
  • Compilamos: make ARCH=arm CROSS_COMPILE=arm-linux-androideabi- EXTRA_CFLAGS=-fno-pic
  • Si todo sale bien y tenías configurado el Android NDK y en el path, tendrás el módulo compilado: dvb-usb-rtl2832u.ko

 

Después de tener el módulo compilado, compilamos el kernel, y habrá que activar algunas opciones necesarias para darle soporte al kernel de dvb-t.

[wp_ad_camp_1]

Necesitamos activar como módulo (al final los he metido dentro del kernel porque me daban un error, si consigo arreglar el _GLOBAL_OFFSET_TABLE_ subieré los módulos):

  • dvb-core

Opción DVBCORE para ver DVB-T en Nexus 7

  • dvb-usb

Opción DVBUSB para ver DVB-T en Nexus 7

  • dvb-pll

Opción DVBPLL para ver DVB-T en Nexus 7

  • rc-core

Opción RCCORE para ver DVB-T en Nexus 7

Con estas opciones, si el kernel nos compila sin problema, tendremos los módulos para poder insertarlos en la nexus desde el terminal una vez lancemos nuestro kernel.

Por si alguien quiere probar el módulo que sí que he podido compilar y que en teoría ha cargado sin problemas, lo pongo para descarga:

Módulo para RTL2832U

 [wp_ad_camp_4]

 

 

 

nexus-7

Compilación Kernel Nexus 7

Como ya he dicho antes de la Nexus, Google pone al alcance de la gente todas las herramientas necesarias para poder manipular sus dispositivos, algunas de las cosas las pone por obligación (por temas de licencias como la GPL) y otras por interés propio ya que siempre acaban saliendo cosas mas que interesantes para sus dispositivos y seguramente ellos puedan nutrir futuras versiones de esas apariciones. Una de las cosas que he conseguido hacer es la compilación del kernel de linux para la Nexus, no aportaba nada nuevo, solo el hecho de que estaba compilado por mi. Por si hay algún interesado y para que no se me pasen los pasos para volverlo a hacer, esto es lo que he hecho:

[wp_ad_camp_4]

  • Descargamos el NDK de Android y lo descomprimimos en /opt/ y mete en el path la carpeta con las herramientas, en mi casó añadí: /opt/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86/
  • Descarga del repositorio del kernel del Nexus: «git clone https://github.com/drewis/android_kernel_grouper» y entramos en la carpeta creada.
  • Conectamos la Nexus al pc (estando encendida) y le cogemos el fichero de configuración: «adb pull /proc/config.gz» y lo descomprimimos «gunzip config.gz«
  • Movemos el config para que lo coja el make: «mv config arch/arm/configs/nexus7_defconfig«
  • Ahora pasamos a establecer la configuración de nuestra Nexus al kernel: «make nexus7_defconfig ARCH=arm CROSS_COMPILE=arm-linux-androideabi-«
  • Ahora vamos a modificar lo que queramos del kernel: «make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-androideabi-«
  • Y por último, compilamos el kernel: «make -j4 ARCH=arm CROSS_COMPILE=arm-linux-androideabi-» La j4 indica que use los 4 cores de la CPU (si los tiene), si no tienes claro si tienes o no mas de 1 core, no lo pongas.
  • Si todo ha salido bien, tendremos nuestro kernel modificado en arch/arm/boot, el fichero zImage.
  • Ahora toca descargarse la imagen de fábrica de nuestra Nexus: https://developers.google.com/android/nexus/images#nakasijop40d para así poder extraer el boot.img que contiene el kernel y el ramdisk.
  • Una vez bajada y descomprimida, veremos un zip, pues dentro tenemos varias imagenes que son las que se grabarán (recovery, boot, userdata y system). Sacamos el boot.img y lo reservamos
  • Ahora necesitamos una herramienta para separar el kernel del ramdisk, yo usé el split_bootimg.pl
  • Ahora lo separamos, llevamos el script donde hemos dejado el boot.img y lanzamos: «./split_bootimg.pl boot.img» y el script nos sacara 2 ficheros: boot.img-kernel y boot.img-ramdisk.gz
  • Ahora necesitaremos crear nuevamente el boot.img, pero en vez de usar el kernel que viene de serie pondremos nuestro nuevo y flamante kernel, para eso, necesitamos el mkbootimg.
  • Una vez tengamos el mkbootimg lanzamos la linea: «mkbootimg –kernel zImage –ramdisk boot.img-ramdisk.gz –cmdline «no_console_suspend=1 console=null» -o nuevoboot.img«
  • Y ya tendremos el fichero nuevoboot.img que podremos lanzar directamente en la tablet por medio del fastboot o bien, lo renombramos como boot.img y lo metemos en el fichero oficial de Google para flashearlo como si de una ROM oficial se tratara. Yo mostraré como lo hice sin tener que flashear, para evitar, si nos hemos colado en alguna configuración, que no arranque la tablet.
  • Nos vamos al directorio donde descomprimimos el fastboot cuando desbloqueamos el bootloader , y nos copiamos alli el nuevoboot.img que hemos generado.
  • Apagamos la Nexus, arrancamos en modo bootloader (Vol – y power) y conectamos USB.
  • Lanzamos: «fastboot boot newboot.img» . En unos segundos, el fastboot le lanza la imagen nueva de arranque por el usb y la ejecuta para que se inicie y arranque con el nuevo kernel, así, al no flashear, si falla, basta con apagar y volver a encender la Nexus.

[wp_ad_camp_1]

Y si vamos a ajustes veremos nuestro nuevo kernel:

rps20130127_001408_904

nexus 7 root

Desbloqueo del bootloader de la Nexus 7

Hace poco que ha caído en mis manos una tablet de la gran G, la Nexus 7, es una pasada…todo un alarde de potencia y he de reconocer la suavidad frente a las tablets de los chinos, por buenas que puedan parecer, no hay color. Aunque de todo, lo mejor de los productos de Google son las actualizaciones y la entrega de prácticamente todo el sistema para que se le pueda meter mano y ampliar el ecosistema Android (en el fondo les interesa). Es como comprar un dispositivo de desarrolladores, te ofrecen todas las herramientas para programar, modificar, etc etc. Entre otras cosas, te ofrecen el repositorio del kernel y de la propia tablet te puedes sacar el config que hará funcionar un nuevo kernel en el dispositivo.

[wp_ad_camp_1]

Una de las primeras cosas que le hice a la Nexus fué abrir el bootloader, que permite trabajar por medio del fastboot con la tablet, para abrir el bootloader estos son los pasos (OJO se hará borrado completo de la tablet):

  • Revisar que la batería esté, como poco al 80%.
  • Descargar el sdk de android y descomprimirlo.
  • Activamos depuración usb, dentro de opciones de desarrollador. Por cierto, si tenemos actualizada la tablet a 4.2, las opciones de desarrollador han sido ocultadas, pero para activarlas, solo hay que ir ajustes / Información del tablet y pulsamos repetidas veces en «Numero de compilación», tras casi 10 veces, pondrá algo del tipo «Ahora eres desarrollador» y podrás activar la depuración usb.
  • Apagamos la tablet
  • Encendemos la tablet manteniendo pulsados a la vez «Volumen -» y el «power», tras varios segundos aparecerá el bootloader con el que trabajaremos.
  • Ahora nos vamos a la consola (doy por hecho que ya casi no quedará gente usando Windows xD) y buscamos la carpeta donde descomprimimos el sdk y nos metemos a la carpeta platform-tools, donde dentro veremos el fastboot
  • Ejecutamos: «./fastboot oem unlock» y en pantalla aceptamos.
  • Ahora se borrará por completo la tablet y lo normal es que se reinicie automáticamente, después de eso, veremos que tendremos un candado debajo del logo de Google al arrancar, eso es que ya está la tablet abierta para ser manipulada.

Una vez que tengamos hecho eso, cuando volvamos a arrancar en el fastboot podremos lanzarle muchos comandos para flashear, leer, etc etc.

[wp_ad_camp_4]

android

Modificación Baru X6-S (II)

Seguimos con el Baru TV BOX Android. Después de llevármelo un día a las reuniones semanales de Linux Albacete, decidí empezar a meterle mano al cacharro e hice la prueba para ver si conseguía algo mas que arrancarlo. Lo lógico parecía ir por la parte de del «RECOVER» que había en la placa (como se vio en el post primero de la modificación Baru X6-S), por lo que puse un clip entre los dos pines, apagué y encendí y ¡Bingo!:

Herramienta «recover-clip»:

rps20130120_212329

Y una vez arrancado (un par de segundos) quitamos el clip (yo al principio no lo quitaba y aunque aparece el dispositivo, no funciona) y con un lsusb podemos ver:

lsusbcaptura

Arriba aparece una linea en blanco, que buscando en Google, es el modo flash del chip RK2918 (Dispositivo 2207:290a). Una vez detectado, me decidí a empezar a realizar las lecturas con el software rk2918tools y todo funcionó a la perfección:

rkflashtools

En las primeras direcciones de memoria podemos extraer el mtd, que es ni mas ni menos que la tabla de particiones de la nand flash (en mi caso 4GB).

El mtd contiene un bloque de informacion en el que indica el inicio de la partición y el tamaño de ésta, suele venir de la manera : 0x0000200@0x000a0240(boot), en el que el primer número es el tamaño (200) en el ejemplo y el otro número la dirección del inicio (a0240) en este ejemplo. Luego, entre paréntesis indica la partición a la que corresponde, en este caso el boot.

Como se verá mas adelante, el mtd se puede modificar para poder probar roms de otros tamaños ya que a veces las roms tienen systems mucho mayores que el que trae por defecto.

De momento, lo que hice fue hacer una copia de cada una de las particiones que habia para evitar futuros desastres y para permitirme recuperar si flasheaba mal en algún caso (que lo hice en muchas ocasiones).

Para el backup use el rkflashtool de la siguiente manera:

rkflashtool r 0x000a0240 0x0000200 > boot.img

Ojo! Esto es solo un ejemplo y las direcciones cambiaran, para saber exactamente las direcciones del vuestro, podéis extraer el parameter que es lo primero que va en la memoria con:

rkflashtool r 0x00000000 0x00000200 > parameter

[wp_ad_camp_1]

Al acabar tendréis en el fichero parameter toda la información del mtd, ahora podéis leer el fichero con un editor hexadecimal, yo usé en la ubuntu el bless.

bless

Android

Modificación BARU X6-S (I)

Ufff, hace tiempo que no escribía nada aquí, voy a ver si continuo con el blog contando en lo que estoy «enfrascao» a modo hobby por aprender y por pasar las noches con la parienta cada uno liao en sus cosas dentro de la oficina que montamos en casa.

Desde hace bastante tiempo (algo mas de un año) compré en eBay un reproductor Android con un procesador Cortex A8 creo recordar a 1.2 Ghz y una gráfica Mali400. El reproductor funciona bien, el interfaz chino es feo, pero bueno, sencillo para manejar con el mando que trae con 40 botones de los que se usan 4 xD.

Leer más