El programa de desarrolladores de los e-readers BQ Cervantes está pensado para que cualquier usuario con los conocimientos necesarios pueda realizar sus propias versiones de firmware e incluso compartirlas con la comunidad. Para ello ponemos a vuestra disposición nuestro código fuente, tanto a nivel de kernel como aplicación.

Nuestra edición de firmware para desarrolladores es la puerta de entrada a tu Cervantes y convierte tu e-reader en un dispositivo abierto para tu libre desarrollo. Este firmware te ofrece acceso total al sistema Linux que corre en el dispositivo y te permite modificar el software del sistema y crear nuevas aplicaciones. Aunque instales este firmware en tu dispositivo seguirás disponiendo de la garantía habitual.

Este firmware es compatible con los siguientes modelos:

  • BQ Cervantes Touch / Fnac Touch (2012-2013)
  • BQ Cervantes Touch Light / Fnac Touch Plus (2012-2013)
  • BQ Cervantes 2013 / Fnac Touch Light (2013)
  • BQ Cervantes 3 / Fnac Touch Light 2 (2016)
  • BQ Cervantes 4 (2017)

Funciones adicionales del Firmware

Acceso Telnet al dispositivo

El acceso Telnet al dispositivo se puede activar desde el menú “Ajustes” -> “Development Options”. Una vez activado, podrás acceder por Telnet a tu dispositivo, vía Wi-Fi o USB si lo has activado como interfaz de red (ver en el siguiente punto cómo hacerlo).

La contraseña de root estará vacía por defecto, así que recomendamos fijar una nueva contraseña (si planeas usar Telnet sobre Wi-Fi también recomendamos instalar ssh).

Interfaz de red a través del USB

Se puede configurar el puerto USB del dispositivo como un interfaz de red desde el menú “Ajustes” -> “Development Options”. Si activas esta opción, el dispositivo configurará una red en el interfaz usb0 con IP 192.168.4.1. Configura el interfaz usb0 de tu PC con otra IP del mismo rango (p.e: 192.168.4.2) y podrás acceder al dispositivo por Telnet a través de este interfaz sin necesidad de conectar el dispositivo a WiFi.

Arranque de un sistema externo almacenado en la MicroSD

El firmware de desarrolladores te permite arrancar un sistema contenido en la microSD en lugar del que está almacenado en la memoria interna. Este sistema recomendado para que puedas probar nuevos desarrollos, ya que podrás hacerlo sin riesgos manteniendo el sistema de la memoria interna intacto para su uso como e-reader. Para arrancar un sistema contenido en la microSD debes seguir los siguientes pasos:

  1. Formatea la primera partición de tu microSD con formato ext3.
  2. Copia un sistema de ficheros funcional en la partición creada, lo más facil es hacer una copia de la partición completa de rootfs del dispositivo (mmcblk0p1 para Fnac Touch/Cervantes Touch/Fnac Touch Plus/Cervantes Touch Light y mmcblk0p05 para todos los dispositivos posteriores )
  3. Copia una imagen de kernel valida con path /boot/uImage (el kernel de base esta directamente incluido en el rootfs de la partición indicada).
  4. Inserta la SD en el dispositivo.
  5. Enciende el dispositivo manteniendo pulsado el botón Power + botón Home hasta que el arranque se haya completado. Si el sistema externo usado es una copia de nuestro rootfs podrás confirmar que se está arrancando desde la microSD al tener la imagen de arranque de la aplicación de lectura un icono adicional de SD.

Advertencia. Es realmente importante mantener ambos botones presionados en el paso 5, si solamente se mantiene pulsado el botón “Home“ durante el arranque inicial se lanzará un intento de actualización en vez del arranque desde la microSD.

Comandos útiles

De cara a poder correr tus propias aplicaciones sin interferencia de la aplicación principal de lectura puedes usar los siguiente comandos:

  • stopapp.sh: Este script parará la aplicación de lectura.
  • restart.sh. Este script reiniciará la aplicación de lectura.

Funcionalidades limitadas

El firmware para desarrolladores tiene cierta funcionalidad limitada por motivos de licencias y seguridad:

  • Todos los libros comprados en tu tienda asociada serán eliminados del dispositivo y no serán accesibles para proteger los derechos de autor, sin embargo todos ellos seguirán disponibles en cualquiera de tus otros dispositivos o en tu eReader si restauras el firmware estándar. Los archivos almacenados en la memoria interna y la microSD se mantendrán.
  • Las funciones relacionadas con los diccionarios no estarán habilitadas.
  • No se recibirán notificaciones de las nuevas actualizaciones disponibles.

Instalación

Requisitos previos

Simplemente necesitas un usuario asociado a la tienda de tu dispositivo, nubico para el caso de dispositivos BQ.  Puedes crear tu usuario en el dispositivo o en www.nubico.es

Proceso de instalación

Podrás instalar libremente el firmware para desarrolladores sin necesidad de contactar con nosotros, sin embargo te informamos de que registraremos este proceso de actualización en nuestra base de datos de cara a una posible incidencia de soporte. No obstante, la garantía del dispositivo se mantiene igualmente independientemente de que hayas instalado este firmware en él.

Estos son los pasos a seguir:

  • Descarga el paquete de instalación asociado a tu dispositivo:
  • Copia en la raíz de tu microSD el directorio bqupdate contenido en el archivo descargado.
  • Crea un fichero de nombre I_WANT_TO_BE_A_HACKER y escribe en este archivo el número de serie de tu dispositivo con el siguiente formato: SN-ABCDE12345 ( p.e: para el S/N E606722CB03884 debes escribir SN-E606722CB03884 en el fichero). No se debe dar ninguna extensión al fichero, simplemente editarlo como texto plano.
  • Copia el fichero I_WANT_TO_BE_A_HACKER a la raíz de tu tarjeta microSD.
  • Inserta tu microSD en el dispositivo y deberá aparecer un diálogo para autorizar la instalación del firmware para desarrolladores en el dispositivo. Recibirás un mensaje indicando que la autorización ha sido correcta. Para realizar este paso necesitas estar conectado a una red WiFi.
  • Tras la autorización con éxito, apaga el dispositivo.
  • Enciende el dispositivo y mantén presionado el botón Home mientras el dispositivo se está encendiendo para instalar el firmware de la manera habitual.

Nota: No prestes atención al primer aviso en la autorización del dispositivo para la descarga si indica la pérdida de garantía, esto es simplemente una errata del diálogo en la versión 4.2.0. La garantía de tu dispositivo se mantiene.

Restauración del firmware estándar

Si deseas restaurar el firmware estándar, con funcionalidad completa y acceso restringido al sistema, simplemente necesitas el firmware de restauración:

El procedimiento es el habitual, copia el directorio bqupdate en la raíz de tu tarjeta microSD, insértala en tu dispositivo y enciende el dispositivo manteniendo el botón de Home pulsado. Asegúrate de mantener solamente el botón de Home y soltar el de Power tan pronto como se encienda la luz verde del dispositivo, si mantienes ambos pulsados lo que se intentará es arrancar usando la microSD en vez de la actualización.

Ten en cuenta que el proceso de restauración requiere de mucho más tiempo que una actualización manual normal, puede llegar a tardar alrededor de unos 40 minutos. Es una operación muy crítica y es realmente importante esperar hasta que el proceso haya finalizado sin apagar el dispositivo, la luz verde del dispositivo se mantendrá parpadeando durante el proceso. Para asegurarte de que el dispositivo no se apaga por falta de batería durante el proceso te recomendamos conectarlo al cargador.

Advertencia. Toda la memoria interna será formateada y se perderán todos los archivos almacenados en ella, el dispositivo volverá a su estado de fábrica y los libros almacenados por el usuario se perderán. Por lo tanto, considera hacer backup de tus archivos personales.

Advertencia. Necesitas mantener intacta la partición de rescue (mmcblk0p2 para Fnac Touch/Cervantes Touch/Fnac Touch Plus/Cervantes Touch Light y mmcblk0p10 para todos los dispositivos posteriores) para poder usar el proceso de restauración estándar. Si has borrado o dañado esta partición necesitarías ejecutar el siguiente proceso de restaurado manualmente:

  1. Arranca el dispositivo usando la microSD (Puedes ver como en el apartado más abajo).
  2. Extrae manualmente el binario restore y original.img de la imagen del fichero de la imagen de restaurado usando el keyring.
  3. Ejecuta ./restore original.img.

Reinstalación del firmware de desarrolladores

Una vez has instalado el firmware para desarrolladores puedes reinstalar fácilmente este mismo firmware o versiones posteriores. Para ello, descarga el paquete de instalación que corresponda y usa el procedimiento habitual descrito en el apartado anterior.

Información para desarrollo

Aplicación de lectura

Tienes disponible todo el código fuente de nuestra aplicación de lectura en el siguiente repositorio:

https://github.com/bq/cervantes

Puedes encontrar toda la información acerca de como compilar la aplicación en el propio README incluido. Para ellos necesitarás nuestro sdk pre-generado.

Sistema base

El sistema base es una distribución Debian Wheezy para ARM, así que puedes instalar nuevo software fácilmente usando apt-get.

Recomendamos encarecidamente mantener el firmware interno como está y hacer todos los cambios y modificaciones en una microSD externa bootable que sea una copia del sistema original. Si aún te planteas instalar software con apt en el firmware interno puede necesitar expandir la partición de root de /var como una partición separada con espacio suficiente para datos de apt.

La conectividad del sistema está provista por connman. Si no quieres usar el interfaz proporcionado por la aplicación de lectura para conectar a una red Wi-Fi también lo puedes hacer a través de los comandos proporcionados por connman o el interfaz dbus.

Kernel

  • Cervantes Touch/Fnac Touch y Cervantes Touch Light/Fnac Touch Plus

Puedes encontrar todo el código fuente del kernel en https://github.com/bq/linux-e60622 para Fnac Touch/Cervantes Touch/Fnac Touch Plus/Cervantes Touch Light.

El código correcto para crear un kernel funcional para el dispositivo está contenido en la rama topic/fixes. Para un uso simple, como compilar el kernel, puedes hacer checkout de la rama de manera normal, pero para acceder a todas las funcionalidades de esta rama es recomendable el uso de topgit. El árbol completo de las ramas es el siguiente:

topic/fixes                        – Fixes sobre todo lo demás

\- topic/backports             – Backports de funcionalidades de mainline (> 2.6.35)

\- e60622_2.6.35           – Rama base del eReader

\- imx_2.6.35          – Rama base de Freescale para i.MX5 SoCs

Puedes encontrar un fichero .config funcional en el directorio base de las fuentes del kernel. Por lo tanto, los comandos de compilación cruzada estándar deberían ser suficientes para construir una nueva imagen de kernel:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-uImage

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-modules

El kernel debe tener formato uImage para que el u-boot lo pueda reconocer.

Para que el u-boot arranque el nuevo kernel, cópialo a la carpeta /boot de la primera partición de tu sistema (por ejemplo en la uSD), sobrescribiendo el fichero uImage que se encuentre allí.

  • Cervantes 2013/Fnac Touch Light

Puedes encontrar el codigo fuente en https://github.com/bq/linux-e60q22.

El código correcto para crear un kernel funcional para el dispositivo está contenido en la rama topic/features. Para un uso simple, como compilar el kernel, puedes hacer checkout de la rama de manera normal, pero para acceder a todas las funcionalidades de esta rama es recomendable el uso de topgit. El árbol completo de las ramas es el siguiente:

topic/fixes              – Fixes sobre todo lo demás

\- e60q22            – Rama base de la plataforma

\- master        – Rama base Freescale para i.MX6 SoCs

Puedes encontrar un fichero .config funcional en el directorio base de las fuentes del kernel. Por lo tanto, los comandos de compilación cruzada estándar deberían ser suficientes para construir una nueva imagen de kernel:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-uImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-modules

El kernel debe tener formato uImage para que el u-boot lo pueda reconocer.

Para que el u-boot arranque el nuevo kernel, cópialo a la ruta /boot/uImage.e60q22 de la primera partición de tu sistema (por ejemplo en la uSD),sobrescribiendo el fichero uImage.e60q22 que se encuentre allí.

  • Cervantes 3/Fnac Touch Light 2

Puedes encontrar el codigo fuente en https://github.com/bq/linux-e60qh2.

El código correcto para crear un kernel funcional para el dispositivo está contenido en la rama topic/features. Para un uso simple, como compilar el kernel, puedes hacer checkout de la rama de manera normal, pero para acceder a todas las funcionalidades de esta rama es recomendable el uso de topgit. El árbol completo de las ramas es el siguiente:

devel/features – Fixes sobre todo lo demás

\- e60qh2             – Rama base de la plataforma

\- master         – Rama vase Freescale para i.MX6 SOCs

Puedes encontrar un fichero .config funcional en el directorio base de las fuentes del kernel. Por lo tanto, los comandos de compilación cruzada estándar deberían ser suficientes para construir una nueva imagen de kernel:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-uImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-modules

El kernel debe tener formato uImage para que el u-boot lo pueda reconocer.

Para que el u-boot arranque el nuevo kernel, cópialo a la ruta /boot/uImage.e60h22 de la primera partición de tu sistema (por ejemplo en la uSD),sobrescribiendo el fichero uImage.e60qh2 que se encuentre allí.

  • Cervantes 4

Puedes encontrar el codigo fuente en https://github.com/bq/linux-e60qp2.

El código correcto para crear un kernel funcional para el dispositivo está contenido en la rama topic/features. Para un uso simple, como compilar el kernel, puedes hacer checkout de la rama de manera normal, pero para acceder a todas las funcionalidades de esta rama es recomendable el uso de topgit. El árbol completo de las ramas es el siguiente:

devel/features – Fixes sobre todo lo demás

\- e60qp2             – Rama base de la plataforma

\- master         – Rama vase Freescale para i.MX6 SOCs

Puedes encontrar un fichero .config funcional en el directorio base de las fuentes del kernel. Por lo tanto, los comandos de compilación cruzada estándar deberían ser suficientes para construir una nueva imagen de kernel:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-uImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-modules

El kernel debe tener formato uImage para que el u-boot lo pueda reconocer.

Para que el u-boot arranque el nuevo kernel, cópialo a la ruta /boot/uImage.e60qp2 de la primera partición de tu sistema (por ejemplo en la uSD),sobrescribiendo el fichero uImage.e60qp2 que se encuentre allí.

Mapa de memoria en el dispositivo y precauciones

Los primeros 10MB de la memoria interna están reservados para datos críticos de bajo nivel directamente ligados al dispositivo específico. Datos como los siguientes se almacenan en este sector de memoria:

  • uboot. El binario necesario para arrancar el sistema. La corrupción de esta información provocará la imposibilidad de arrancar el dispositivo y requiere un difícil arreglo.
  • Numero de serie.
  • Información asociada al hardware.
  • Datos individuales asociados a las propiedades de la pantalla. La corrupción de esta información puede llevar a un mal funcionamiento parcial o total de la pantalla de tinta electrónica. En ocasiones, irrecuperable a un 100%.

Entorno de desarrollo

Instalación del compilador cruzado

Dado que la arquitectura hardware del dispositivo está basada en ARM, tanto para el desarrollo del Kernel como de la aplicación es necesario poder crear ejecutables ARM compilando usando hardware x86.

En sistemas Ubuntu puedes encontrar un compilador cruzado compatible en el universo de archivos Ubuntu, por lo tanto un simple sudo apt-get install g++-arm-linux-gnueabi gcc-arm-linux-gnueabi debería ser suficiente para instalarlo.

En sistemas Debian el compilador cruzado necesario no es parte de la distribución actualmente, pero es parte del subproyecto Emdebian. Sigue las instrucciones en la wiki oficial para instalar los paquetes necesarios: http:/ /wiki.debian.org/EmdebianToolchain#Get_the_binaries

Para cualquier otra distribución puedes usar una toolchain genérica de Linaro: https://launchpad.net/linaro-toolc hain-binaries/trunk/2012.04/+download/gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linux.tar.bz2

Dependencias

Para compilar aplicaciones Qt ejecutables en tu dispositivo necesitas configurar estas variables de entorno para que el qmake use el compilador cruzado y enlace a las librerías Qt para ARM.

export ROOTFS=/path/to/your/rootfs-sdk/
export QTDIR=$ROOTFS/usr
export QMAKESPEC=$QTDIR/mkspecs/linux-arm-gnueabi-g++/

Antes de ejecutar aplicaciones Qt en el dispositivo es necesario fijar algunas variables de entorno para Qt y tslib (la librería que gestiona los eventos táctiles):

export QWS_DISPLAY=einkfb
export QWS_MOUSE_PROTO=tslib:/dev/input/event1
export QT_QWS_FONTDIR=/usr/lib/fonts
export QWS_KEYBOARD=eb600keypad:/dev/input/event0
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/usr/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/arm-linux-gnueabi/ts0/
export POINTERCAL_FILE=/usr/etc/pointercal

Otras aplicaciones

Tienes distintas opciones para crear tus propias aplicaciones:

  • Usar Qt junto con los plugins ya proporcionados. Ésta es la manera más sencilla y recomendada para empezar.
  • Instala Xorg y hacer desarrollo en X ”customizado”. Necesitarás modificar el soporte del driver para el fra mebuffer.
  • Otras opciones (fb directo, gtk con fb, wayland/weston…)

Para poder enlazar tus aplicaciones probablemente necesites ciertas librerías y cabeceras. Puedes generar todo esto usando debian multistrap o copiándolo desde el sistema de ficheros del dispositivo. Sin embargo, por si no quieres tomarte estas molestias, la manera más sencilla es descargarte el sdk pre-generado que hemos preparado. Este SDK incluye algunas librerías de utilidades para hacer el desarrollo de aplicaciones más fácil.

Creación de paquetes de firmware

Si eres un gran desarrollador y has conseguido interesantes aplicaciones nuevas o realizado versiones especiales de nuestras aplicación de lectura que quieres compartir con otros desarrolladores y usuarios, puedes empaquetarlas como una imagen del firmware que será instalable.

Para crear esta imagen :

  1. Empaqueta el sistema de ficheros de root en un archivo tar.gz.
  2. Usa gpg para encriptar y firmar este archivo usando la firma hackers-keyring-host.tar.gz y obtendrás la imagen
  3. Coloca la imagen encriptada y su firma en una carpeta llamada bqupdate con los nombres update.img y update.asc respectivamente
  4. Comprime la carpeta bqupdate a un zip.
  5. Comparte el fichero con la comunidad 🙂