TRABAJO FIN DE GRADO Título Configuración optimizada dispositivos móviles para el cálculo científico Autor/es Félix Lanas Mangado Director/es Eloy Javier Mata Sotés Facultad Facultad de Ciencias, Estudios Agroalimentarios e Informática Titulación Grado en Ingeniería Informática Departamento Curso Académico 2012-2013 Configuración optimizada dispositivos móviles para el cálculo científico, trabajo fin de grado de Félix Lanas Mangado, dirigido por Eloy Javier Mata Sotés (publicado por la Universidad de La Rioja), se difunde bajo una Licencia Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported. Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los titulares del copyright. © © El autor Universidad de La Rioja, Servicio de Publicaciones, 2013 publicaciones.unirioja.es E-mail: publicaciones@unirioja.es Facultad de Ciencias, Estudios Agroalimentarios e Informática TRABAJO FIN DE GRADO Ingeniería Informática Configuración optimizada de dispositivos móviles para cálculo científico. Autor: Félix Lanas Mangado Tutor: Eloy Javier Mata Sotés Departamento de Matemáticas y Computación Logroño, julio de 2013 AGRADECIMIENTOS En primer lugar quisiera agradecer a Eloy Javier Mata, director del TFG, por su ayuda durante estos años. También hacer una mención a mis compañeros de trabajo y de universidad, que me han proporcionado la ayuda y el apoyo necesario. Y por último agradecérselo a toda mi familia y amigos, que siempre han estado ahí, en los buenos y en los malos momentos. A todos ellos, muchas gracias. 1 2 RESUMEN El presente trabajo fin de grado pretende analizar la adaptación de una aplicación de cálculo científico a la arquitectura ARM dentro de una plataforma móvil. Primero se revisan diversos conceptos de los dispositivos móviles Android y iPhone para configurarlos de forma optimizada. Se analizan aspectos como la gestión de memoria, la eficiencia energética o su personalización. En concreto, se describe cómo obtener permisos de administrador en ambos entornos, lo que nos va a permitir realizar tareas como el control de versiones, el acceso a ficheros de configuración o la modificación del gestor de arranque. También se describen los pasos para creación e instalación de una versión propia del sistema operativo Android. Para finalizar, se muestra cómo adaptar Triqct (un programa de dinámica molecular escrito en Fortran) a procesadores con arquitectura ARM, que llevan en la actualidad la mayoría de los dispositivos móviles. Esto abre la puerta a su posible portabilidad a futuros equipos de alto rendimiento basados en esta arquitectura. ABSTRACT The current dissertation aims to analyse and migrate a scientific computing application to an ARM architecture in a mobile platform context. First of all, Android and iPhone key concepts are going to be explained in order to optimize them. For instance we deal with dynamic memory consumption, energetic efficiency or customization. In addition, we describe how to obtain root grants in both environments which allow us to perform tasks as Versioning control, configuration files access and customization of the bootloader. Moreover, we describe a stepby-step guide to create and install a custom ROM of Android OS. In closing, we give the details of the process to port Triqct (which is a molecular dynamics software written in Fortran) to an ARM architecture that is nowadays the most trendy on mobile phones. This dissertation opens the way to port Triqct to High Performance Computers. 3 4 TABLA DE CONTENIDOS AGRADECIMIENTOS .............................................................................................................1 RESUMEN ............................................................................................................................3 ABSTRACT ...........................................................................................................................3 TABLA DE CONTENIDOS .......................................................................................................5 INTRODUCCIÓN ...................................................................................................................9 CONFIGURACIÓN OPTIMIZADA DE ANDROID...................................................................... 13 GESTOR DE ARRANQUE (BOOTLOADER)............................................................................................ 13 RECOVERY (MODO RECOVERY)....................................................................................................... 14 Rootear................................................................................................................................. 14 Flashear ................................................................................................................................ 15 ROM ..................................................................................................................................... 15 Tipos de ROM.................................................................................................................................................. 15 ¿Cuál de los dos es mejor? .............................................................................................................................. 15 Conclusión .................................................................................................................................................. 16 Recovery modificado ............................................................................................................ 16 PROBLEMAS DE ESPACIO DE ALMACENAMIENTO ................................................................................ 18 Ampliación de almacenamiento con Link2SD ...................................................................... 19 CONFIGURACIÓN OPTIMIZADA DE IOS ............................................................................... 23 BENEFICIOS DE REALIZAR EL JAILBREAK ............................................................................................. 23 RIESGOS DEL JAILBREAK ................................................................................................................. 23 “Brickear” el iPhone ............................................................................................................. 24 Aspectos legales ................................................................................................................... 24 CYDIA......................................................................................................................................... 24 Cydia Store ........................................................................................................................... 25 TIPOS DE JAILBREAK ...................................................................................................................... 25 Jailbreak Tethered ................................................................................................................ 25 Jailbreak Untethered ............................................................................................................ 25 Jailbreak Semi-Tethered ....................................................................................................... 25 MÉTODOS PARA LOGRAR EL JAILBREAK ............................................................................................ 25 Jailbreak Semi-Untethered en iOS 6.1.3 con RedSnow ........................................................ 27 Jailbreak Untethered en iOS con limera1n ........................................................................... 29 DOWNGRADE DEL SISTEMA IOS ...................................................................................................... 30 Cómo guardar los archivos SHSH ......................................................................................... 31 Restricciones ................................................................................................................................................... 31 Guardar SHSH con TinyUmbrella .................................................................................................................... 31 Realizar Downgrade con TinyUmbrella................................................................................ 33 Realizar Downgrade con Sn0wbreeze .................................................................................. 35 LIBERAR IPHONE (UNLOCK)............................................................................................................ 38 CREACIÓN DE NUESTRA PROPIA VERSIÓN DE ANDROID ...................................................... 41 CONCEPTOS ÚTILES ANTES DE EMPEZAR ........................................................................................... 41 Partes de un firmware.......................................................................................................... 41 5 Particiones en el sistema Android ........................................................................................ 41 /boot ............................................................................................................................................................... 42 /system ........................................................................................................................................................... 42 /Recovery ........................................................................................................................................................ 42 /data ............................................................................................................................................................... 42 /cache ............................................................................................................................................................. 43 /misc ............................................................................................................................................................... 43 /sdcard ............................................................................................................................................................ 43 /sd-ext ............................................................................................................................................................. 43 Significado de los códigos PDA y CSC al descargarnos el firmware ..................................... 43 CREACIÓN DE LA ROM.................................................................................................................. 45 Prerrequisitos ....................................................................................................................... 45 Descripción de Android Kitchen ........................................................................................... 45 instalación de la aplicación triqct en el firmware ................................................................ 50 Personalización del sistema operativo ................................................................................. 50 Creación de la imagen del sistema operativo (rom) ............................................................ 52 CREAR ANIMACIÓN DE INICIO EN ANDROID ....................................................................................... 52 PORTACIÓN DE APLICACIÓN DE CÁLCULO CIENTÍFICO A UN ENTORNO MÓVIL..................... 55 CONCLUSIONES ................................................................................................................. 57 LECCIONES APRENDIDAS ................................................................................................................ 57 VALORACIÓN FINAL....................................................................................................................... 57 ANEXO 1 – ARQUITECTURA DE IOS ..................................................................................... 59 CAPA CORE OS ............................................................................................................................ 59 Nivel de sistema ................................................................................................................... 59 Framework de seguridad ................................................................................................................................ 59 Capa Core Services ............................................................................................................... 60 SQLite .............................................................................................................................................................. 60 Grand Central Dispatch (gcd) .......................................................................................................................... 60 Almacenamiento iCloud .................................................................................................................................. 60 Protección de datos ........................................................................................................................................ 61 Conteo de referencia automática (ARC) ......................................................................................................... 61 Soporte XML ................................................................................................................................................... 62 Compra dentro de la aplicación ...................................................................................................................... 62 Capa media .......................................................................................................................... 62 Tecnología de gráficos .................................................................................................................................... 62 Tecnología de audio ........................................................................................................................................ 63 Tecnología de vídeo ........................................................................................................................................ 63 Tecnología airplay ........................................................................................................................................... 63 Capa cocoa touch ................................................................................................................. 63 Multitarea ....................................................................................................................................................... 63 Segundo plano real .............................................................................................................. 64 Impresión ........................................................................................................................................................ 64 notificaciones push de Apple .......................................................................................................................... 65 notificaciones locales ...................................................................................................................................... 65 ANEXO 2 – ARQUITECTURA DE ANDROID ........................................................................... 66 NÚCLEO LINUX ............................................................................................................................ 66 ANDROID RUNTIME (TIEMPO DE EJECUCIÓN) .................................................................................... 67 LIBRERÍAS ................................................................................................................................... 67 6 FRAMEWORK DE LAS APLICACIONES ................................................................................................. 68 APLICACIONES ............................................................................................................................. 69 ANEXO 3 – CÓDIGOS DE VERSIÓN DEL FIRMWARE DE ANDROID ......................................... 70 Códigos de Región ................................................................................................................ 70 Códigos de año ..................................................................................................................... 71 Códigos de mes .................................................................................................................... 71 Códigos de revisión .............................................................................................................. 71 Códigos de operadora .......................................................................................................... 72 BIBLIOGRAFÍA.................................................................................................................... 73 ARM ......................................................................................................................................... 73 ANDROID .................................................................................................................................... 73 IOS ............................................................................................................................................ 74 7 8 INTRODUCCIÓN DynaTAC 800X El 3 de abril de este año 2013 se cumplió el 40 aniversario de un hecho histórico que cambiaría la forma de entender las comunicaciones, se produjo la primera llamada telefónica vía móvil. La realizó Marty Cooper, ingeniero de Motorola, utilizando el teléfono que ellos mismos habían creado, el DynaTAC 8000X. Diez años más tarde, comenzaría a comercializarse con un precio de venta al público equivalente a 7.000 euros de hoy en día, un peso 800 gramos y unas dimensiones de 33 cm. de altura contando la antena, 4,5 cm. de largo y 8,9 cm. de grosor. Su batería tardaba 10 horas en cargarse y disponía de una autonomía durante una conversación de 30 minutos. Únicamente permitía llamadas de voz, con una calidad de sonido muy pobre. A pesar de su elevado coste, tamaño y peso, este dispositivo era ansiado por miles de personas, que no dudaron en inscribirse en la lista de espera para recibir una de las preciadas unidades fabricadas. iPhone El 29 de enero de 2007, el CEO de Apple, Steve Jobs, presentaba en la convención MacWorld de San Francisco lo que sería la mayor revolución tecnológica móvil hasta la fecha, el iPhone. Según palabras del propio Jobs, el objetivo era “reinventar el teléfono”, consiguiendo trasladar el concepto de sistema operativo de un entorno de escritorio a un dispositivo de bolsillo. El iPhone incorporaba un sistema operativo llamado iOS, con una interfaz muy sencilla y que podía ser manejada únicamente con los dedos, característica inédita hasta el momento. iOS deriva del sistema operativo de Apple de equipos de sobremesa Mac OS X, que a su vez está basado en Darwin BSD, un sistema operativo de tipo Unix. Se pueden diferenciar 4 cuatro capas de abstracción en su arquitectura: el Kernel (Basado en Darwin BSD), encargado de la gestión de memoria, procesos, permisos, …; la capa de servicios principales que permite al usuario acceder a todos los servicios del sistema; la capa media que posibilita la gestión de contenido multimedia; y la capa Cocoa Touch, API que proporciona a los programadores una capa de abstracción del dispositivo. 9 Android Como alternativa a iOS, en septiembre de 2008 nace Android, un sistema operativo pensado para dispositivos móviles, actualmente propiedad de Google. Lo que le hace especial es que está basado en Linux, un núcleo de sistema operativo libre, gratuito y multiplataforma. Las aplicaciones que se ejecutan sobre Android lo hacen sobre una variación de la máquina virtual de Java llamada Máquina virtual Dalvik. El sistema operativo proporciona todas las interfaces necesarias para desarrollar aplicaciones que acceden a las funciones del teléfono, como pueden ser el GPS, las llamadas, la agenda, etc. Todo ello está codificado en un lenguaje de programación tan conocido y que tiene una comunidad tan grande como es Java. Android es una plataforma de código abierto en la que cualquier desarrollador puede descargar el sistema operativo y realizar las modificaciones que crea oportunas. Otros sistemas Existen otras alternativas en el mercado actual, además de Android e iOS. Entre otros: Windows Phone, sistema propietario desarrollado por Microsoft; BlackBerry OS, creado por la empresa canadiense RIM para sus dispositivos; y el más novedoso, Firefox OS, basado en Linux y diseñado para que sus aplicaciones sean creadas en HTML5, CSS y JavaScript. La razón por la cual he optado por centrarme en iOS y Android es debido a que son actualmente los sistemas punteros a nivel mundial, los que más posibilidades de personalización tienen y los que disponen de una mayor comunidad en internet que trabaja en la creación de nuevas herramientas para estos entornos. 10 Hardware Ha avanzado mucho la tecnología desde el nacimiento del primer dispositivo móvil, hoy en día la mayoría de los teléfonos disponen de hardware muy avanzado: Cámara que nos permite tomar tanto fotografías como vídeos de gran calidad. Micrófonos de gran calidad que permiten una transmisión de voz muy buena, además de posibilitarnos la implementación de programas de reconocimiento de voz muy potentes como es el caso de Siri, de Apple. Antena GPS que permiten determinar el posicionamiento del terminal vía satélite. Acelerómetro que mide las fuerzas inducidas por la gravedad y nos permite detectar el giro del teléfono. Brújula para poder localizar el norte. Giroscopio mecánico, que nos sirve para medir la orientación del teléfono. Arquitectura ARM ARM es una arquitectura de 32 bits desarrollada en 1983 por la empresa Acorn Computers Ltd. para computadores personales que incorpora un conjunto de instrucciones muy básico. La simplicidad de los procesadores ARM hace que el consumo energético sea muy reducido y, como consecuencia, actualmente casi la totalidad de dispositivos móviles llevan este tipo de CPU. La arquitectura ARM es de tipo RISC, acrónimo de “Reduced Instruction Set Computer” y que se traduce como “Ordenador con conjunto de instrucciones reducidas”, se refiere a una filosofía de diseño de procesadores que contiene un conjunto de instrucciones pequeñas y simples. Mientras que la arquitectura ARM es de tipo RISC, x86 es de tipo CISC (Complex Instruction Set Computer), modelo que se caracteriza por usar un conjunto de instrucciones complejas muy amplio y permitir operaciones muy complejas. En la actualidad son muchísimas compañías las que crean procesadores ARM, muchas de ellas importantísimas en el campo tecnológico: Intel, IBM, Apple, Broadcom, Huawei, AMD, RIM, entre muchos otros. Cálculo científico Actualmente soy administrador del proyecto RiojaScience@home, una plataforma para el cálculo distribuido, en el cual los nodos se componen de computadores personales de usuarios domésticos. Éstos donan de manera voluntaria tiempo de procesamiento de sus equipos en los tiempos ociosos, momento en el que se activa un salvapantallas que pone en funcionamiento RiojaScience. El proyecto está siendo llevado a cabo por los departamentos de Matemáticas y Computación y de Química de la Universidad de La Rioja. Nació debido a las necesidades de aumentar el cálculo computacional del que disponían los investigadores del departamento de Química. 11 Actualmente RiojaScience está trabajando con Triqct (Triatomic quasiclassical trajectory calculation), un programa de química computacional para la resolución de reacciones en fase gas. Cuenta con unas 7.000 líneas de código escritas en el lenguaje Fortran 77. A día de hoy, RiojaScience cuenta con más de 4.000 equipos de 1.400 usuarios diferentes, gracias a los cuales ya se han procesado más de diez millones de unidades de trabajo de Triqct, el equivalente en tiempo de cómputo de un equipo normal a 600 años. Uno de los objetivos del proyecto de este trabajo fin de grado es conseguir que Triqct se ejecute en un entorno móvil bajo la arquitectura ARM. Las propiedades de ARM hacen que actualmente fabricantes de súper-ordenadores y clústeres de ordenadores se hayan decantado por este tipo de chips debido al poco consumo eléctrico que requieren. Además, debido a la gran cantidad de móviles que se vende en la actualidad, la producción de procesadores ARM es altísima, lo que conlleva que el precio de producción de un chip sea menor. Esto hace muy rentable utilizar este tipo de CPU para computación de alto rendimiento en lugar de otros más potentes, ya que suponen un coste mucho mayor por su producción a baja escala. Por ejemplo, HP anunció hace escasos días, en el tercer Congreso Nacional Cloud celebrado en Logroño (http://www.congresonacionalcloud.com/) su intención de empezar a fabricar clústeres de ordenadores basados en procesadores ARM. Otro caso es el de Pedraforca, un clúster de computación de alto rendimiento ubicado en el BSC (Centro de Supercomputación de Barcelona), compuesto por procesadores ARM (http://on-demand.gputechconf.com/gtc/2013/presentations/S3064-Pedraforca-ARM-GPUCluster-HPC.pdf ) En los siguientes apartados explicaré cómo configurar de manera optimizada un dispositivo Android y un dispositivo iPhone para conseguir en ambos la posibilidad de ejecutar aplicaciones de cálculo científico. Además, describiré el proceso que he seguido para conseguir portar la aplicación Triqct a la plataforma móvil, de modo que se ejecute bajo un procesador con arquitectura ARM. 12 CONFIGURACIÓN OPTIMIZADA DE ANDROID Nuestro objetivo final es el de portar una aplicación de cálculo científico a un entorno móvil. Para lograrlo, necesitaremos tener acceso sin límites a todas las funcionalidades del teléfono que por defecto vienen deshabilitadas. En todos los sistemas Unix, como es el caso de Android e iOS, existe un usuario especial denominado root, sobre el que no se aplica ningún tipo de restricción y que dispone de todos los privilegios de acceso. Los fabricantes de dispositivos Android impiden el acceso root en sus dispositivos, impidiendo la modificación de parámetros internos del sistema, opción en cierto modo comprensible, ya que es relativamente sencillo estropear algo, pero que en nuestro caso supone un escollo que deberemos superar. Alcanzando el acceso como root, además de poder compilar e instalar aplicaciones de cálculo científico para nuestro dispositivo, lograremos una optimización en el rendimiento de Android, una mejora en el consumo energético, gestión de memoria y opciones que nos serán de gran utilidad como aumentar la frecuencia de la CPU (overclock). A continuación explico el proceso de arranque de un teléfono Android, cómo cambiar el modo Recovery por defecto, el proceso para alcanzar los privilegios de root, instalar diferentes versiones de Android y la gestión de memoria. GESTOR DE ARRANQUE (BOOTLOADER) El Bootloader es el gestor de arranque de los dispositivos Android. A modo de comparación con el arranque de un ordenador normal, el Bootloader viene a ser el escaneo POST (Power On Self Test), proceso de verificación e inicialización de los componentes del PC que da paso a la inicialización del sistema operativo. Mientras en un equipo de sobremesa tenemos que pulsar teclas como Supr o F1 para entrar en la BIOS durante el arranque del sistema, en Android suele haber una combinación de teclas (dependientes del terminal) para entrar en el menú Bootloader. Este menú suele ser más sencillo que la BIOS, nos da opciones básicas como Boot (arranque del sistema), Power off (apagado), Recovery (siguiente apartado) y Reboot (reiniciar), entre otras. El menú Bootloader es un sistema Linux mínimo, con soporte para acceder a ficheros del móvil, soporte para realizar conexiones USB y un servidor para hacer operaciones avanzadas a través del ordenador por USB mediante la herramienta ADB (integrada en el SDK de Android, que se puede descargar desde http://developer.Android.com/sdk/index.html). 13 El Bootloader tiene un estado que por defecto es Locked, pero que puede ser cambiado mediante la herramienta ADB por USB a Unlocked. Con esto conseguimos desbloquear la posibilidad de cambiar la segunda capa, el Recovery, sustituyéndolo por otro con más opciones. RECOVERY (MODO RECOVERY) El modo Recovery consiste en un modo de arranque especial para corregir errores del sistema, instalar actualizaciones, realizar copias de seguridad etc. Podríamos decir que es el equivalente al modo seguro de Windows. A continuación muestro dos Recovery diferentes, el primero, uno que viene por defecto en un firmware de fábrica y el segundo uno modificado. Como se puede apreciar el primero tiene opciones muy limitadas: reiniciar el sistema, flashear (instalar) actualizaciones siempre que estén firmadas y sean oficiales, y limpiar la caché; mientras que el segundo alberga muchas más, entre ellas una fundamental, “Install zip from sdcard”, que nos permitirá instalar un sistema operativo alternativo. En el apartado “Recovery modificado” se habla en profundidad acerca de este Recovery con opciones añadidas. Imagen 1 Imagen 2 Señalar que el Recovery es parte del sistema operativo. Si reinstalamos el sistema operativo por otros medios que no sean mediante el Recovery, volveremos a tener el Recovery de fábrica. ROOTEAR Rootear significa poder ejecutar comandos o acceder a ficheros con permisos de root dentro del sistema operativo Android. Es un proceso equivalente al Jailbreak dentro de iOS (que comentaremos en el siguiente capítulo). Cuando se rootea un móvil se logran dos cosas, instalar la herramientas su de Linux (utilidad que se utiliza para obtener permisos de root dentro de sistemas Unix) para poder ser usada 14 por línea de comandos y añadir una aplicación al sistema que permita otorgar permisos de root a cualquier otra aplicación que requiera permisos de superusuario durante su ejecución. FLASHEAR Flashear un dispositivo se refiere al proceso de instalación de un nuevo firmware. Las ROMs no se instalan, se flashean. La definición de flashear es: “Cargar datos en un chip de memoria de estado sólido, en especial los que contienen el sistema operativo”. ROM En el sector informático conocemos típicamente ROM como las siglas de Read-Only Memory, pero también se conoce como ROM a una imagen del sistema operativo. En el caso de Android se refiere a la versión del sistema operativo en un archivo que se puede instalar (flashear) en el móvil. TIPOS DE ROM Las ROM´s de Android se pueden dividir en dos grupos: ROM de fábrica (Stock ROM): Es la versión del sistema operativo que viene por defecto con el teléfono, la que ha creado el fabricante. ROM personalizada (Custom ROM): Es una versión de Android completamente independiente de la del fabricante, creada por una comunidad de internet. Está personalizado desde el kernel hasta las aplicaciones que vienen por defecto. ¿CUÁL DE LOS DOS ES MEJOR? En la mayoría de los casos, una ROM personalizada supone una mejora notable en el rendimiento del terminal. La comunidad trabaja más en el código y se consiguen corregir y mejorar aspectos que el fabricante muchas veces no tiene en cuenta. Muchos fabricantes utilizan la práctica comercial obsolescencia programada y al sacar nuevos modelos de teléfonos, deja de adaptar versiones nuevas del sistema operativo a modelos más obsoletos, mientras que la comunidad se encarga de tener las últimas versiones de Android en la mayoría de terminales. Las publicaciones de las actualizaciones por lo general son mucho más frecuentes en custom ROM´s, ya que no implican la burocracia de una gran empresa. Un desarrollador de ROM´s personalizadas no requiere este proceso, y además por lo general, cuenta con un gran grupo de gente (comunidad de internet) que prueba las versiones e informa de posibles fallos, mejoras, etc., que hace que las actualizaciones lleguen más rápido. Aunque no hay garantía de ninguna empresa detrás del producto creado. 15 Gran cantidad fabricantes y operadoras instalan aplicaciones y modificaciones en el sistema operativo de fábrica que no tienen mucha utilidad, son imposibles de desinstalar y consumen muchos recursos. Por otro lado, durante el proceso de flasheo (instalación de la nueva ROM) hay una muy mínima posibilidad de que dejemos el terminal inutilizable (coloquialmente “como un ladrillo”). Esto puede ocurrir en el caso de que el teléfono se quede sin batería durante la instalación o que hagamos algún paso de manera errónea. El primer problema se evita asegurándonos de que la batería esté completamente cargada y el segundo siguiendo los pasos tal y como nos marca el desarrollador. Aun en el caso de hacerse algún punto mal, es poco probable dejar inutilizable el teléfono, ya que todos pasos dados en falso normalmente tienen vuelta atrás. El flasheo del teléfono con una ROM personalizada puede implicar una pérdida de la garantía. Si por alguna razón tenemos que llevar el teléfono al servicio técnico, y nos detectan que hemos realizado este proceso, es posible que nos anulen la garantía. De todas maneras, hay métodos de recuperar el estado inicial del teléfono y hacer indetectable el proceso de flasheo de una ROM modificada. CONCLUSIÓN Si nuestro dispositivo está en garantía y no tenemos ningún problema con él, además de tener una experiencia de usuario buena, no recomiendo instalar una ROM modificada, en cualquier otro caso, lo recomiendo encarecidamente. RECOVERY MODIFICADO Como he dicho anteriormente, un Recovery modificado es aquel que tiene muchas más opciones que los que vienen de fábrica, entre ellas la más importante es la que nos permite el flasheo de ROMs no oficiales. Dentro de los Recoverys modificados, el más famoso se llama ClockworkMod (http://www.clockworkmod.com/ ). A continuación voy a explicar las múltiples opciones que contiene: 16 Imagen 1 Reboot system now: Reiniciar el teléfono a un arranque normal. Apply update from sdcard: Esta opción nos permite la actualización de cualquier parte del sistema como el Kernel, aplicaciones, etc. Para ello, el archivo que queremos instalar se debe llamar update.zip y debe estar en el raíz de la tarjeta SD. Wipe data/Factory reset: Borrado de todos los datos de usuario del teléfono, así como la memoria caché. Sería dejar el sistema operativo tal y como estaba tras una primera instalación. Wipe cache partition: Limpia la partición de memoria caché del dispositivo. Install zip from sdcard: Nos permite instalar una ROM nueva a partir de un archivo zip dentro de la tarjeta SD. Backup and storage: Esta opción nos brinda la opción de realizar copias de seguridad completas del sistema y la función de restauración de las mismas. 17 Advanced: Alberga un submenú con opciones que utilizaremos con frecuencia. Imagen 2 o Reboot Recovery: Para instalaciones que requieren más de un flasheo, esta opción es interesante para reiniciar el teléfono de nuevo en modo Recovery. o Wipe Dalvik Cache: La caché Dalvik es una zona de memoria que la máquina virtual Dalvik utiliza para ejecutar aplicaciones. Esta memoria se va inflando y no se recupera. Con esta opción podremos borrarla para ganar espacio de almacenamiento interno. o Wipe Battery Stats: Muchas veces al realizar el flasheo de una ROM nueva es posible que la calibración de la batería no sea la correcta. Esta calibración se guarda en un fichero del sistema. Para regularla basta con utilizar esta opción. o Partition SD Card: Particionar la tarjeta SD. En un apartado posterior hablaré más en detalle sobre esta opción. PROBLEMAS DE ESPACIO DE ALMACENAMIENTO Todos los teléfonos Android contienen una memoria interna en el formato nativo de Linux que está preparada para la instalación de las aplicaciones y en la que se pueden guardar datos de usuario como archivos multimedia, documentos etc. Además, casi todos los terminales disponen de una ranura para tarjetas SD que permite ampliar el almacenamiento, pero únicamente para datos de usuario, no para aplicaciones. Los formatos de las memorias es el siguiente: Memoria interna: Formato ext2, ext3 o ext 4 según la versión de Android. Memoria externa (microSD): Formato Fat32. 18 ¿Qué ocurre? Que a pesar de ampliar la memoria externa mediante una tarjeta SD, solamente podremos instalar aplicaciones en la memoria interna ya que requieren estar en el sistema de archivos propio de Linux para poder ejecutarse. Por tanto, aunque parezca que tengamos mucha memoria gracias a una tarjeta de gran capacidad, para la instalación de aplicaciones sólo nos será de utilidad la memoria interna. El gran problema viene porque muchos móviles de gama media/baja e incluso algunos de gama alta, disponen de muy poca memoria interna debido a que son muy costosas. Esta situación de tener un terminal con poca memoria interna y una tarjeta SD de gran capacidad confunde mucho a los usuarios, que piensan que tienen gran cantidad de almacenamiento, pero en cuanto instalan unas pocas aplicaciones, se encuentran con que Android les da un aviso de “poca capacidad en disco”. La nueva gama, Nexus viendo este conflicto, ha utilizado la misma estrategia que Apple con el iPhone y ha creado sus nuevos dispositivos únicamente con memoria interna sin posibilidad de ampliación. La solución que aportó Google a este problema fue la de posibilitar a los desarrolladores la opción de que sus aplicaciones se trasladaran a la memoria externa. Sin embargo, a día de hoy, no todas se pueden portar y de las que sí tienen implementada esta función, no todo su contenido es trasladado a la tarjeta SD. Con lo cual, más tarde o más temprano, veremos el almacenamiento interno completo. Otra solución es la creación de una partición de la tarjeta SD en el formato nativo de Linux. Esto nos va a permitir instalar cualquier aplicación en la memoria externa y conseguir una ampliación “real” de la memoria interna. Este proceso no será factible si no disponemos de permisos de superusuario en el terminal (necesitaremos tener rooteado el móvil). AMPLIACIÓN DE ALMACENAMIENTO CON LINK2SD Un programa que permite la portación de las aplicaciones a una partición nativa de Linux en la tarjeta SD es Link2SD. Para poder utilizar Link2SD, es indispensable tener acceso root en el teléfono. Nuestra tarjeta SD tiene formato Fat32, el primer paso que se ha de realizar es crear una partición en la tarjeta con el mismo formato que la memoria interna (ext2, ext3 o ext4). Para ello podemos utilizar soluciones de entornos de escritorio como Gparted o, de manera mucho más sencilla, la opción Advanced - Partition SD Card dentro del menú del Recovery ClockworkMod. El tamaño de la partición deberá ser de al menos 256 megas y con SWAP 0. Así, si tenemos una tarjeta SD de 1GB, 768 MB estarán en formato Fat32 y 256 en Ext*. Una vez tenemos la SD particionada, deberemos dirigirnos al Market de Android y descargar la aplicación Link2SD. La abrimos y seguimos los pasos que nos indiquen, es posible que se requiera el reinicio del teléfono para la instalación de unos scripts necesarios para el funcionamiento del programa. Volvemos a abrirlo y nos preguntará el formato que tiene la segunda partición, ahí debemos seleccionar el formato elegido. 19 Ya estamos preparados para mover las aplicaciones a la segunda partición (ext*) de la microSD. A continuación voy a mostrar el proceso para trasladar una aplicación de la memoria interna a la segunda partición de la memoria externa. La pantalla principal de Link2SD nos muestra todas las aplicaciones instaladas, con la ruta en la que están instaladas y el tamaño que ocupan en disco. Ahora debemos escoger la aplicación que queramos portar a la memoria externa pulsando sobre ella. En este ejemplo seleccionaremos el programa Linterna. Imagen 3 Imagen 7 Si en este paso seleccionásemos la opción “Mover a la tarjeta SD”, haríamos uso del método nativo de Android y trasladaríamos las aplicaciones a la primera partición de la SD, la FAT. Recordar que con este método sólo pasamos partes de la aplicación y estaríamos haciendo uso también de la memoria interna. Así que debemos escoger la opción “Crear enlace” y se nos generaría un enlace simbólico en la memoria interna con destino la segunda partición de la tarjeta SD (la que está en el sistema de archivos nativo de Linux). 20 Imagen 8 Imagen 9 Ahora se nos presenta la opción de elegir qué partes de la aplicación queremos enlazar. La primera sería la aplicación en sí, el archivo APK (éste sería el que se trasladaría a la primera partición SD con el método nativo de Google de portar aplicaciones a la memoria externa), la segunda la caché Dalvik y la tercera las librerías que utiliza la aplicación. Seleccionamos las tres para hacer un menor uso de la memoria interna del teléfono y le damos al botón Aceptar. De esta manera ya tenemos nuestra aplicación trasladada a la segunda partición de la tarjeta SD. Como se muestra en la imagen, es en este paso en el cual hemos necesitado permisos de root para realizar la operación. 21 En la imagen 9 se muestra el resultado tras haber portado todas las aplicaciones a la tarjeta externa. Imagen 4 La leyenda En la tarjeta SD significa que la aplicación ha sido movida a la tarjeta SD mediante el método nativo de Android. Enlazado -> Tarjeta SD nos asegura que la aplicación ha sido movida a la partición ext de la tarjeta SD mediante el programa Link2SD. En la imagen 10 podemos ver la información sobre el almacenamiento que nos ofrece el programa. Como se ve, ya estamos haciendo uso de la segunda partición (ext) que hemos creado. Imagen 5 22 CONFIGURACIÓN OPTIMIZADA DE IOS Al igual que en Android alcanzábamos un acceso sin límites a las funcionalidades del terminal mediante el proceso denominado “rootear”, en iOS existe un procedimiento equivalente denominado Jailbreak. Jailbreak es básicamente el procedimiento mediante el cual conseguimos un acceso total a nuestros dispositivos saltándonos de esta manera las restricciones impuestas por defecto por Apple. Con el Jailbreak conseguimos tener privilegios de root y podemos hacer “lo que queramos”, como instalar aplicaciones de terceros, personalizar los temas que vienen por defecto y tener funcionalidades que no vienen en el software original. Seguidamente comento los beneficios de realizar el proceso de Jailbreak, así como sus riesgos, tipos y métodos para realizarlo. Por último explico el procedimiento para poder bajar de versión de sistema operativo (downgrade), ya que no en todas se puede realizar el Jailbreak. BENEFICIOS DE REALIZAR EL JAILBREAK iOS ha conseguido gracias a la labor de los programadores ser uno de los sistemas operativos más estables y eficientes del mercado. Esto ha sido en parte gracias a las restricciones que ha impuesto tanto a los usuarios como a las aplicaciones instaladas, pero como todo, tienes sus pros y sus contras. Muchos usuarios se quejan de la poca personalización que se puede alcanzar en iOS. Gracias al Jailbreak conseguiremos: Instalar aplicaciones de terceros. Modificaciones del sistema operativo (Tweaks). Modificaciones en la interfaz de usuario. RIESGOS DEL JAILBREAK A pesar de lo que mucha gente cree, con el Jailbreak no se pierde la garantía del dispositivo, eso sí, antes de llevar al servicio técnico el terminal en caso de avería, deberá ser restaurado mediante iTunes para borrar todo rastro. Legalmente la compañía de Cupertino podrá anular la garantía del terminal si detecta que se le ha realizado el Jailbreak, pero con una simple restauración, como he comentado antes, el proceso será indetectable. 23 Además podremos utilizar el resto de servicios del dispositivo (como la tienda oficial) de manera totalmente normal, sin tener que preocuparnos por nada. No va a saltar ningún tipo de alarma ni va a sufrir ningún tipo de desperfecto el teléfono. Un aspecto a tener en cuenta es la seguridad, como ya hemos dicho, uno de los puntos fuertes de iOS. Las aplicaciones que se instalan mediante la AppStore pasan un severo filtro para evitar que pongan en peligro el dispositivo. Las que son instaladas desde otros repositorios, como los que ofrece Cydia (http://cydia.saurik.com/) u otro sistema, obvian este control de seguridad y son más susceptibles de tener código malicioso. XXX aquí te había cambiado la frase. Está en el papelOtro matiz que podrá será susceptible de cambio es la eficiencia, al ser iOS un sistema tan cerrado, garantiza una gran estabilidad y optimización de recursos. Al instalar modificaciones y temas visuales nuevos, es más que probable que se vea mermado el rendimiento. Eso sí, si usamos únicamente las modificaciones necesarias y que sean de confianza, lo más seguro es que no notemos ninguna diferencia. “BRICKEAR” EL IPHONE Un término muy popular y al que mucha gente teme a la hora de intentar el Jailbreak, es dejar el terminal “Brickeado” (literalmente, “como un ladrillo”), es decir, roto, imposible de reparar. Por mi experiencia, esta situación es muy poco frecuente, no conozco a nadie que le haya sucedido. Los procesos para conseguir el Jailbreak están muy evolucionados, quizá en sus comienzos pudiera suceder pero hoy en día no. Siempre se va a poder volver a la configuración inicial. ASPECTOS LEGALES En Julio de 2010 el proceso de Jailbreak fue considerado por el gobierno de los Estados Unidos de América como legal. De acuerdo con la Fundación de Fronteras Electrónicas (EFF) “La ingeniería inversa es un uso justo cuando se trata de fomentar la interoperabilidad con el software creado de manera independiente”. Así que legalmente no hay ningún impedimento para realizar Jailbreak. Eso sí, Apple no es muy favorable con que se realice este proceso, así que si en algún momento detecta que se ha realizado el proceso de Jailbreak en el dispositivo , es muy posible que anule la garantía del mismo. CYDIA Entre los repositorios no oficiales de Apps para iOS, Cydia es el más popular. De hecho, es muy complicado hablar a día de hoy de Jailbreak sin hablar de Cydia. Cydia es una especie de “AppStore” alternativo para terminales con Jailbreak, que permite descargar e instalar paquetes, programas y modificaciones (tweaks) fuera de la tienda oficial. Dispone de una interfaz gráfica (GUI) para el gestor de paquetes apt de Debian que funciona a través de repositorios. 24 CYDIA STORE Al igual que en la AppStore, en Cydia Store hay aplicaciones gratis y de pago. Los creadores de software también obtienen ganancias en Cydia, siendo es el mismo porcentaje que en la tienda oficial de Apple, el 70% del dinero recaudado. TIPOS DE JAILBREAK Como se ha comentado anteriormente, según la vulnerabilidad descubierta en el sistema operativo iOS, el Jailbreak conseguido en el teléfono será diferente: Tethered, Untethered o Semitethered. Se distinguen básicamente por la forma en que se reinicia el terminal JAILBREAK TETHERED Es el más tedioso, ya que cada vez que se reinicia el móvil (sea por agotamiento de la batería o por apagado voluntario) es necesario conectarlo por cable al equipo PC/MAC para que pueda arrancar. JAILBREAK UNTETHERED Es el Jailbreak óptimo ya que no requiere ningún tipo de conexión al ordenador durante la fase de reinicio. JAILBREAK SEMI-TETHERED Es una modalidad de Jailbreak que está a caballo entre Tethered y Untethered, es posible arrancar el móvil sin conectarlo al PC/MAC pero con funcionalidades limitadas: Hablar por teléfono Enviar mensajes No se puede utilizar el navegador Safari pero sí otro instalado a través de la AppStore. No se puede utilizar la aplicación Mail nativa pero sí otra instalada a través de la AppStore. Quedarán inutilizados los Tweaks (Modificaciones del sistema operativo) y las aplicaciones instaladas fuera de la AppStore. MÉTODOS PARA LOGRAR EL JAILBREAK El Jailbreak se logra gracias a las vulnerabilidades existentes en el sistema operativo del iPhone. Hay muchos hackers tratando de encontrar agujeros en iOS con el objetivo de poder conseguir privilegios de administrador. Por ejemplo, un grupo de hackers llamado “Evad3rs”, consiguió realizar un Jailbreak llamado “Evasi0n“conseguido para la última versión de iOS, la 6, mediante la utilización de un “exploit” 25 (programa que aprovecha una vulnerabilidad del sistema para conseguir un comportamiento no deseado) relacionado con la zona horaria. Cómo funciona EvasiOn comienza utilizando un exploit en el sistema de copia de seguridad en iOS con iTunes, un demonio denominado “MobileBackup”. Lo hace mediante un programa llamado “libmobiledevice” de PC/MAC que se comunica con dispositivos iOS mediante el protocolo iTunes. Evasi0n restaura una copia de seguridad que contiene los ficheros necesarios para el Jailbreak. “MobileBackup” no puede guardar archivos fuera de la carpeta /var/Mobile/Media, así que lo que hace evasi0n es crear un enlace simbólico en esa carpeta llamado .haxx que apunta a /var/Media. MobileBackup es ahora capaz de escribir archivos en /var/Media gracias al enlace simbólico .haxx. Los ficheros copiados forman la aplicación que se lanzará en el proceso de Jailbreak. Utilizando el mismo procedimiento de enlace simbólico, EvasiOn consigue también acceso a un archivo de zona horaria, que a su vez enlaza a “launchd”, un demonio que tiene privilegios de root. Ya se ha logrado explotar el acceso a launchd y mediante cambio de permisos en el archivo de zona horaria se consigue acceso a él mediante cualquier usuario. Ahora se crea un socket que maneja la comunicación entre launchd y otros procesos, accesible por todas las aplicaciones del sistema. Ahora una aplicación albergada en los ficheros de la restauración del primer paso, utilizando el socket creado, hace que la partición que es solo-lectura pase a ser de escritura. Una vez conseguido que la partición sea de escritura, mediante el uso nuevamente de MobileBackup, guardamos un conjunto de archivos entre los que se encuentra el fichero “launchd.conf”, contenedor de las instrucciones del exploit. Este archivo se ejecuta cada vez que arranca el teléfono, haciendo el Jailbreak persistente (Untethered). Uno de los comandos de launchd.conf es el responsable de evitar el “AppleMobileFileIntegrity”, un verificador de firma de código, que se carga mediante una librería dinámica. Lo que se hace es sustituir la función de verificación por otra que responde siempre true. Uno de los obstáculos de Evasi0n es ASLR (Asignación arbitraria de espacios de memoria), que guarda de manera arbitraria datos en la memoria, haciendo difícil su predicción. Sin embargo, en algunos procesadores ARM es todavía fácil de localizar. Utilizando esto, Evasi0n puede mapear toda la memoria. Ahora, mediante el uso de un exploit en la interfaz USB de iOS, se consigue finalmente llegar al kernel del dispositivo. Limitaciones iOS es un sistema “cerrado” en el cual las modificaciones que se pueden realizar son muy reducidas, el fondo de pantalla, la música que tienes cuando te llaman y mandan mensajes y 26 poco más. Los iconos del escritorio y su distribución dentro del mismo son fijos, los temas visuales dentro de los menús también. Las limitaciones encontradas en iOS son entre otras: Sistema “cerrado” en el cual las aplicaciones se instalan únicamente a través de la tienda oficial AppStore Las aplicaciones no tienen un acceso completo al sistema. Imposibilidad para la personalización de aspectos visuales dentro del escritorio (SpringBoard) o la pantalla de bloqueo (LockScreen) a excepción del fondo. Modificación de los menús A continuación voy a describir los métodos para poder realizar el Jailbreak mediante diferentes herramientas. Para todas ellas es necesario tener instalado iTunes: JAILBREAK SEMI-UNTETHERED EN IOS 6.1.3 CON REDSNOW RedSnow es una herramienta que permite, entre otras cosas, realizar el Jailbreak en los dispositivos de Apple. Este apartado sirve para los iPhone 4 y 3GS con la versión de iOS 6.1.3, y únicamente podremos optar a realizar el Jailbreak semi-untethered (es decir, que cada vez que se reinicia el terminal es necesario repetir los últimos pasos). Primero nos descargamos el programa RedSnow (versión 0.9.15b3) de la página web http://www.redsn0w.us/2010/03/download-direct-links-jailbreak-guides.html para la plataforma en la que se esté trabajando. En Windows Vista y superiores se le debe dar permisos de administración. Imagen 6 Conectamos el dispositivo al ordenador mediante el cable USB. 27 Pinchamos en Extras, y posteriormente en Select IPSW, aquí debemos seleccionar el archivo firmware con el que vamos a trabajar. A pesar de realizar un Jailbreak sobre la versión 6.1.3, RedSnow trabaja con la versión 6.0, así que nos descargamos la versión 6.0 para nuestro dispositivo desde esta página http://www.felixbruns.de/iPod/firmware/ y la seleccionamos. Imagen 7 Una vez elegido el firmware 6.0 le damos a Back y pinchamos, dentro de la página principal, en Jailbreak. Nos aseguramos de que la opción Install Cydia esté activada y Next. Imagen 8 28 Ahora, con el móvil apagado (conectado al ordenador) debemos seguir las indicaciones que se nos muestran por pantalla para conseguir entrar en modo DFU (Device Firmware Update, un modo de recuperación del iPhone para poder modificar el firmware). Si todo ha ido correcto, aparecerá una barra de progreso dentro de la ventana RedSnow y posteriormente un montón de letras sobre fondo negro en iPhone al estilo “Matrix”, no hay que preocuparse, es totalmente normal. También saldrá una piña andando en skate y alguna cosa más, nada de qué alarmarse. Esperamos a que se reinicie. Ahora el teléfono tiene el Jailbreak realizado pero no está listo para ser usado porque es un Jailbreak semi-tethered, así que hay que hacer los siguientes pasos, ahora y siempre que se quiera reiniciar el móvil. 1- Con el teléfono conectado al ordenador, abrimos RedSnow, pinchamos en Extras Select IPSW y escogemos el firmware 6.0 descargado. 2- Pinchamos en Just Boot y seguimos las instrucciones (el teléfono deberá estar apagado antes de proceder con las instrucciones) Durante el proceso de inicio, en vez del logo de Apple, la popular manzana mordida, aparecerá una piña mordida =) ¡Ya está! Ahora ya tenemos Cydia instalado y el terminal con el Jailbreak funcional. JAILBREAK UNTETHERED EN IOS CON LIMERA1N Gracias a este proceso vamos a lograr un Jailbreak untethered (Recordemos que es el tipo de Jailbreak en el que no ocurre nada si el teléfono se reinicia, no perderemos el Jailbreak) y nos va a ser mucho más sencillo que el anterior. Se utiliza la herramienta Limera1n y alcanza un Jailbreak untethered. Sirve para los siguientes dispositivos: IPhone 3GS, iPhone 4, iPhone 4S, iPhone 5, Ipod Touch 4, iPod Touch 5, iPad 2, iPad 3, iPad 4, iPad Mini. Y para las siguientes versiones de sistemas operativos: iOS 6, iOS 6.0.1, iOS 6.0.2, iOS 6.1, iOS 6.1.2 29 Descargamos el programa Limera1n desde la siguiente página web http://limera1n.com/ según el sistema operativo. Una vez bajado, descomprimimos y abrimos el programa (En Windows Vista y superior con privilegios de administrador y en Mac pulsar ctrl+click) Imagen 9 Conectamos el iPhone y pulsamos en make it ra1n. El teléfono se reiniciará varias veces. Es posible que haya un momento que el programa Limera1n muestre el mensaje “To continue, please unlock”. De ser así, nos dirigimos al terminal, desbloqueamos y pinchamos en un icono dentro del springboard (escritorio) llamado Jailbreak. Todo esto sin desconectar el teléfono del ordenador. Después de unos cuantos reinicios más, el proceso de Jailbreak se habrá realizado con éxito y Cydia estará instalado. Si se produjese algún tipo de error, se deberán repetir los pasos desde el principio. DOWNGRADE DEL SISTEMA IOS Apple tiene muy controladas las versiones del software de sus dispositivos, de manera que los usuarios sólo tienen dos opciones: reinstalar la versión que tienen en ese momento o actualizar a la última versión de iOS lanzada. ¿Cuál es el procedimiento que realiza Apple para limitar la instalación de versiones de iOS? Cada uno de los terminales de la compañía de la manzana dispone de un identificador denominado ECID (Exclusive Chip ID). Este identificador es único para cada dispositivo. Cada vez que intentamos actualizar o restaurar nuestro terminal la compañía de Cupertino genera un certificado o firma a partir del ECID y otros datos (entre los que se encuentra la versión de sistema operativo), llamado SHSH (que será único para cada dispositivo y versión de sistema operativo). Cuando utilizamos iTunes para restaurar o actualizar nuestro sistema, iTunes envía el ECID a los servidores de Apple para que nos envíen el SHSH que nos valida o no la instalación. De esta forma únicamente podremos instalarnos la versión instalada actualmente en el dispositivo o la última versión oficial. Además es una medida para evitar que se pueda hacer Jailbreak en nuestro iPhone, ya que necesitamos el certificado para realizar la instalación. Si por alguna razón hemos actualizado nuestro móvil y quisiésemos regresar a una versión anterior (realizar downgrade), no sería posible con las opciones que nos propone Apple. 30 Conocido lo anterior, una manera para realizar downgrade consiste en hacer creer al programa iTunes que Apple genera firmas de versiones anteriores. Para ello basta con guardar en los servidores de Cydia los archivos SHSH que han sido generados previamente por Apple. Destacar que sólo se va a poder hacer downgrade si previamente se han guardado los SHSH propios del terminal y únicamente a las versiones de las que se tenga copia del SHSH. Es decir, si tengo un SHSH de la versión 5.0 de iOS pero no de la versión 5.1, únicamente podré volver a la versión 5.0. El engaño a iTunes se realiza haciéndole creer que está contactando con los servidores de Apple mediante una modificación del archivo hosts (archivo del sistema que resuelve nombres de dominio en direcciones IP) del equipo donde esté instalado iTunes. En este fichero hay que crear una entrada con el nombre del servidor de Apple y, a continuación la resolución con la IP de los servidores de Cydia. CÓMO GUARDAR LOS ARCHIVOS SHSH Como he comentado anteriormente, los SHSH son fundamentales para poder realizar el downgrade en el teléfono. Para los usuarios que tengan el Jailbreak ya hecho, es posible que automáticamente Cydia los guarde en sus servidores. A veces esto no es así, con lo cual no está de más que nosotros hagamos una copia en local de los SHSH. Para realizar un backup de los SHSH se pueden utilizar entre otras, estas herramientas: TinyUmbrella (http://thefirmwareumbrella.blogspot.com.es/) y iFaith (http://ih8sn0w.com/) RESTRICCIONES Para los dispositivos antiguos, iPhone 2G, iPhone 3G, iPhone 4, iPad 1G, iPad Touch, iPod Touch 3G e iPod Touch 4G, basta con tener los SHSH guardados para realizar el downgrade a cualquier versión del sistema operativo. Los nuevos dispositivos, iPad 2, iPad 3, iPhone 4S, iPhone 5 iPod Touch 5G tienen más restricciones, por tanto, de momento es más complicado realizar el downgrade en la versión 6 de iOS, aunque en la 5 es posible. GUARDAR SHSH CON TINYUMBRELLA TinyUmbrella es una aplicación que permite guardar los archivos SHSH de manera local, ya sea descargándolos desde los servidores de Cydia (los que se hayan ido guardando periódicamente) o de los servidores de Apple (los que firma en la actualidad). Para realizar el proceso, primero deberemos descargar el programa TinyUmbrella ejecutarlo (en Windows Vista y superior hay que abrirlo con permisos de administración). A continuación conectamos el teléfono al ordenador y, como podemos apreciar en la imagen, nos deberá aparecer en la barra de la izquierda un nuevo ítem con el nombre de nuestro teléfono, pinchamos en él. 31 Imagen 10 Ahora vamos a la pestaña Advanced, dentro de ella encontramos las siguientes opciones: Save ALL Available SHSH: Deberá estar marcado, para guardar todos los SHSH disponibles, en general Apple sólo firma un SHSH, pero hay ocasiones en las que puede firmar varios. Request SHSH From Cydia: NO debe estar marcado, ya que si lo estuviese descargaría los SHSH de los servidores de Cydia y es posible que no guarde los actuales. El resto de opciones no son importantes, las dejamos como están. Imagen 11 32 Pulsamos sobre el botón SAVE SHSH y ya está, si queremos ver el progreso, basta con ir a la pestaña Log. Imagen 12 De esta forma tendremos guardados ya los ficheros SHSH que está firmando Apple en la actualidad para nuestro dispositivo. Los ficheros generados tendrán la extensión .shsh y su nombre se compondrá el ECID, el tipo de móvil y la versión de sistema operativo. REALIZAR DOWNGRADE CON TINYUMBRELLA TinyUmbrella, además de guardar los SHSH, también es capaz de emular el servidor de Apple que provee a iTunes de los certificados SHSH. Para este apartado es necesario tener el programa TinyUmbrella, haber bajado previamente los SHSH y disponer del firmware que queremos instalar en nuestro dispositivo. Abrimos TinyUmbrella, vamos a la pestaña Log y pulsamos el botón Start TSS Server. Lo que ha hecho internamente el programa es crear una entrada dentro del archivo hosts del sistema con el nombre de dominio “gs.apple.com” y con la dirección IP “127.0.0.1”. Si está funcionando todo bien, debe aparecernos el siguiente mensaje: 33 Imagen 13 Ahora abrimos iTunes y nos vamos a la pantalla principal de monitorización del iPhone, pulsamos sobre restaurar (con la tecla Shift en Windows o la tecla Alt en Mac) y seleccionamos el firmware con la versión a la que queremos ir. Imagen 14 Ahora iTunes buscará los SHSH en el nombre de dominio “gs.apple.com”, pero le redirigirá hacia localhost y cogerá los certificados que tiene albergados TinyUmbrella. 34 REALIZAR DOWNGRADE CON SN0WBREEZE A continuación vamos a ver una forma alternativa de realizar downgrade en los dispositivos de Apple mediante Sn0wbreeze, una herramienta que permite la creación de firmwares modificados. En el procedimiento anterior de downgrade, “engañábamos” a iTunes para que buscara los archivos SHSH en los servidores de Cydia o en local, en lugar de los servidores de Apple. Con este método lo que vamos a hacer es un firmware propio que contenga el firmware original pero ya firmado con el certificado SHSH. A este tipo de firmware ya firmado se le llama “Stitched firmware”. Con este método, iTunes obviará el paso de petición de SHSH a sus servidores, puesto que el firmware ya viene firmado. Para la realización de este apartado necesitaremos el programa Sn0wbreeze (http://ih8sn0w.com/), los SHSH guardados y el firmware de la versión a la que queremos hacer downgrade descargado. Abrimos Sn0wbreeze con permisos de administrador. Nos mostrará un mensaje de aviso de que el programa no es de tipo comercial y de que el autor no se hace responsable de los posibles daños que se causen en el terminal. Pinchamos con tranquilidad en OK, seguido pinchamos en la flecha azul ubicada en la parte inferior derecha. Imagen 15 35 A continuación pulsamos sobre el botón azul que pone Browse for an IPSW y vamos a la ruta en la que se encuentra el firmware descargado. Imagen 16 Si el programa ha reconocido el firmware nos mostrará por pantalla las especificaciones del mismo y el mensaje verified. Imagen 17 Recordemos que lo que está haciendo ahora el programa es crear un firmware modificado ya firmado por el SHSH, de esta manera evitamos que posteriormente iTunes, al hacer la restauración, contacte con los servidores de Apple. 36 Proseguimos pulsando sobre la opción iFaith mode y nos saldrá un menú emergente pidiéndonos seleccionar los SHSH, los buscamos en nuestro equipo y aceptamos. Imagen 18 Ahora pinchamos en Build IPSW y seguidamente sobre la flecha azul ubicada en la parte inferior derecha. Imagen 19 Es posible que el proceso se demore unos cuantos minutos hasta que concluya la creación el archivo IPSW. Una vez generado el fichero IPSW, es momento de utilizar iREB, una herramienta que pone nuestro terminal en un estado “jailbreakeable”, de tal forma que sea posible la instalación de firmwares personalizados desde iTunes. Volvemos a abrir Sn0wbreeze y pinchamos en el menú superior en la opción iREB. 37 A continuación nos pedirá una serie de pasos para poner el terminal en modo DFU (recordar que es un estado similar al modo Recovery, pero con un abanico más amplio de posibilidades), los seguimos y dejamos que actúe el programa. Imagen 20 Una vez hecho esto, ya sólo nos queda hacer los últimos pasos que utilizamos en el método de Downgrade con TinyUmbrella. Abrimos iTunes y nos vamos a la pantalla principal de monitorización del iPhone, pulsamos sobre restaurar (con la tecla Shift en Windows o la tecla Alt en Mac) y seleccionamos el firmware personalizado que hemos creado. Si todo ha ido bien en unos minutos deberemos haber conseguido realizar el Downgrade. LIBERAR IPHONE (UNLOCK) Muchas operadoras telefónicas subvencionan o realizan descuentos en terminales a cambio de permanecer con ellos durante algún tiempo. Para asegurarse de esto, realizan un bloqueo en los dispositivos para que únicamente puedan ser utilizados con tarjetas SIM de las propias compañías. Hay dos formas lícitas de conseguir la liberación de un terminal: Una vez concluida la permanencia, requerir a la compañía telefónica la liberación del teléfono. Existen empresas que se dedican a la liberación de terminales, pero hay que abonar una cantidad de dinero por el trámite. 38 Otra forma de liberar el móvil es mediante Jailbreak. No hay que confundir los términos, no son lo mismo, tener el teléfono con el Jailbreak realizado no significa que esté libre para utilizar con cualquier compañía. Para liberar el terminal gracias al Jailbreak es necesario engañar a la parte del teléfono dedicada a las comunicaciones (baseband), mediante la instalación de parches en el sistema operativo y unos adaptadores de tarjetas SIM. 39 40 CREACIÓN DE NUESTRA PROPIA VERSIÓN DE ANDROID Para la instalación de la aplicación de cálculo científico dentro del terminal, es necesario realizar una serie de modificaciones al sistema operativo. Hay dos formas de hacerlo, efectuar dichas transformaciones dentro de una versión ya instalada en un teléfono Android o creando una distribución personalizada que contenga ya todos estos cambios. A continuación voy a explicar una serie de conceptos que he creído útiles tener claros, como son las partes de las que se compone un firmware, las particiones que se generan en el sistema de archivos Android y posteriormente describiré el proceso la producción de la ROM modificada. CONCEPTOS ÚTILES ANTES DE EMPEZAR Antes de ponernos manos a la obra con la creación de nuestra ROM modificada es conveniente tener claros algunos conceptos acerca de Android. PARTES DE UN FIRMWARE Un firmware se compone de diferentes partes: PDA: Es el propio Android en sí, dentro de la cual están los programas y sus configuraciones. PHONE: Es el fichero firmware del módem, que además gestiona el Wifi, el bluetooth y las conexiones 2G/3G CSC (Consumer Software Customization): Incluye la configuración de la conexión de datos a las redes de un país o zona determinada, así como configuración y datos de aplicaciones de operadoras. PARTICIONES EN EL SISTEMA ANDROID Android hace uso de una serie de particiones para organizar los ficheros y carpetas del dispositivo. Cada una de ellas tiene una función distinta en el dispositivo. Por un lado tenemos las particiones estándar de la memoria interna: /boot /system /Recovery /data /cache /misc Y por otro lado las siguientes particiones pertenecientes a la tarjeta SD: 41 /sdcard /sd-ext /BOOT Esta partición se encarga de gestionar el arranque del dispositivo. En su interior se encuentran el Bootloader y el kernel. Sin esta partición sencillamente el teléfono no sería capaz de iniciarse. Es importantísimo saber que si, por alguna razón, formateamos esta partición desde el Recovery, no debemos, bajo ningún concepto, reiniciar el dispositivo antes de instalar una nueva, ya que no volvería a iniciarse. /SYSTEM Esta partición contiene el sistema operativo en sí, a excepción del kernel, del Bootloader, y de las aplicaciones que vienen por defecto en el terminal. De borrarse el contenido de esta partición se eliminaría completamente Android del dispositivo, pero siempre se podrá acceder al Recovery e instalar una nueva ROM. /RECOVERY Como he comentado en apartados anteriores, esta partición contiene un arranque alternativo a /boot. Si se arranca desde aquí (mediante una combinación de teclas durante el encendido del dispositivo) tendremos acceso a ciertas tareas avanzadas, como borrar los datos del terminal, instalar ROMs nuevas, actualizar, etc. /DATA Esta partición albergaría los datos de usuario, todo lo que el usuario ha creado o descargado. A continuación se muestra una lista de posibles datos que pertenecen a esta partición: Aplicaciones y widgets instalados. Contactos y toda la información asociada. Información de las llamadas Mensajes Emails Calendario Niveles de juegos como Angry Birds… El borrado de esta partición dejaría el teléfono tal y como vino de fábrica. 42 /CACHE Esta partición guarda datos a los que el usuario accede de manera frecuente para que la carga de los mismos sea mucho más rápida en el momento de ser solicitada. Limpiar esta partición no afectará en absoluto a los datos personales ni al correcto funcionamiento del teléfono, pero mitigará el rendimiento del dispositivo. De todos modos, una vez limpia, con el uso se volverá a llenar con los datos que el sistema operativo considere más oportunos. /MISC Contiene información adicional acerca de la configuración del sistema. Entre esta información se encuentra el CID (identificador del operador), configuración USB y ciertos ajustes hardware. Es una partición importante que si se pierde o se modifica de manera errónea puede hacer que algunas características del teléfono dejen de funcionar o no lo hagan correctamente. /SDCARD Esta partición pertenece a la tarjeta SD. Aquí es donde se guardan los datos que se quiera almacenar, como archivos multimedia, documentos, etc. Además, muchas aplicaciones instaladas guardan aquí sus datos y configuraciones con el objetivo de liberar el espacio de la memoria interna. Hay dispositivos que contienen una tarjeta SD interna y otra externa, como ocurre con el teléfono con el que estoy trabajando, el Samsung Galaxy S. En este caso, la partición /sdcard se referirá siempre a la SD interna. Para la SD externa se utilizará la partición /sdcard/sd. /SD-EXT Aunque no es una partición estándar, se ha convertido en muy popular debido a los problemas de almacenamiento interno existentes en los dispositivos Android. Se trata de una partición adicional creada en la tarjeta SD que actúa como una extensión de la partición /data. Se puede ampliar información en el apartado “Ampliación de almacenamiento con Link2SD”. Borrar esta partición es similar a borrar la partición /data. SIGNIFICADO DE LOS CÓDIGOS PDA Y CSC AL DESCARGARNOS EL FIRMWARE Una de las dudas que me surgió en el momento de descargar la versión de Firmware de mi teléfono era qué significaban los códigos de PDA, PHONE y CSC. 43 Imagen 21 Por ejemplo, al descargarme la ROM oficial de Samsung para Vodafone, el archivo obtenido es nombrado de la siguiente manera: I9000XWLK9_I9000GYOGLK4_YOG.zip El primer apartado es el código de la PDA I9000 (Modelo) XW (Región) L (Año) K (Mes) 9 (Revisión) El segundo apartado es el código del CSC I9000 (Modelo) YOG (Operadora) L (Año) K (Mes) 4 (Revisión) 44 CREACIÓN DE LA ROM Una vez descritos los conceptos principales, me dispongo a explicar el proceso de creación de la ROM personalizada. Comenzaré listando los prerrequisitos necesarios, tanto en el terminal como en el equipo de sobremesa; continuaré describiendo las funciones del programa que nos va a permitir crear la ROM, Android Kitchen y terminaré describiendo el proceso de “cocinar” la ROM. PRERREQUISITOS Para la creación de nuestra versión de Android modificada con este método, será necesario disponer de lo siguiente: Tener un dispositivo rooteado con un Recovery modificado ClockworkMod. Para las pruebas he utilizado un Samsung Galaxy GT-I9000. Descargar el programa Android Kitchen desde el siguiente https://github.com/dsixda/Android-Kitchen/ en el PC de trabajo. Tener instalado el JDK de la página de Oracle en el PC de trabajo. Una ROM base a partir de la cual realizaremos todas las modificaciones que creamos oportunas. Podemos utilizar una oficial o una personalizada. El proceso entre ambas es algo diferente, partir de una oficial nos asegura que tendremos control sobre los cambios realizados desde el principio. En la página web http://www.sammobile.com/ se pueden encontrar firmwares de fábrica de la compañía Samsung. repositorio Para la realización de los siguientes pasos he utilizado un sistema operativo Linux, en concreto una distribución Ubuntu. Hay que tener cuidado con los pasos que se realizan a continuación, ya que de hacerse mal, al intentar realizar un flasheo al móvil de la ROM modificada, es probable que lo dejemos inutilizable. DESCRIPCIÓN DE ANDROID KITCHEN A continuación voy a listar la configuración de la aplicación Android Kitchen, así como la descripción de sus diferentes funcionalidades. Una vez descargado el programa Android Kitchen, lo descomprimimos. Dentro de la carpeta obtenida tendremos un directorio llamado original_update, en el cual deberemos introducir el fichero firmware que hemos descargado y sobre el que trabajaremos. Para el trabajo me he basado en una versión de fábrica del teléfono Samsung Galaxy S GT-I9000, con la versión 2.3.6 de Android y libre de operadora (http://www.sammobile.com/firmwares/1/?model=GTI9000&pcode=FOP#firmware). Una vez hecho esto, vamos a una terminal en el equipo de sobremesa, accedemos al directorio obtenido tras descomprimir Android Kitchen y ejecutamos el programa mediante: 45 $ ./menu Imagen 22 Una vez ejecutado, nos encontramos con el menú de la imagen superior. A continuación explico qué función tiene cada una de las opciones: 1. Set up working folder from ROM: Pulsando esta opción seleccionaremos el Firmware base que queremos modificar. A continuación se creará una carpeta de trabajo con el archivo Firmware desempaquetado y sobre el que trabajaremos. 2. Add Root permissions: Añade la posibilidad de ser superusuario. 3. Add BusyBox: Busybox es el conjunto habitual de herramientas Linux portadas al entorno Android. Con esta opción las agregaremos a nuestro Firmware. 4. Disable boot screen sounds: Elimina el sonido que aparece al iniciar el móvil. 5. Zipalign all *apk…: Herramienta que optimiza los paquetes .apk adaptándolos a los requisitos óptimos de Android. 6. Change wipe status of ROM: Establece si los Wipes (borrados) del sistema los hace la ROM o los hace el propio usuario. 7. Change name of the ROM: Opción para cambiar el nombre de compilación de la ROM. 8. Show working folder information: Nos muestra información acerca de la ROM y una lista con las características que le hemos añadido. 0. Advanced Options: 46 Imagen 23 11. De-odex files in your ROM: Las ROM´s oficiales incorporan las aplicaciones divididas en un archivo .apk y uno .odex. Con esto se consigue acelerar el arranque del dispositivo la primera vez que se inicia. Sin embargo, en nuestro caso, que lo que queremos es modificarlos, nos vendrá mejor que en vez de estar divididos estén juntos para poder acceder mejor al contenido. Esta opción realiza exactamente eso, encapsular en un fichero ambos archivos. La única pega es que la primera vez que se inicie la ROM, costará algo más de tiempo. 12. Tools for boot image: Nos permite desempaquetar el kernel y su posterior empaquetado para poder realizar modificaciones en él. 13. Add /data/app functionality: Posibilita la inclusión de aplicaciones firmadas de sistema. 14. Add /etc/init.d scripts…: Esta opción añade soporte para el directorio /etc/init.d, su utilidad es ejecutar los scripts que se encuentren en esa carpeta al inicio del móvil. 15. Unpack data.img: Desempaqueta el archivo contenedor de los datos de usuario. 16. Sign APK or ZIP file: Realiza el proceso de firma a una aplicación APK o a un archivo de firmware ZIP. 17. Convert: Convierte el script de de instalación del formato update-script a updater-script. 18. Plugins scripts: Posibilita la instalación de plugins. 0. Legacy Options: De estas opciones la única que nos va a interesar es la 27 47 Imagen 24 27. Add custom boot animation…: Nos habilita la posibilidad de crear una animación de inicio. Una vez explicado todo, en el menú principal seleccionamos la opción número 1. Como he comentado anteriormente, lo que hacemos con esta opción será escoger el firmware base que vamos a modificar y la creación de un directorio de trabajo con el firmware desempaquetado para su personalización. Imagen 25 Se nos muestra por pantalla las diferentes ROMs base disponibles, en este caso al sólo tener una, escogemos la opción número 1. 48 Imagen 26 El programa nos dice que de manera predeterminada el directorio de trabajo se llamará WORKING_070813_000836, si deseamos modificarlo, escogemos la opción n, si no, la y. Imagen 27 Ahora nos pregunta si queremos que el programa extraiga el CSC, que es la configuración propia de la operadora para la que estamos creando el firmware. Le damos a la opción yes (y) para poder personalizarla. 49 Imagen 28 Por último nos dice si queremos ver una pantalla resumen acerca del estado del firmware, le damos que sí y se nos muestra la pantalla que veis en la imagen superior. Como podemos observar nos indica las características del firmware y vemos que la mayoría de las opciones están puestas en NO. Eso se debe a que es una versión de firmware oficial y no tiene ninguna modificación propia de ROMs no oficiales. Veremos como al final del proceso, la mayoría de las opciones pasan a un estado YES. INSTALACIÓN DE LA APLICACIÓN TRIQCT EN EL FIRMWARE Nos dirigimos al directorio de instalación de Android Kitchen, el cual albergará la carpeta de trabajo llamada WORKING_070813_000836 (contenedor de todo el sistema de archivos de nuestra versión de Android). Dentro de esta última vamos a data/app (El directorio estándar de instalación de las aplicaciones de usuario en Android es /data/app) y creamos una carpeta llamada Triqct. Ya sólo nos falta meter en la carpeta Triqct el binario obtenido en el apartado Portación de aplicación de cálculo científico a un entorno móvil. Durante el flasheo del móvil automáticamente se instalará en el dispositivo nuestra aplicación. PERSONALIZACIÓN DEL SISTEMA OPERATIVO Tras tener seleccionado el firmware que vamos a utilizar como base, haber creado el directorio de trabaja e introducida la aplicación Triqct, es momento de configurar el sistema operativo con las funcionalidades que necesitamos. A continuación voy a listar de manera resumida las opciones que se han de seguir: Opción 2 --- Opción c: Rootea el firmware. Opción 3 --- y (yes): Añade el conjunto de utilides Busybox (comandos típicos de un entorno Linux). 50 Opción 0 --- Opción 13 --- y (yes): Permite actualizar y desinstalar aplicaciones del sistema con facilidad. Opción 00 --- Opción 27: Crea una carpeta en /path/local en donde podemos colocar una animación de inicio de Android. Opción 0 --- Opción 11: Voy a detenerme en esta opción ya que es importante que en el menú que nos sale (Imagen 34) tengamos puesta la versión del API que corresponde con nuestra versión de Android. Para ello pulsamos la opción v y elegimos la opción adecuada. A continuación la opción b para juntar los archivos .apk y los archivos .odex en uno solo. Imagen 29 Perfecto, una vez hemos realizado los pasos descritos anteriormente, en la pantalla principal escogemos la opción 8 para ver el estado de nuestra personalización de firmware y cómo la mayoría de las opciones han pasado de estado NO, a estado YES. Imagen 30 51 CREACIÓN DE LA IMAGEN DEL SISTEMA OPERATIVO (ROM) Tras haber configurado el sistema, es momento de generar el archivo imagen que contendrá el sistema operativo modificado. Para ello nos dirigimos a la pantalla principal de Android Kitchen y seleccionamos la opción 99 Build ROM from working folder. Imagen 31 La imagen 31 nos muestra el contenido del archivo ROM, donde se puede observar la estructura de archivos del sistema Android. CREAR ANIMACIÓN DE INICIO EN ANDROID La animación de inicio o bootanimation es la secuencia de imágenes que aparece cada vez que se carga el sistema operativo Android, al igual que en el arranque de Windows o Mac OS, donde nos aparecen sus respectivos logos en movimiento. A continuación voy a explicar los pasos para poder modificar esta animación y poner una personalizada. El bootanimation se construye bajo un archivo ZIP, ubicado dentro de la carpeta data/local de nuestra ROM cocinada. Dentro del archivo se alojan una o más carpetas con el nombre part0, part1, part2, etc. y un fichero de texto llamado desc.txt. Imagen 32 52 desc.txt: Encargado de decirle al sistema el tamaño de las imágenes, el orden que debe seguir, la velocidad de transición, si debe seguir un bucle y si debe hacer pausa. Su estructura es la siguiente 480 800 15 p 1 0 part0 p 0 0 part1 La resolución de la animación (ancho por largo), en este caso he puesto la resolución del terminal con la que estoy trabajando. El número de frames por segundo del bootanimation. Entre 15 y 30 es una buena medida. Indica que esa línea es parte de la animación. El número de veces que queremos que se repita esa sección (0 es infinito). La pausa en segundo que se realizará antes de empezar el siguiente bucle o pasar a la siguiente línea. El nombre de los directorios que albergan las imágenes. Carpetas partX: Las imágenes que contienen éstas carpetas deberán estar en formato PNG sin entrelazar. Se pueden nombrar como se quiera, pero el orden en el que se mostrará por pantalla será el alfabético. Así una buena manera sería nombrarlas sería 001.png, 002.png, 003.png, etc. Una vez tengamos las imágenes que conformarán nuestra animación dentro de las carpetas correspondientes y el archivo de texto, necesitamos empaquetarlo todo en un ZIP, y digo empaquetar porque aquí es muy importante utilizar compresión cero (si no se hace así la animación será invalida). En Linux se realizaría de la siguiente manera: $ zip -0 bootanimation.zip desc.txt part0/* part1/* … partN/* -0 (cero) indica que la compresión será nula. Ahora sólo tenemos que mover el archivo bootanimation.zip dentro de nuestra ROM cocinada a la carpeta data/local. Como anotación decir que si quisiésemos modificar la animación en un sistema ya instalado en un dispositivo, necesitaríamos el terminal rooteado y enviar el archivo bootanimation.zip a la ruta data/local del teléfono mediante la siguiente instrucción $ adb push bootanimation.zip /data/local adb (Android Debug Bridge) es una herramienta que se descarga con el SDK de Android. Nos queda reiniciar el dispositivo y ver los resultados. 53 54 PORTACIÓN DE APLICACIÓN DE CÁLCULO CIENTÍFICO A UN ENTORNO MÓVIL Para compilar la aplicación Triqct en equipos de escritorio hacemos uso del compilador de GNU, gfortran, que es parte de la colección de compiladores de GNU, GCC. Un desarrollador ha publicado recientemente en el mercado de aplicaciones oficial de Android, Google Play, una portación de las herramientas GCC para poder ser utilizadas en Android con una arquitectura de procesadores ARM. Se llama GCC C/C++ Fortran Compiler Pro (https://play.google.com/store/apps/details?id=bc.compiler). Para la instalación de estos compiladores en nuestro terminal es necesario cumplir los siguientes requisitos: Tener privilegios de root. Haber instalado las herramientas BusyBox, que son un conjunto de utilidades estándar que se encuentran en la mayoría de sistemas operativos Unix como kill, cat, more, ls, etc. Una vez instalados los compiladores, tenemos que crear las variables de entorno necesarias para poder acceder a las herramientas GCC. Abrimos un terminal y lo primero de todo es tomar la identidad de root (necesario para la realización de algunos pasos), a continuación añadimos la ruta de las librerías y los binarios en las correspondientes variables de entorno: $ su # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/data/bc.compiler/lib/ # export PATH=$PATH:/data/data/bc.compiler/bin Nos dirigimos a la ruta estándar donde se encuentran todas las aplicaciones de usuario y creamos un directorio de trabajo llamado Triqct: # cd /data/app # mkdir Triqct # cd Triqct Es momento de introducir el código fuente en la carpeta que acabamos de generar, para ello podemos utilizar un gestor de archivos dentro del propio dispositivo Android. Una vez hecho, es momento de compilar la aplicación: # gfortran -fno-automatic -O2 dummy.f triqct98.3.1.f -o Triqct Tras unos minutos ya se ha compilado la aplicación y podemos proceder a ejecutarla para comprobar su correcto funcionamiento: # ./Triqct Subrayar que es una versión estable, pero en mi caso he tenido bastantes problemas a la hora de manejar la escritura en ficheros de entrada y salida. 55 56 CONCLUSIONES El objetivo inicial del presente Trabajo Fin de Grado era la adaptación de una aplicación de cálculo científico a la arquitectura ARM dentro de una plataforma móvil. La idea nació fruto de la combinación de: La necesidad por parte de distintos departamentos de la Universidad de La Rioja de conseguir potencia de cálculo intensivo. Visión de futuro de las grandes posibilidades que ofrece los procesadores que siguen la arquitectura ARM con un coste muy reducido. LECCIONES APRENDIDAS Este trabajo me ha permitido conjugar mi experiencia en computación distribuida orientada al cálculo científico con mi devoción por el mundo de los teléfonos móviles. Además durante todo este trayecto he logrado adquirir una gran cantidad de conocimientos que antes desconocía o no tenía muy nítidos. Conocer al detalle cómo funciona internamente un dispositivo móvil, proceso de arranque, particiones del sistema operativo, las funciones del kernel, son conceptos que he asimilado perfectamente y creo van a ayudarme en mi futuro profesional. La creación de la ROM Android modificada ha sido el punto que más me ha sorprendido y que más entretenido he encontrado, por el resultado tan vistoso de haber creado un sistema operativo propio. A la par, ha sido el punto más costoso porque cada modificación del mismo requería la instalación en el terminal y la prueba de su correcto funcionamiento. VALORACIÓN FINAL Se ha demostrado la viabilidad de portar una aplicación de cálculo científico de dinámica molecular como es Triqct a un sistema móvil con arquitectura ARM. Hay que recordar que la finalidad no es ejecutarlos en estos dispositivos, aunque abre la posibilidad de que se ejecute en un entorno de alto rendimiento (HPC) si en un futuro se construyen clústers de ordenadores con procesadores ARM. Hubiese sido interesante la investigación de otros sistemas operativos móviles como Windows Phone, BlackBerry o Firefox OS. Pero por la limitación de horas del trabajo y la no disponibilidad de terminales de este tipo, no lo ha hecho posible. 57 58 ANEXO 1 – ARQUITECTURA DE IOS La arquitectura encontrada en iOS se distribuye en capas o niveles de abstracción: El núcleo del sistema “Core OS”, la capa de “Core Services”, la capa media y la capa “Cocoa Touch”. Como he comentado, iOS está basado en el entorno de escritorio Mac OS X y, aunque este último es algo más extenso que el sistema operativo móvil, se podría también dividir en cuatro capas. CAPA CORE OS En ella se alberga el núcleo del sistema operativo, basado en Darwin BSD. Es la capa más baja de la pila de iOS y se sitúa directamente sobre el dispositivo hardware. Además de entorno del núcleo, esta capa alberga el nivel del sistema, los drivers y las interfaces de bajo nivel del sistema operativo UNIX. NIVEL DE SISTEMA El nivel de sistema abarca el entorno del kernel, los drivers y las interfaces de bajo nivel del sistema operativo UNIX. El kernel es el responsable de todos los aspectos del sistema operativo, se encarga de: La gestión de memoria virtual Gestión de procesos, hilos y manejo de la memoria y comunicación entre procesos. Gestión del sistema de archivos. Gestión del acceso a red de bajo nivel. Gestión de procesos que interactúan directamente con el hardware. Los drivers de este nivel proveen la interfaz entre el hardware del sistema y las capas superiores. Por seguridad, el acceso al kernel y drivers está restringido a un conjunto limitado de frameworks. En iOS existen un conjunto de interfaces escritas en C, para el acceso a muchas características de bajo nivel, a través de la biblioteca Libsystem: Manejo de hilos (POSIX) Red (sockets BSD) Acceso al sistema de archivos Manejo estándar de la entrada y salida. Servicios DNS y Bonjour (método para establecer una red de área local) Asignación de memoria Cálculos matemáticos. FRAMEWORK DE SEGURIDAD iOS proporciona un framework de seguridad que podemos utilizar para garantizar la seguridad de los datos de nuestra aplicación. Provee interfaces para la gestión de certificados, de llave 59 pública y privada, y políticas de seguridad. Además nos posibilita la creación de números pseudo-aleatorios. También nos proporciona un llavero para el almacenamiento de certificados y llaves criptográficas. CAPA CORE SERVICES La capa “core services” contiene los servicios de sistema básicos que toda aplicación utiliza. Entre las principales tecnologías disponibles esta capa se encuentran: SQLite, GDC, iCloud, etc. Que detallaremos a continuación. SQLITE Biblioteca que nos permite incrustar una base de datos de SQL en aplicaciones de manera local, sin necesidad de ejecutar un proceso separado en servidor remoto de base de datos. Desde nuestra aplicación, podemos crear archivos de base de datos locales y gestionar las tablas y los registros en esos archivos. Aunque la librería está diseñada para un uso de propósito general, está optimizada para un acceso rapidísimo a los registros. El ejemplo más común es la base de datos de los contactos de teléfono. GRAND CENTRAL DISPATCH (GCD) No hay nada más desagradable para el usuario que ver cómo una tarea de una aplicación que tarda en ejecutarse bloquea el sistema e incluso no ofrece ningún tipo de información sobre lo que está aconteciendo. Grand Central Dispatch (GCD) nos va a permitir ejecutar varias tareas (en diferentes hilos) al mismo tiempo de forma controlada y sencilla. Si no utilizásemos la tecnología GCD en nuestra aplicación, al realizar una tarea que tardase mucho en terminar, iOS cerraría la aplicación al considerar que no es oportuno tener el sistema bloqueado tanto tiempo. ALMACENAMIENTO ICLOUD iCloud permite a las aplicaciones guardar documentos y datos en la nube y hacer que se sincronicen con los dispositivos iOS (iPod, iPad, iPhone..) y Mac OS X del usuario. También es posible acceder a la información albergada en los servidores a través de una aplicación Web mediante cualquier navegador a través de https://www.icloud.com. Este servicio nos brinda la seguridad de que en caso de extraviar nuestro dispositivo, no perderemos la información albergada en él, ya que tendremos una copia en internet. Hay dos formas de utilizar el almacenamiento en iCloud: iCloud document storage: Almacenamiento de documentos en la nube. 60 iCloud key-value data storage: Pares clave-valor para almacenar en la nube pequeñas cantidades de información (kilobytes). Se puede utilizar por ejemplo para guardar preferencias de usuario. Imagen 33 PROTECCIÓN DE DATOS La protección de datos permite a las aplicaciones utilizar las funciones de encriptado disponible para salvaguardar la información. Mediante la contraseña del dispositivo de cada usuario, junto con la encriptación hardware del dispositivo, se genera una clave de encriptación fuerte. Cuando la app designa un archivo como protegido, el sistema almacena ese archivo en disco encriptado con la clave generada. Mientras el teléfono esté bloqueado, el contenido de ese fichero es inaccesible, tanto para la propia aplicación como para cualquier intruso. Cuando el dispositivo es desbloqueado, se genera una clave de desencriptación que permite a la aplicación acceder al contenido del archivo. CONTEO DE REFERENCIA AUTOMÁTICA (ARC) En iOS 4, el programador era el encargado de liberar las variables (RELEASE) que ya no fuese a utilizar y de mantener las que quisiese conservar (RETAIN). Cuando un objeto es utilizado desde varios lugares de la aplicación, se produce lo que se llama “Reference Counting”, un contador de los sitios donde se está utilizando dicho objeto. De este modo, cuando las diferentes partes de nuestra aplicación liberan este objeto mediante el método “RELEASE”, el contador va disminuyendo y, al llegar a 0, se destruye automáticamente ese espacio de memoria. El problema viene cuando no se realizan correctamente los RELEASE de dicho objeto, ya que el contador nunca llegaría a cero y la memoria consumida por el objeto nunca se liberaría. En iOS 5 nació el conteo de referencia automática (ARC), que realiza todas las operaciones RETAIN y RELEASE por nosotros. ARC es una característica del compilador que simplifica la gestión de vida útil de los objetos en Objective C. En lugar de recordar cuándo se debe retener o liberar un objeto, el ARC evalúa las 61 necesidades de su vida y los inserta de forma automática en las llamadas a métodos adecuados en tiempo de compilación. Imagen 34 SOPORTE XML iOS nos permitirá parsear y escribir datos XML de forma rápida y transformar el contenido XML a HTML. COMPRA DENTRO DE LA APLICACIÓN Apple nos brinda mediante este servicio la posibilidad para vender contenidos dentro de la propia aplicación. Se implementa usando el “Store kit framework” que procesa las transacciones financieras usando las cuentas de usuario de iTunes. CAPA MEDIA Esta es la capa encargada de los servicios de multimedia. Escrita tanto en lenguaje C como Objective C, es una interfaz que permite la ejecución de tareas o gestión de ficheros multimedia. Contiene las tecnologías de gráficos, audio y vídeo orientadas a crear la mejor experiencia posible. TECNOLOGÍA DE GRÁFICOS Las aplicaciones que requieren un nivel gráfico más detallado pueden utilizar las siguientes tecnologías para gestionar el contenido visual: Núcleo gráfico: Se encarga entre otras de la renderización de imágenes. Núcleo de la animación: Proporciona soporte avanzado para animaciones y otros contenidos. OpenGL y GLKit: Suministra la renderización 2D y 3D. Core Text: Motor de texto. 62 E/S estándar de imagen: Interfaces para leer y escribir la mayoría de formatos de imagen. Biblioteca Assets: Proporciona acceso a las fotos y videos de la galería de usuario. TECNOLOGÍA DE AUDIO iOS ofrece diferentes alternativas para reproducir y grabar contenidos de audio Media Player: Ofrece un fácil acceso a la biblioteca de iTunes del usuario y soporte para reproducción de pistas. Framework AV: Interfaz escrita en Objective-C para el manejo y reproducción de contenido audio visual. OpenAl: Interfaz escrita en Objective-C para reproducción de audio y grabación. Audio Core: Suministra la capacidad para hacer vibrar el dispositivo, hacer sonar sonidos del sistema, audio en streaming, etc. TECNOLOGÍA DE VÍDEO iOS permite la reproducción y captura de vídeo UIImagePickerControler: Interfaz estándar para la grabación de vídeo. Media Player: Conjunto de interfaces para la presentación de vídeo Framework AV: Interfaz escrita en Objective-C para el manejo y reproducción de contenido audio visual TECNOLOGÍA AIRPLAY Airplay nos permite la transferencia por streaming de audio, vídeo y fotos entre diferentes dispositivos. El vídeo y las fotos únicamente se permiten entre dispositivos de Apple, mientras que el sonido ha sido liberado para que pueda ser utilizado en componentes de terceros. CAPA COCOA TOUCH La capa Cocoa Touch contiene los frameworks necesarios para la construcción de aplicaciones en iOS. MULTITAREA La multitarea en iOS permite pasar de una app a otra, o de una app al escritorio sin perder el estado de la primera ya que pasaría a un segundo plano o “background”. Hay un mito muy extendido entre los usuarios de iOS, que dice que para reducir el consumo de batería y memoria, es recomendable matar las aplicaciones en segundo plano de manera manual. Es falso. 63 En realidad la multitarea en iOS no es igual que la conocemos de los entornos de escritorio, sino que es una lista de aplicaciones recientemente lanzadas con diferentes estados: No está siendo ejecutada. Se ha cerrado o no ha sido abierta. Inactiva: La aplicación está en primer plano pero no recibe eventos (por ejemplo, la pantalla ha sido bloqueada) Activa: Estado normal de una aplicación ejecutándose. Segundo plano: La app no está activa pero sigue ejecutándose. Suspendida: La aplicación sigue residente en memoria pero no ejecutándose. Cuando pulsas el botón Home para minimizar la aplicación, ésta pasa de estado activo a segundo plano. La mayoría de las aplicaciones se mueven del segundo plano al estado de suspendidas al cabo de 5 segundos (con el objetivo de guardar documentos, ajustes…). Las aplicaciones suspendidas permiten volver a ellas con rapidez pero no están haciendo consumo de batería ni de procesador porque no están siendo ejecutadas. Únicamente consumen memoria. iOS gestiona de manera muy eficiente la falta de memoria, en el momento que lo necesita, pasa las aplicaciones que se ejecutaron más antiguamente o que más ocupan al estado “No está siendo ejecutado” para liberar memoria. SEGUNDO PLANO REAL Como he comentado anteriormente, todas las tareas disponen de un plazo de 5 segundos para pasar del estado “segundo plano” al estado “suspendida”, otras pueden solicitar al sistema operativo una prórroga de 10 minutos y otras, pueden necesitar ejecutarse de manera continua. Hay 5 tipos de aplicaciones que permiten esto: Reproductores de Audio (iTunes, Música…) Aplicaciones que gestionan la localización (TomTom sigue enviando indicaciones sobre tu ubicación aunque esté en segundo plano) Aplicaciones de llamadas de voz sobre IP. Están continuamente esperando una llamada de manera que no es necesario que la aplicación esté en primer plano. Descargadores de contenidos. Aplicaciones que reciben información y notificaciones de un accesorio hardware conectado. IMPRESIÓN iOS permite imprimir documentos de manera inalámbrica. 64 NOTIFICACIONES PUSH DE APPLE Este servicio permite la notificación a los servidores de aplicaciones acerca de algún tipo de información nueva, de manera instantánea. Utiliza la tecnología “push”, un tipo de comunicación en la que se crea una conexión IP constante y es el servidor el que inicia la petición al cliente cuando tiene una información nueva, permitiendo un importante ahorra de recursos respecto a la tecnología convencional “pull”. Además, no requiere la necesidad de que la propia aplicación esté en estado “activo”, con lo cual aquí también obtendremos un significante ahorro de batería. Un ejemplo clásico de tecnología push es el sistema de correo de Blackberry. En su día fue una gran novedad el hecho de recibir los correos en los dispositivos móviles al instante de llegar al servidor. NOTIFICACIONES LOCALES Estas notificaciones complementan a las notificaciones push, permitiendo a la aplicación generar sus propias notificaciones sin la necesidad de estar conectado con un servidor externo. Al igual que en las notificaciones push, la aplicación no tiene por qué estar ejecutándose sino que es el propio sistema operativo el que se encarga de determinada tarea. 65 ANEXO 2 – ARQUITECTURA DE ANDROID La siguiente imagen muestra la arquitectura de Android. Está formado por cuatro capas, la más baja sería el núcleo de Linux, por encima se hallaría el tiempo de ejecución de Android y las librerías, posteriormente encontraríamos el framework de las aplicaciones y en el nivel más alto, las aplicaciones. Imagen 35 NÚCLEO LINUX Android está basado en el kernel de Linux, muy similar al que se puede encontrar en cualquier otra distribución de Linux de entornos de escritorio, pero adaptado a las limitaciones del hardware en que se ejecuta, los dispositivos móviles. El núcleo Linux como una capa de abstracción entre el hardware contenido en los dispositivos móviles y las capas superiores de la arquitectura. El desarrollador no accede directamente a esta capa, sino que utiliza las librerías disponibles en las capas superiores. De esta forma se evita el hecho de tener que conocer las características hardware del terminal. Esta capa proporciona servicios como la seguridad, la gestión de la memoria, gestión de procesos, pila de red, y el soporte para drivers y dispositivos. 66 ANDROID RUNTIME (TIEMPO DE EJECUCIÓN) Se sitúa en el mismo nivel que la capa de las librerías y es constituido por las core libraries con la mayoría de librerías disponibles para el lenguaje Java y la máquina virtual Dalvik. Dalvik es una máquina virtual intérprete que ejecuta archivos en el formato Dalvik Executable (*.dex), un formato optimizado para el almacenamiento eficiente y ejecución mapeable en memoria. Su objetivo fundamental es el mismo que cualquier máquina virtual, permite que el código sea compilado a un bytecode independiente de la máquina en la que se va a ejecutar, y la máquina virtual interpreta este bytecode a la hora de ejecutar el programa. Una de las razones por las cuáles no se optó por utilizar la máquina virtual de Java es la necesidad de optimizar al máximo los recursos y enfocar el funcionamiento de los programas hacia un entorno dónde los recursos de memoria, procesador y almacenamiento son escasos. Imagen 36 LIBRERÍAS Esta capa se corresponde con las librerías utilizadas por Android. Todas ellas han sido escritas en el lenguaje C/C++ y compiladas para la arquitectura hardware específica del teléfono. Normalmente estas librerías están hechas por el fabricante, que también se encarga de instalarlas en el dispositivo. Entre las librerías más importantes encontramos: Iibc: Librería de C propia que permite la ejecución de código nativo. Media Framework: Suministra los códecs necesarios para reproducir el contenido multimedia albergado en Android (vídeo, audio, imágenes, etc.) SGL y OpenGL: Representan las librerías gráficas y proporcionan la capacidad gráfica de Android. OpenGL maneja gráficos en 3D y, si el terminal dispone de él, el hardware encargado de proporcionar gráficos en 3D. Por otro lado, SGL es el motor de gráficos de 2 dimensiones. FreeType: Permite trabajar de forma rápida y sencilla con distintos tipos de fuente. SSL: Posibilita la utilización del protocolo SSL para establecer conexiones seguras. SQLite: Permite la creación y gestión de bases de datos relacionales ligeras para las aplicaciones 67 WebKit: Se trata de la misma librería que utilizan Google Chrome y Safari. Proporciona un motor para las aplicaciones de tipo navegador y es el núcleo del navegador que viene por defecto en Android. FRAMEWORK DE LAS APLICACIONES Esta capa está formada por todas las clases y servicios que utilizan directamente las aplicaciones de Android para realizar sus funciones. La mayoría de los componentes de este nivel son librerías escritas en Java que acceden a recursos de capas inferiores a través de la máquina virtual Dalvik. Todas las aplicaciones que se desarrollan para Android, ya sean las propias del dispositivo, las desarrolladas por Google o las que el usuario cree, todas utilizan el mismo Framework, el de este nivel. Así se consigue una reutilización de componentes y que no haya cientos de ellos en diferentes aplicaciones que responden a la misma acción. En este nivel se encuentran: Activity Manager: API que se encarga de administrar la pila de actividades de nuestra aplicación y su ciclo de vida. Windows Manger: Se encarga de organizar las ventanas que se mostrará en pantalla. Content Provider: Librería que se encarga de encapsular los datos que se compartirán entre aplicaciones. Views: Los diferentes controles de la interfaz, desde sencillos como botones, cuadros de texto, labels, etc. Hasta complejos como un navegador Web o un visor para Google Maps dentro de nuestra aplicación. Telephony Manager: Librería que nos permite realizar llamadas y enviar mensajes de texto. Location Manager: Permite a las aplicaciones la obtención de información acerca de la localización. Notification Manager: Diferentes servicios para realizar notificaciones al usuario. Permite la utilización de sonidos, vibración y, si dispusiese el teléfono, de LED´s. XMPP Service: API para utilizar este protocolo de intercambio de mensajes basado en XML que utilizan programas como Whatsapp. 68 APLICACIONES Este nivel contiene todas las aplicaciones, tanto las que vienen por defecto con el teléfono, como aquellas que van siendo añadidas por nosotros. Normalmente todas las aplicaciones están escritas en Java, pero es posible (lo comentaré más adelante) desarrollar aplicaciones utilizando los lenguajes C/C++ y Fortran (aplicaciones nativas). Para utilizar esta opción necesitaremos el conjunto de herramientas NDK (Native Development Kit). En Android no existe la discriminación entre aplicaciones del mismo tipo ni preferencias por una o por otra, podemos establecer como predeterminada la que nosotros escojamos. Por poner un ejemplo, si nosotros no estamos conformes con la aplicación de SMS que viene por defecto en el teléfono, siempre podremos descargar una del Market o bien crear una propia y hacer que sea la predeterminada dentro de nuestro terminal. 69 ANEXO 3 – CÓDIGOS DE VERSIÓN DEL FIRMWARE DE ANDROID CÓDIGOS DE REGIÓN BD Cyprus, Greece CP Finland DB Vietnam DC Thailand DD India DT Australia DX Indonesia, Malaysia, Philippines, Singapore, Vietnam DZ Malaysia, Singapore JA South Africa JC Algeria, Morocco, Nigeria, South Africa, Tunisia JP Arabic JV Algeria, Egypt, Iran, Iraq, Kuwait, Morocco, Nigeria, Oman, Pakistan, Saudi Arabia, South Africa, Syria, Tunisia, Turkey MT Switzerland XA Austria, France, Germany, Italy, Netherlands, Switzerland, United Kingdom XB Denmark, Norway, Sweden XC Portugal, Spain XD Croatia, Czech, Hungary, Slovakia XE Bulgaria, Estonia, Kazakhstan, Latvia, Lithuania, Russia, Ukraine XF Bulgaria, Croatia, Romania XW France, Germany, Italy, Netherlands, Portugal, Spain, Turkey, United Kingdom XX Austria, Belgium, France, Germany, Hungary, Italy, Spain, United Kingdom ZC China, Hong Kong ZH Hong Kong ZT Taiwan 70 CÓDIGOS DE AÑO … H 2008 I 2009 J 2010 K 2011 L 2012 M 2013 N 2014 … CÓDIGOS DE MES A Enero B Febrero C Marzo D Abril E Mayo F Junio G Julio H Agosto I Septiembre J Octubre K Noviembre L Diciembre CÓDIGOS DE REVISIÓN 1=1 2=2 71 3=3 ... A = 10 B = 11 C = 12 ... CÓDIGOS DE OPERADORA En el ejemplo que hemos realizado anteriormente, hemos descargado un firmware con las código de operador YOG, propio de Yoigo. cada operadora tiene sus siglas y sus configuraciones. A continuación se enumeran los diferentes códigos de operador para la región española: ATL = Vodafone. FOP = Instalación de firmware para un terminal libre. XEC = Movistar. AMN = orange. YOG = Yoigo. 72 BIBLIOGRAFÍA ARM Wikipedia – ARM http://en.wikipedia.org/wiki/ARM_architecture Xataka.com – ARM, la ‘navaja suiza’ de los procesadores http://www.xataka.com/componentes-de-pc/arm-la-navaja-suiza-de-losprocesadores-1 GamersMafia.com – x86 vs. ARM http://hw.gamersmafia.com/columnas/show/1626 ANDROID Wikipedia – Android http://en.wikipedia.org/wiki/Android_(operating_system) AndroidForos – Particiones de un sistema Android http://www.androidforos.es/tutoriales/particiones-android-detalle-boot-data-systemrecovery-cache-misc-sdcard-ext-t1064.html Androidpit – Bootloader http://www.androidpit.es/es/android/foro/thread/440702/Que-es-un-bootloader Ellinux – Android Architecture http://elinux.org/Android_Architecture Android.com – Android Developer http://developer.android.com/about/index.html Android.com – Android Developer http://developer.android.com/about/index.html Android.com – Android Developer http://developer.android.com/about/index.html Xda-developers.com – Android Kitchen http://forum.xda-developers.com/showthread.php?t=633246 73 IOS Wikipedia – iOS http://es.wikipedia.org/wiki/IOS_(sistema_operativo) http://en.wikipedia.org/wiki/IOS Wikipedia – Evasi0n http://en.wikipedia.org/wiki/Evasi0n iPadizate – Todo sobre el Jailbreak a iOS 6.1 http://www.ipadizate.es/2013/01/31/evasi0n-jailbreak-ios-6/ Wikipedia – iPhone http://en.wikipedia.org/wiki/Iphone Javox – What is Gevey SIM Hack http://jaxov.com/2011/03/what-is-gevey-sim-hack-and-how-gevey-sim-interposerwork-to-unlock-iphone-4/ mecambioamac – Formato de Audio, imagen y vídeo que reproduce el iPad http://www.mecambioamac.com/formatos-de-audio-imagen-y-video-que-reproduceel-ipad/ TipsTecnología - ¿Cuál es la diferencia entre el Jailbreak, rooting y Unlocked? http://www.tipstecnologia.com/2013/05/cual-es-la-diferencia-entre-el.html Javox – What is Jailbreaking? Benefits, risks & Legality of Jailbreaking http://jaxov.com/2011/03/what-is-gevey-sim-hack-and-how-gevey-sim-interposerwork-to-unlock-iphone-4/ iApps.scenebeta.com – Cómo hacer una copia SHSH http://iapps.scenebeta.com/tutorial/como-hacer-una-copia-del-shsh Crónicas de un ElePHPante – Cocoa http://www.fperezp.com/blog/2011/01/03/cocoa-por-donde-empezar/ Engadget.com – En EEUU será ilegal desbloquear teléfonos http://es.engadget.com/2012/10/26/ilegal-liberar-desbloquear-jailbreak-eeuu-dmca/ OSXDaily – Tethered Jailbreak vs Untethered Jailbreak http://osxdaily.com/2010/11/24/tethered-jailbreak-vs-untethered-jailbreak/ FAQ-MAC – Errores de concepto sobre la multitarea en iOS http://www.faq-mac.com/tutoriales/errores-concepto-sobre-multitarea-ios/48952 74