PDA

Ver la Versión Completa : [TUTORIAL] [Kit-Kat] LINUX y La cocina Android Kernel MediaTeck MT8392/MT6592, adaptable a otras CPU's MediaTeck- Futuro también mejoras del kernel y posibles usos con versiones anteriores o posteriores a 4.4.x


fusionero
14/01/15, 04:06:08
Bueno chicos, como ahora tenemos el momento de nuestra Tablet y la cocina en ella voy a ir añadiendo todo lo que aprenda para que los demás puedan aprender de ello :ok: Eso si, lo primero que digo es que luisetex84 (http://www.htcmania.com/member.php?u=1151665) es quien me esta enseñando, así que solo es un hilo en principio en la que plasmar lo que suceda y que los demás puedan aprender desde 0 como yo en este momento a cocinar en un principio solo un kernel, y como es en el caso que me ocupa, para la Tablet BQ Aquaris E10, tanto en su versión wifi ( kaito_wifi ), como en su variante 3G ( kaito ).

NECESIDADES BÁSICAS PARA SEGUIR ESTE TUTORIAL

- Empezamos con la necesidad de usar un pc con Linux desde Ubuntu 12.04-14.10,Linux Mint 13-17.1, ambas en su versión 64 bit's.
- Tener una CPU de 64 bit's, si es de 32 bit's no podremos hacer nada igual o superior a Android 4.0 - IceCreamSandwich.
- Suficiente memoria y CPU, o se ralentizaran la compilaciones de kernel's o futuras Rom's. - Bueno se puede usar algo inferior, ya que yo empecé con un Celeron T-1600 64 bit's y 4 GB's de RAM DDR-667-800MHz ( es que cada una tiene una velocidad máxima, jeje ).
- 2 Discos Duros ( preferiblemente si el principal es SSD mejor por la velocidad ), para volvar siempre un repositorio o toda la carpeta al 2º HDD, por si vamos a probar muchos cambios, y no recordamos que hemos hecho poder restaurar la copia desde el 2º HDD.
- Tener ganas de poder cargarte el sistema de arranque de Linux, o archivos que no os indique y toque reinstalar Linux, por ese detalle algunos recomiendan empezar desde un Sistema Operativo Virtual, para no perder nada, ya que puede que tengamos que usar nuevamente la instalación desde USB/CD/DVD para reinstalar el Grub para si es necesario y restaurar una versión anterior a los cambios que nos den problemas, aunque yo mismo he ido a saco con mi usuario Root, y sin copia, con las bragas bajadas para que lleguen por todos los lados, que me gusta hacerla limpia, jeje.

PREPARACIÓN DEL ENTORNO

Bueno lo primero es que se debe preparar nuestro Linux para poder hacer cualquier cosa, ya que se deben manejar varias cosas o necesitar de ellas para compilar/descompilar, y en este Hilo de xda-developers da un inicio [/url], añadiré los detalles exactos.

Empezamos con el Terminal:

Instalamos el JDK:
$ sudo apt-get update

Y:
$ sudo apt-get install openjdk-7-jdk

Seguimos con la instalación de paquetes necesarios para trabajar con las herramientas que usaremos más adelante ( ejemplo las del Github, ya que necesitamos por ejemplo python, o no podriamos usarlo ):

$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386

Y también ejecutamos:

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

El especifico para Ubuntu 14.04 o Linux Mint 17:

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils

Configuramos el acceso usb ADB:

Gracias a luisete por los detalles ya que no los conocía, y solo lo he preparado apenas sustituyendo imágenes por palabras, para no perderse nunca ante caídas de las imágenes, y este es otro aporte suyo solo añadido en orden al hilo que nos conciñe/atañe. Así que nuevamente gracias a él, que nos da los detalles para ir haciendo crecer este hilo/tutorial/historia de mi propio inicio en la misma cocina desde 0.


1. Si no lo hemos hecho antes, ejecutamos en la Terminal:

$ adb devices

Esto es para iniciar el demonio de adb. En la raíz del nuestro sistema de archivos se creara la carpeta .android ( estara oculta, ya que eso hace el que tenga el punto delante, por eso se debe tener activado que podamos ver archivos y carpetas ocultas o no la veremos ), si no existía ya.

El problema que no te reconozca el dispositivo ( tablet, móvil, etc,... ) es que Linux no sabe el id del fabricante. Así que vamos a obtenerlo.

2. Sin conectar la tablet al pc ejecutamos:

$ adb devices

Y nos debería aparecer debajo esto

* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached

Podemos seguir con la comprobación de la conexión usb que hay en ese momento activa:

$ lsusb

Dandonos una respuesta de este estilo:

Bus 002 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 002: ID 8087:07dc Intel Corp.
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 0408:13ba Quanta Computer, Inc.
Bus 001 Device 002: ID 0bda:0158 Realtek Semiconductor Corp. USB 2.0 multicard reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Ahora ya conectamos el cable USB al pc y al dispositivo, y volvemos a ejecutarlo para comprobar la nueva entrada que nos debe aparecer ( la he remarcado para que lo notéis mejor ):

$ lsusb

Esta vez con otra respuesta que cambiaría en la 1ª línea:

Bus 002 Device 004: ID 2a47:2008
Bus 002 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 002: ID 8087:07dc Intel Corp.
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 0408:13ba Quanta Computer, Inc.
Bus 001 Device 002: ID 0bda:0158 Realtek Semiconductor Corp. USB 2.0 multicard reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Comparamos el resultado con el anterior resultado y debemos buscar ese nuevo dispositivo, que sera el nuestro ( tablet, móvil, etc,... ). Ahora apuntamos los 4 dígitos que salen detrás de ID y antes de los dos puntos, el remarcado en rojo es un ejemplo ( que en realidad es el de BQ ). Este es el idVendor.

3. En la raíz del nuestro sistema de archivos se creara la carpeta .android, busca el fichero adb_usb.ini. Se debe añadir el idVendor al fichero. Si no existiera, crealo y añade esto:

0x{idVendor}

- Siguiendo el ejemplo sería:

0x0bb4

4. Matamos ahora el demonio de adb ( esto es para que al volver a iniciarlo nos coja la nueva configuración ):

adb kill-server

5. Ahora volvemos a iniciar el demonio de adb

adb devices

Ya para más adelante sería aprender estos, que es para hacer ramas en nuestra carpeta, pero lo dejo para más adelante, ya que primero tenéis que probar a hacer una, y ya después tendremos tiempo para hacerlo, ya que sino sabemos con una rama no es cosa de crear varias si podemos querer borrar algo sino nos parece correcto, o queremos hacer solo pruebas con un solo kernel y una única variante. Aunque se pueden hacer ramas para crear varias versiones del mismo kernel para ver que cosa funciona o no según como se haga y no tener que pensar en que se hace y que se nos olvido, sino hacer directamente multiples ramas y probar cada una , ejemplo añadir cosas de otras CPU's y querer probar varias funentes con distintas opciones, así no perdemos tanto tiempo si encontramos una funcional, y al probar otra no recordamos la que era, así nunca se nos debe olvidar nombrar cada una con algún nombre que no nos olvide que la caracteriza.

Pendiente de traducir, ya que añado lo de la página indicada de donde saco la información:

Por defecto, la salida de cada build/generación se almacena en la salida/out/subdirectorio del árbol de código fuente correspondiente.

En algunas máquinas con múltiples dispositivos de almacenamiento ( HDD's, SSD's ), las build's/construcciones son más rápidas cuando se almacenan los archivos de origen y la salida de volúmenes separados. Para obtener un rendimiento adicional, la salida se puede almacenar en un sistema de archivos optimizado para la velocidad ( SSD's ) en lugar de robustez ante accidentes, ya que todos los archivos se pueden volver a generarse en caso de corrupción del sistema de archivos en un menor tiempo que con un HDD.

Para configurar esto, exporte la variable OUT_DIR_COMMON_BASE para apuntar a la ubicación donde se almacenarán los directorios de salida.

$ export OUT_DIR_COMMON_BASE=<indicar_el_nombre_de_nuestro_directorio>

El directorio de salida para cada fuente del árbol fuente será nombrado independiente después del directorio que contiene el árbol de origen.

Por ejemplo, si usted tiene dintintas fuentes de árboles como /source/master1 y /source/master2 y OUT_DIR_COMMON_BASE se establece en /output, los directorios de salida serán /output/master1 y /output/master2.

Es importante en este caso al no tener varios orígenes de árboles almacenados en directorios que tienen el mismo nombre, porque los que terminarían compartiendo un directorio de salida, con resultados impredecibles.

Esto sólo se admite en Jelly Bean (4.1) y más recientes, incluyendo la rama principal.



PREPARANDO UN REPOSITORIO


Es algo tan sencillo ( indicado por luisetex84 nuevamente este detalle ) en Ubuntu 14.04-14.10 y Linux Mint 17-17.1 como ejecutar este comando en la Terminal:

$ sudo apt-get install phablet-tools tclsh

Seguimos con unos recomandables:

$ sudo apt-get install bzr-doc bzrtools python-bzrlib.tests python-bzrlib-dbg python-kerberos

Y otros más:

$ sudo apt-get install python-gpgme click-apparmor upstart-app-launch-tools pybootchartgui

Esto otro es lo que había que hacerlo antiguamente, cuando no existía ningún paquete que contuviera el comando repo. Si nos da fallo la anterior ejecución en la Terminal nos tocaría hacer esto otro para poder continuar:

Revisamos que tenemos el directorio bin/ en la raíz de nuestro pc, o lo creamos así ( nada más abrir la Terminal, no cambiamos de directorio ):

$ mkdir ~/bin

Y:

$ PATH=~/bin:$PATH

Ya de paso recordar que mkdir es para crear carpetas u otro tipo de archivos, pero con sus correspondientes variantes, ya que mk es para crear, y dir especifica que es un directorio/carpeta.

Descargamos la tool/herramienta de la Repo y nos aseguramos de que sea ejecutable:

$ curl [url]https://storage.googleapis.com/git-repo-downloads/repo (https://source.android.com/source/initializing.html) > ~/bin/repo

Y:

$ chmod a+x ~/bin/repo

Para la versión 1.17, el cheksum SHA-1 del Repo es ddd79b6d5a7807e911b524cb223bc3544b661c28

Para la versión 1.19, el cheksum SHA-1 del Repo es 92cbad8c880f697b58ed83e348d06619f8098e6c

Para la versión 1.20, el cheksum SHA-1 del Repo es e197cb48ff4ddda4d11f23940d316e323b29671c

Para la versión 1.21, el cheksum SHA-1 del Repo es b8bd1804f432ecf1bab730949c82b93b0fc5fede

Ahora es hora ya de crear la carpeta que usaremos para tener el/los repositorio/s que vamos a usar, la crearemos en la raíz del sistema ( /home/usuario ), y ya dependerá del nombre que se nos antoje, yo personalmente le di el nombre de android para reconocerla al principio al abrir el acceso al sistema de archivos. Recordar que si van a ser carpetas con nombres con más de una palabra deben ser unidas con _ en cada espacio que se le quiera añadir, ya que sino solo crearas varias carpetas cada una con su nombre respectivo. La 2ª línea es para acceder a la carpeta creada ya que desde ella que aremos todo la sincronización.

$ mkdir nuestro_directorio

Y:

$ cd nuestro_directorio

Ejecutamos el init repo para descargar la última versión del Repo con todas sus más recientes correcciones de errores. Debe especificar una dirección URL para el manifiesto, que especifica si los diferentes repositorios incluidos en la fuente a descargar de Android será colocado dentro de su directorio de trabajo. Y tenemos varias opciones según la fuente que usemos:

Repositorio de google:

$ repo init -u git://android.googlesource.com/platform/manifest

Repositorio de CyanogenMod 11.0:

$ repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0

Repositorio de CyanogenMod 12.0:

$ repo init -u git://github.com/CyanogenMod/android.git -b cm-12.0

Repositorio de Omni 4.4:

$ repo init -u git://github.com/omnirom/android_bootable_recovery.git -b android-4.4

Repositorio de Omni 5.0:

$ repo init -u git://github.com/omnirom/android_bootable_recovery.git -b android-5.0

Todo esto tardara según la conexión que tengamos, pero pueden ser solo unos segundos o apenas 5 minutos, ya que son sobre los 5 MegaBytes en la Repo CyanogenMod.

Si fallasen las descargas de los repositorios para descargar por firmas, se soluciona saltando el uso del acceso por git://github usando este otro acceso https://github, quedando las 5 opciones anteriores así:

Repositorio de google:

$ repo init -u https://android.googlesource.com/platform/manifest

Repositorio de CyanogenMod 11.0:

$ repo init -u https://github.com/CyanogenMod/android.git -b cm-11.0

Repositorio de CyanogenMod 12.0:

$ repo init -u https://github.com/CyanogenMod/android.git -b cm-12.0

Repositorio de Omni 4.4:

$ repo init -u https://github.com/omnirom/android_bootable_recovery.git -b android-4.4

Repositorio de Omni 5.0:

$ repo init -u https://github.com/omnirom/android_bootable_recovery.git -b android-5.0



DESCARGANDO UN REPOSITORIO SOLO PARA EL KERNEL
El manifest_local.xml es gracias al esfuerzo y trabajo de luisetext84, yo solo lo comprarto como base para enseñaros las diferencias lo más básicamente posible para que lo entendamos todos desde el principio lo que cambia si partimos del mismo repositorio, en el ejemplo es para usar el repositorio de CyanogenMod con el que hacer 4 kernel's distintos


Tenemos que usar el Terminal en su principio, para instalar/crear/descargar la mayoría de las cosas. Aquí un ejemplo actual ( 14 de Enero de 2015 ) del manifest_local.xml creado por lusetex84, para usarlo tanto para CWM, TRWP, Philz y CTO según para que versión Android sean y su tamaño al estar descargados ( os aviso que solo el hacer la descarga se come al menos unas 7-9 veces lo ocupado, ya que lo he comprobado mientras se descargaban todos ).

Si no existe, creamos el fichero en nuestro_directorio/.repo/local_manifests/local_manifest.xml con uno de estos contenidos para bajar el código según que versión/base de kernel queramos usar, diferenciandose solo en la líneas finales que ponen el nombre a los kernel's no llamados CyanogenMod, ya que ese al ser usado no se le indica nombre, o daría error por multiple nombrado en 3 archivos, siendo el error del manifest_local nuestro si le indicamos nombre al CWM, los demás no tendrán ese problema, ya que todos necesitan el nombrado especifico si deseamos recordar que base para el kernel hemos seleccionado.

<?xml version="1.0" encoding="UTF-8"?>

-<manifest>

<remove-project name="CyanogenMod/android"/>

<remove-project name="CyanogenMod/android_abi_cpp"/>

<remove-project name="CyanogenMod/android_art"/>

<remove-project name="CyanogenMod/android_bootable_diskinstaller"/>

<remove-project name="CyanogenMod/android_bootable_recovery"/>

<remove-project name="CyanogenMod/android_bootable_recovery-cm"/>

<remove-project name="platform/cts"/>

<remove-project name="CyanogenMod/android_dalvik"/>

<remove-project name="platform/developers/build"/>

<remove-project name="platform/developers/demos"/>

<remove-project name="platform/developers/docs"/>

<remove-project name="platform/developers/samples/android"/>

<remove-project name="CyanogenMod/android_development"/>

<remove-project name="CyanogenMod/android_device_common"/>

<remove-project name="CyanogenMod/android_device_generic_armv7-a-neon"/>

<remove-project name="CyanogenMod/android_device_generic_common"/>

<remove-project name="CyanogenMod/android_device_generic_mips"/>

<remove-project name="CyanogenMod/android_device_generic_x86"/>

<remove-project name="device/generic/mini-emulator-armv7-a-neon"/>

<remove-project name="device/generic/mini-emulator-mips"/>

<remove-project name="device/generic/mini-emulator-x86"/>

<remove-project name="CyanogenMod/android_device_google_accessory_arduino"/>

<remove-project name="CyanogenMod/android_device_google_accessory_demokit"/>

<remove-project name="CyanogenMod/android_device_sample"/>

<remove-project name="platform/docs/source.android.com"/>

<remove-project name="CyanogenMod/android_external_aac"/>

<remove-project name="CyanogenMod/android_external_android-clat"/>

<remove-project name="CyanogenMod/android_external_android-mock"/>

<remove-project name="CyanogenMod/android_external_android-visualizer"/>

<remove-project name="CyanogenMod/android_external_ant-glob"/>

<remove-project name="CyanogenMod/android_external_ant-wireless_ant_native"/>

<remove-project name="CyanogenMod/android_external_ant-wireless_ant_service"/>

<remove-project name="CyanogenMod/android_external_ant-wireless_antradio-library"/>

<remove-project name="CyanogenMod/android_external_antlr"/>

<remove-project name="CyanogenMod/android_external_apache-harmony"/>

<remove-project name="CyanogenMod/android_external_apache-http"/>

<remove-project name="CyanogenMod/android_external_apache-qp"/>

<remove-project name="CyanogenMod/android_external_apache-xml"/>

<remove-project name="CyanogenMod/android_external_arduino"/>

<remove-project name="CyanogenMod/android_external_bash"/>

<remove-project name="CyanogenMod/android_external_blktrace"/>

<remove-project name="CyanogenMod/android_external_bluetooth_bluedroid"/>

<remove-project name="CyanogenMod/android_external_bsdiff"/>

<remove-project name="CyanogenMod/android_external_bson"/>

<remove-project name="CyanogenMod/android_external_cardslib"/>

<remove-project name="platform/external/ceres-solver"/>

<remove-project name="CyanogenMod/android_external_chromium"/>

<remove-project name="platform/external/chromium-libpac"/>

<remove-project name="CyanogenMod/android_external_chromium-trace"/>

<remove-project name="CyanogenMod/android_external_chromium_org"/>

<remove-project name="platform/external/chromium_org/sdch/open-vcdiff"/>

<remove-project name="platform/external/chromium_org/testing/gtest"/>

<remove-project name="platform/external/chromium_org/third_party/WebKit"/>

<remove-project name="platform/external/chromium_org/third_party/angle"/>

<remove-project name="platform/external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille"/>

<remove-project name="platform/external/chromium_org/third_party/freetype"/>

<remove-project name="platform/external/chromium_org/third_party/icu"/>

<remove-project name="platform/external/chromium_org/third_party/leveldatabase/src"/>

<remove-project name="platform/external/chromium_org/third_party/libjingle/source/talk"/>

<remove-project name="platform/external/chromium_org/third_party/libphonenumber/src/phonenumbers"/>

<remove-project name="platform/external/chromium_org/third_party/libphonenumber/src/resources"/>

<remove-project name="platform/external/chromium_org/third_party/mesa/src"/>

<remove-project name="CyanogenMod/android_external_chromium_org_third_party_openssl"/>

<remove-project name="platform/external/chromium_org/third_party/opus/src"/>

<remove-project name="platform/external/chromium_org/third_party/ots"/>

<remove-project name="platform/external/chromium_org/third_party/sfntly/cpp/src"/>

<remove-project name="platform/external/chromium_org/third_party/skia/gyp"/>

<remove-project name="platform/external/chromium_org/third_party/skia/include"/>

<remove-project name="platform/external/chromium_org/third_party/skia/src"/>

<remove-project name="platform/external/chromium_org/third_party/smhasher/src"/>

<remove-project name="platform/external/chromium_org/third_party/yasm/source/patched-yasm"/>

<remove-project name="platform/external/chromium_org/tools/grit"/>

<remove-project name="platform/external/chromium_org/tools/gyp"/>

<remove-project name="platform/external/chromium_org/v8"/>

<remove-project name="CyanogenMod/android_external_connectivity"/>

<remove-project name="CyanogenMod/android_external_crda"/>

<remove-project name="CyanogenMod/android_external_curl"/>

<remove-project name="CyanogenMod/android_external_dexmaker"/>

<remove-project name="CyanogenMod/android_external_dhcpcd"/>

<remove-project name="CyanogenMod/android_external_dnsmasq"/>

<remove-project name="CyanogenMod/android_external_doclava"/>

<remove-project name="CyanogenMod/android_external_dropbear"/>

<remove-project name="platform/external/droiddriver"/>

<remove-project name="CyanogenMod/android_external_easymock"/>

<remove-project name="CyanogenMod/android_external_ebtables"/>

<remove-project name="CyanogenMod/android_external_eclipse-basebuilder"/>

<remove-project name="CyanogenMod/android_external_eclipse-windowbuilder"/>

<remove-project name="CyanogenMod/android_external_elfutils"/>

<remove-project name="CyanogenMod/android_external_embunit"/>

<remove-project name="CyanogenMod/android_external_emma"/>

<remove-project name="CyanogenMod/android_external_esd"/>

<remove-project name="CyanogenMod/android_external_expat"/>

<remove-project name="CyanogenMod/android_external_eyes-free"/>

<remove-project name="CyanogenMod/android_external_f2fs-tools"/>

<remove-project name="CyanogenMod/android_external_fdlibm"/>

<remove-project name="CyanogenMod/android_external_ffmpeg"/>

<remove-project name="CyanogenMod/android_external_flac"/>

<remove-project name="CyanogenMod/android_external_ganymed-ssh2"/>

<remove-project name="CyanogenMod/android_external_giflib"/>

<remove-project name="CyanogenMod/android_external_google"/>

<remove-project name="CyanogenMod/android_external_google-diff-match-patch"/>

<remove-project name="CyanogenMod/android_external_grub"/>

<remove-project name="CyanogenMod/android_external_gson"/>

<remove-project name="CyanogenMod/android_external_gtest"/>

<remove-project name="CyanogenMod/android_external_guava"/>

<remove-project name="CyanogenMod/android_external_hamcrest"/>

<remove-project name="CyanogenMod/android_external_harfbuzz"/>

<remove-project name="platform/external/harfbuzz_ng"/>

<remove-project name="CyanogenMod/android_external_heimdall"/>

<remove-project name="CyanogenMod/android_external_htop"/>

<remove-project name="CyanogenMod/android_external_hyphenation"/>

<remove-project name="CyanogenMod/android_external_icu4c"/>

<remove-project name="CyanogenMod/android_external_iproute2"/>

<remove-project name="CyanogenMod/android_external_ipsec-tools"/>

<remove-project name="CyanogenMod/android_external_iptables"/>

<remove-project name="platform/external/iputils"/>

<remove-project name="CyanogenMod/android_external_jack"/>

<remove-project name="CyanogenMod/android_external_JakeWharton_butterknife"/>

<remove-project name="CyanogenMod/android_external_javasqlite"/>

<remove-project name="CyanogenMod/android_external_javassist"/>

<remove-project name="CyanogenMod/android_external_jdiff"/>

<remove-project name="CyanogenMod/android_external_jhead"/>

<remove-project name="CyanogenMod/android_external_jmdns"/>

<remove-project name="CyanogenMod/android_external_jmonkeyengine"/>

<remove-project name="CyanogenMod/android_external_jsilver"/>

<remove-project name="CyanogenMod/android_external_jsr305"/>

<remove-project name="CyanogenMod/android_external_jsr308"/>

<remove-project name="CyanogenMod/android_external_jsr330"/>

<remove-project name="CyanogenMod/android_external_junit"/>

<remove-project name="CyanogenMod/android_external_kernel-headers"/>

<remove-project name="CyanogenMod/android_external_kissfft"/>

<remove-project name="CyanogenMod/ion"/>

<remove-project name="CyanogenMod/AndroidAsync"/>

<remove-project name="CyanogenMod/Widgets"/>

<remove-project name="CyanogenMod/android_external_libcap-ng"/>

<remove-project name="platform/external/libexif"/>

<remove-project name="CyanogenMod/android_external_libffi"/>

<remove-project name="CyanogenMod/android_external_libgsm"/>

<remove-project name="CyanogenMod/android_external_liblzf"/>

<remove-project name="CyanogenMod/android_external_libmtp"/>

<remove-project name="CyanogenMod/android_external_libncurses"/>

<remove-project name="CyanogenMod/android_external_libnfc-nci"/>

<remove-project name="CyanogenMod/android_external_libnfc-nxp"/>

<remove-project name="CyanogenMod/android_external_libnl-headers"/>

<remove-project name="CyanogenMod/android_external_libogg"/>

<remove-project name="CyanogenMod/android_external_libpcap"/>

<remove-project name="CyanogenMod/android_external_libphonenumber"/>

<remove-project name="CyanogenMod/android_external_libphonenumbergoogle"/>

<remove-project name="CyanogenMod/android_external_libppp"/>

<remove-project name="CyanogenMod/android_external_libtruezip"/>

<remove-project name="CyanogenMod/android_external_libusb"/>

<remove-project name="CyanogenMod/android_external_libusbx"/>

<remove-project name="CyanogenMod/android_external_libusb-compat"/>

<remove-project name="platform/external/libssh2"/>

<remove-project name="CyanogenMod/android_external_libvorbis"/>

<remove-project name="CyanogenMod/android_external_libvpx"/>

<remove-project name="CyanogenMod/android_external_libxml2"/>

<remove-project name="CyanogenMod/android_external_libxslt"/>

<remove-project name="CyanogenMod/android_external_libyuv"/>

<remove-project name="CyanogenMod/android_external_linux-tools-perf"/>

<remove-project name="CyanogenMod/android_external_littlemock"/>

<remove-project name="platform/external/lzma"/>

<remove-project name="CyanogenMod/android_external_lsof"/>

<remove-project name="CyanogenMod/android_external_lzo"/>

<remove-project name="platform/external/marisa-trie"/>

<remove-project name="CyanogenMod/android_external_markdown"/>

<remove-project name="CyanogenMod/android_external_mdnsresponder"/>

<remove-project name="platform/external/mesa3d"/>

<remove-project name="CyanogenMod/android_external_mksh"/>

<remove-project name="platform/external/mockito"/>

<remove-project name="CyanogenMod/android_external_mockwebserver"/>

<remove-project name="CyanogenMod/android_external_mp4parser"/>

<remove-project name="CyanogenMod/android_external_mtpd"/>

<remove-project name="CyanogenMod/android_external_nano"/>

<remove-project name="CyanogenMod/android_external_naver-fonts"/>

<remove-project name="CyanogenMod/android_external_netcat"/>

<remove-project name="CyanogenMod/android_external_netperf"/>

<remove-project name="CyanogenMod/android_external_neven"/>

<remove-project name="platform/external/nist-pkits"/>

<remove-project name="CyanogenMod/android_external_nist-sip"/>

<remove-project name="platform/external/noto-fonts"/>

<remove-project name="CyanogenMod/android_external_oauth"/>

<remove-project name="platform/external/objenesis"/>

<remove-project name="CyanogenMod/android_external_okhttp"/>

<remove-project name="platform/external/open-vcdiff"/>

<remove-project name="CyanogenMod/android_external_opencv"/>

<remove-project name="CyanogenMod/android_external_openfst"/>

<remove-project name="CyanogenMod/android_external_openssh"/>

<remove-project name="CyanogenMod/android_external_oprofile"/>

<remove-project name="CyanogenMod/android_external_pciutils"/>

<remove-project name="platform/external/pixman"/>

<remove-project name="CyanogenMod/android_external_powertop"/>

<remove-project name="CyanogenMod/android_external_ppp"/>

<remove-project name="CyanogenMod/android_external_proguard"/>

<remove-project name="CyanogenMod/android_external_protobuf"/>

<remove-project name="CyanogenMod/android_external_protobuf-c"/>

<remove-project name="CyanogenMod/android_external_qemu"/>

<remove-project name="CyanogenMod/android_external_qemu-pc-bios"/>

<remove-project name="CyanogenMod/android_external_qrngd"/>

<remove-project name="CyanogenMod/android_external_regex-re2"/>

<remove-project name="CyanogenMod/android_external_replicaisland"/>

<remove-project name="platform/external/robolectric"/>

<remove-project name="CyanogenMod/android_external_rsync"/>

<remove-project name="platform/external/sfntly"/>

<remove-project name="platform/external/sil-fonts"/>

<remove-project name="CyanogenMod/android_external_skia"/>

<remove-project name="platform/external/smack"/>

<remove-project name="CyanogenMod/android_external_smali"/>

<remove-project name="CyanogenMod/android_external_sonivox"/>

<remove-project name="CyanogenMod/android_external_speex"/>

<remove-project name="CyanogenMod/android_external_spongycastle"/>

<remove-project name="CyanogenMod/android_external_square_dagger"/>

<remove-project name="CyanogenMod/android_external_square_javawriter"/>

<remove-project name="CyanogenMod/android_external_srec"/>

<remove-project name="CyanogenMod/android_external_srtp"/>

<remove-project name="CyanogenMod/android_external_stagefright-plugins"/>

<remove-project name="CyanogenMod/android_external_strace"/>

<remove-project name="CyanogenMod/android_external_stressapptest"/>

<remove-project name="platform/external/svox"/>

<remove-project name="CyanogenMod/android_external_tagsoup"/>

<remove-project name="CyanogenMod/android_external_tcpdump"/>

<remove-project name="platform/external/timezonepicker-support"/>

<remove-project name="CyanogenMod/android_external_tinyalsa"/>

<remove-project name="CyanogenMod/android_external_tinycompress"/>

<remove-project name="CyanogenMod/android_external_tinyxml"/>

<remove-project name="CyanogenMod/android_external_tinyxml2"/>

<remove-project name="CyanogenMod/android_external_tremolo"/>

<remove-project name="CyanogenMod/android_external_unrar"/>

<remove-project name="CyanogenMod/android_external_v8"/>

<remove-project name="CyanogenMod/android_external_valgrind"/>

<remove-project name="CyanogenMod/android_external_vim"/>

<remove-project name="CyanogenMod/android_external_webp"/>

<remove-project name="CyanogenMod/android_external_webrtc"/>

<remove-project name="CyanogenMod/android_external_whispersystems_TextSecure"/>

<remove-project name="CyanogenMod/android_external_whispersystems_WhisperPush"/>

<remove-project name="CyanogenMod/android_external_wpa_supplicant_8"/>

<remove-project name="CyanogenMod/android_external_wpa_supplicant_8_ti"/>

<remove-project name="CyanogenMod/android_external_xmlwriter"/>

<remove-project name="CyanogenMod/android_external_xmp_toolkit"/>

<remove-project name="CyanogenMod/android_external_zip"/>

<remove-project name="CyanogenMod/android_external_zxing"/>

<remove-project name="CyanogenMod/android_frameworks_av"/>

<remove-project name="CyanogenMod/android_frameworks_base"/>

<remove-project name="CyanogenMod/android_frameworks_compile_libbcc"/>

<remove-project name="CyanogenMod/android_frameworks_compile_mclinker"/>

<remove-project name="CyanogenMod/android_frameworks_compile_slang"/>

<remove-project name="CyanogenMod/android_frameworks_ex"/>

<remove-project name="CyanogenMod/android_frameworks_mff"/>

<remove-project name="CyanogenMod/android_frameworks_ml"/>

<remove-project name="CyanogenMod/android_frameworks_opt_calendar"/>

<remove-project name="CyanogenMod/android_frameworks_opt_carddav"/>

<remove-project name="CyanogenMod/android_frameworks_opt_colorpicker"/>

<remove-project name="CyanogenMod/android_frameworks_opt_datetimepicker"/>

<remove-project name="CyanogenMod/android_frameworks_opt_emoji"/>

<remove-project name="CyanogenMod/android_frameworks_opt_hardware"/>

<remove-project name="CyanogenMod/android_frameworks_opt_inputmethodcommon"/>

<remove-project name="CyanogenMod/android_frameworks_opt_mailcommon"/>

<remove-project name="CyanogenMod/android_frameworks_opt_mms"/>

<remove-project name="CyanogenMod/android_frameworks_opt_net_voip"/>

<remove-project name="CyanogenMod/android_frameworks_opt_photoviewer"/>

<remove-project name="CyanogenMod/android_frameworks_opt_timezonepicker"/>

<remove-project name="CyanogenMod/android_frameworks_opt_telephony"/>

<remove-project name="CyanogenMod/android_frameworks_opt_telephony-msim"/>

<remove-project name="CyanogenMod/android_frameworks_opt_vcard"/>

<remove-project name="platform/frameworks/opt/widget"/>

<remove-project name="CyanogenMod/android_frameworks_rs"/>

<remove-project name="CyanogenMod/android_frameworks_support"/>

<remove-project name="CyanogenMod/android_frameworks_testing"/>

<remove-project name="CyanogenMod/android_frameworks_volley"/>

<remove-project name="CyanogenMod/android_frameworks_webview"/>

<remove-project name="CyanogenMod/android_frameworks_wilhelm"/>

<remove-project name="CyanogenMod/android_hardware_akm"/>

<remove-project name="CyanogenMod/android_hardware_broadcom_libbt"/>

<remove-project name="CyanogenMod/android_hardware_broadcom_wlan"/>

<remove-project name="CyanogenMod/android_hardware_cm"/>

<remove-project name="CyanogenMod/android_hardware_invensense"/>

<remove-project name="CyanogenMod/android_hardware_qcom_audio"/>

<remove-project name="CyanogenMod/android_hardware_qcom_audio-caf"/>

<remove-project name="CyanogenMod/android_hardware_qcom_bt"/>

<remove-project name="CyanogenMod/android_hardware_qcom_camera"/>

<remove-project name="CyanogenMod/android_hardware_qcom_display"/>

<remove-project name="CyanogenMod/android_hardware_qcom_display-caf"/>

<remove-project name="CyanogenMod/android_hardware_qcom_gps"/>

<remove-project name="CyanogenMod/android_hardware_qcom_keymaster"/>

<remove-project name="CyanogenMod/android_hardware_qcom_media"/>

<remove-project name="CyanogenMod/android_hardware_qcom_media-caf"/>

<remove-project name="CyanogenMod/android_hardware_qcom_msm8960"/>

<remove-project name="CyanogenMod/android_hardware_qcom_msm8x74"/>

<remove-project name="CyanogenMod/android_hardware_qcom_power"/>

<remove-project name="CyanogenMod/android_hardware_qcom_sensors"/>

<remove-project name="CyanogenMod/android_hardware_qcom_wlan"/>

<remove-project name="CyanogenMod/android_hardware_ril"/>

<remove-project name="CyanogenMod/android_hardware_samsung_slsi_exynos5"/>

<remove-project name="CyanogenMod/android_hardware_ti_omap3"/>

<remove-project name="CyanogenMod/android_hardware_ti_omap4xxx"/>

<remove-project name="CyanogenMod/android_hardware_ti_wlan"/>

<remove-project name="CyanogenMod/android_hardware_ti_wpan"/>

<remove-project name="CyanogenMod/android_libcore"/>

<remove-project name="CyanogenMod/android_libnativehelper"/>

<remove-project name="platform/ndk"/>

<remove-project name="CyanogenMod/android_packages_apps_Apollo"/>

<remove-project name="CyanogenMod/android_packages_apps_BasicSmsReceiver"/>

<remove-project name="CyanogenMod/android_packages_apps_Bluetooth"/>

<remove-project name="CyanogenMod/android_packages_apps_BluetoothExt"/>

<remove-project name="CyanogenMod/android_packages_apps_Browser"/>

<remove-project name="CyanogenMod/android_packages_apps_Calculator"/>

<remove-project name="CyanogenMod/android_packages_apps_Calendar"/>

<remove-project name="CyanogenMod/android_packages_apps_Camera2"/>

<remove-project name="CyanogenMod/android_packages_apps_CellBroadcastReceiver"/>

<remove-project name="CyanogenMod/android_packages_apps_CertInstaller"/>

<remove-project name="CyanogenMod/android_packages_apps_CMAccount"/>

<remove-project name="CyanogenMod/android_packages_apps_CMBugreport"/>

<remove-project name="CyanogenMod/android_packages_apps_CMFileManager"/>

<remove-project name="CyanogenMod/android_packages_apps_CMHome"/>

<remove-project name="CyanogenMod/android_packages_apps_CMUpdater"/>

<remove-project name="CyanogenMod/android_packages_apps_CMWallpapers"/>

<remove-project name="CyanogenMod/android_packages_apps_Contacts"/>

<remove-project name="CyanogenMod/android_packages_apps_ContactsCommon"/>

<remove-project name="CyanogenMod/android_packages_apps_DeskClock"/>

<remove-project name="CyanogenMod/android_packages_apps_Dialer"/>

<remove-project name="CyanogenMod/android_packages_apps_DSPManager"/>

<remove-project name="CyanogenMod/android_packages_apps_Email"/>

<remove-project name="CyanogenMod/android_packages_apps_Exchange"/>

<remove-project name="CyanogenMod/android_packages_apps_Gallery2"/>

<remove-project name="CyanogenMod/android_packages_apps_HTMLViewer"/>

<remove-project name="CyanogenMod/android_packages_apps_InCallUI"/>

<remove-project name="CyanogenMod/android_packages_apps_KeyChain"/>

<remove-project name="CyanogenMod/android_packages_apps_LockClock"/>

<remove-project name="CyanogenMod/android_packages_apps_Mms-caf"/>

<remove-project name="CyanogenMod/android_packages_apps_Nfc"/>

<remove-project name="platform/packages/apps/OneTimeInitializer"/>

<remove-project name="CyanogenMod/android_packages_apps_PackageInstaller"/>

<remove-project name="CyanogenMod/android_packages_apps_PhoneCommon"/>

<remove-project name="CyanogenMod/android_packages_apps_Provision"/>

<remove-project name="CyanogenMod/android_packages_apps_Settings"/>

<remove-project name="CyanogenMod/android_packages_apps_SmartCardService"/>

<remove-project name="CyanogenMod/android_packages_apps_SoundRecorder"/>

<remove-project name="CyanogenMod/android_packages_apps_SpeechRecorder"/>

<remove-project name="CyanogenMod/android_packages_apps_Stk"/>

<remove-project name="CyanogenMod/android_packages_apps_Tag"/>

<remove-project name="CyanogenMod/android_packages_apps_ThemeChooser"/>

<remove-project name="CyanogenMod/android_packages_apps_Torch"/>

<remove-project name="CyanogenMod/android_packages_apps_Trebuchet"/>

<remove-project name="CyanogenMod/android_packages_apps_UnifiedEmail"/>

<remove-project name="CyanogenMod/android_packages_apps_VideoEditor"/>

<remove-project name="CyanogenMod/android_packages_apps_VoiceDialer"/>

<remove-project name="CyanogenMod/android_packages_apps_VoicePlus"/>

<remove-project name="CyanogenMod/android_packages_experimental"/>

<remove-project name="CyanogenMod/android_packages_inputmethods_LatinIME"/>

<remove-project name="CyanogenMod/android_packages_inputmethods_OpenWnn"/>

<remove-project name="CyanogenMod/android_packages_inputmethods_PinyinIME"/>

<remove-project name="CyanogenMod/android_packages_providers_ApplicationsProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_CalendarProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_ContactsProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_DownloadProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_MediaProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_PartnerBookmarksProvide r"/>

<remove-project name="CyanogenMod/android_packages_providers_TelephonyProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_ThemesProvider"/>

<remove-project name="CyanogenMod/android_packages_providers_UserDictionaryProvider"/>

<remove-project name="CyanogenMod/android_packages_screensavers_Basic"/>

<remove-project name="CyanogenMod/android_packages_screensavers_PhotoTable"/>

<remove-project name="CyanogenMod/android_packages_screensavers_WebView"/>

<remove-project name="CyanogenMod/android_packages_services_Telephony"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_Basic"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_Galaxy4"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_HoloSpiral"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_LivePicker"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_MagicSmoke"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_MusicVisualization"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_NoiseField"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_PhaseBeam"/>

<remove-project name="CyanogenMod/android_packages_wallpapers_PhotoPhase"/>

<remove-project name="platform/pdk"/>

<remove-project name="CyanogenMod/android_prebuilt"/>

<remove-project name="platform/prebuilts/clang/darwin-x86/3.1"/>

<remove-project name="platform/prebuilts/clang/darwin-x86/3.2"/>

<remove-project name="platform/prebuilts/clang/darwin-x86/arm/3.3"/>

<remove-project name="platform/prebuilts/clang/darwin-x86/host/3.3"/>

<remove-project name="platform/prebuilts/clang/darwin-x86/mips/3.3"/>

<remove-project name="platform/prebuilts/clang/darwin-x86/x86/3.3"/>

<remove-project name="platform/prebuilts/clang/linux-x86/3.1"/>

<remove-project name="platform/prebuilts/clang/linux-x86/3.2"/>

<remove-project name="platform/prebuilts/clang/linux-x86/arm/3.3"/>

<remove-project name="platform/prebuilts/clang/linux-x86/host/3.3"/>

<remove-project name="platform/prebuilts/clang/linux-x86/mips/3.3"/>

<remove-project name="platform/prebuilts/clang/linux-x86/x86/3.3"/>

<remove-project name="platform/prebuilts/devtools"/>

<remove-project name="platform/prebuilts/eclipse"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.7"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.7"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.7"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/host/headers"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.7"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6"/>

<remove-project name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.7"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.4.3"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.6"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/mips/mipsel-linux-android-4.7"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6"/>

<remove-project name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7"/>

<remove-project name="platform/prebuilts/python/darwin-x86/2.7.5"/>

<remove-project name="platform/prebuilts/python/linux-x86/2.7.5"/>

<remove-project name="platform/prebuilts/qemu-kernel"/>

<remove-project name="platform/prebuilts/runtime"/>

<remove-project name="platform/prebuilts/tools"/>

<remove-project name="CyanogenMod/android_system_media"/>

<remove-project name="CyanogenMod/android_system_netd"/>

<remove-project name="CyanogenMod/android_system_qcom"/>

<remove-project name="CyanogenMod/android_system_security"/>

<remove-project name="platform/tools/adt/eclipse"/>

<remove-project name="platform/tools/adt/idea"/>

<remove-project name="platform/tools/base"/>

<remove-project name="platform/tools/build"/>

<remove-project name="platform/tools/emulator"/>

<remove-project name="platform/tools/external/fat32lib"/>

<remove-project name="platform/tools/external/gradle"/>

<remove-project name="platform/tools/idea"/>

<remove-project name="platform/tools/studio/cloud"/>

<remove-project name="platform/tools/swt"/>

<remove-project name="cyngn/android_vendor_cyngn"/>

<project name="CyanogenMod/android_bootable_recovery" revision="cm-11.0" path="../recoveryCWM"/>

<project name="PhilZ-cwm6/philz_touch_cwm6" revision="cm-11.0" path="../recoveryPhilz"/>

<project name="omnirom/android_bootable_recovery" revision="android-4.4" path="../recoveryTWRP"/>

<project name="ProjectOpenCannibal/android_bootable_recovery-cm" revision="cm-11.0-dev" path="../recoveryCOT"/>

</manifest>

Si os habéis fijado solo he remarcado 4 líneas ( en rojo ), son las que se deben eliminar menos 1, que sera la base para hacer el kernel que seleccionemos, siendo cada uno para usar alguna de las versiones para una Rom Kit-Kat ( lo remarcado en negrita es la rama que usaremos de cada kernel base ), y donde indica proyect name, es el proyecto base del que sale la base del kernel real, lo demás son cosas necesarias que se añaden al kernel, y donde indica path es el nombre con el que distinguermos el kernel por su base al compilarlo, ya que no debemos confundirnos en ello si pretendemos desarrollar correctamente el kernel, no sea que tomenos por error unas características para mejorarlo, y usemos la base incorrecta, pudiendo producir errores en su funcionamiento al estár mal configurado por nuestra parte en ese caso.

Y tenemos ahora 2 ramas para usar según la Rom a la que este destinado nuestro kernel.

Android 4.4:

CyanogenMod para Android 4.4 CWM 6.0.4.2-6.0.5.1

Omni para Android 4.4 TWRP 2.5.1.0-2.8.1.0

Philz Touch Advanced cwm6 para Android 4.4 Philz 6.0.0-6.59.3

Proyect Open Cannibal para Android 4.4 CTO ¿?-¿?

Y Android 5.0:

CyanogenMod para Android 5.0 CWM 6.0.5.0-6.0.5.1

Omni para Android 5.0 TWRP 2.8.0.0-2.8.3.0

Philz Touch Advanced cwm6 para Android 5.0 Philz 6.48.4-6.59.3

Proyect Open Cannibal para Android 5.0 CTO ¿?-¿?

Ya seleccionada la rama y kernel base que vamos a usar debemos dejar la carpeta manifest_local y archivos manifest_local.xml colocada justo dentro de la carpeta .repo, para que tome esos datos como validos y nos descargue lo no seleccionado, y la base del kernel que hemos indicado al final del manifest_local.xml.

Tras esto se debe hacer hacer la sincronización con la Repo, para descargarlo, ya que todavía estamos en esto:

$ repo sync

Esto según la línea a internet puede tardar más o menos, recordar que se descargara mucho más de lo que realmente se crea, ya que se descarga puro y es más pesado que compilado, pero al ser sobre los 2 Gigas lo que debe descargarse si tenemos una buena conexión de fibra en menos que un café lo tendremos sincronizado en nuestro pc para empezar a compilar, pero solo tras meter la base del recovery/kernel de nuestro dispositivo, ya que solo hemos descargado lo básico para motarlo para el dispositivo seleccionado, pero al no estar todavía nuestro kernel no se puede compilar ninguno funcional.

Seguimos en el 2º post

Agradecimientos a:

luisetex84 (http://www.htcmania.com/member.php?u=1151665) por su ayuda para ir realizando los pasos he iniciarme con su ayuda

A lo hilos en los que me he ido guiando para hacer este tutorial:
[DEV]How to compile TWRP touch recovery (http://forum.xda-developers.com/showthread.php?t=1943625)
[GUIDE] How to compile PhilZ Touch 6 Recovery for ARM android devices using BBQLinux (http://forum.xda-developers.com/android/development/huide-how-to-compile-philz-touch-6-t2862706)

fusionero
14/01/15, 04:06:49
Bueno seguiré añadiendo conforme yo misma siga, que hasta ahora voy por aquí.

Pero en principio son ir seleccionando el Recovery base en el que trabajar, teniendo las opciones de elegir entre algunas conocidas o que empiezan a conocerse:

CWM - versión actual 6.0.5.1
TRWP - versión actual 2.8.4.0 y ya se ve en pruebas la 2.8.4.1
Philz - versión actual 6.59.0 basada en CWM 6.0.5.1 y por ahora paralizada su actualización
CTR - versión actual 3

Pero sigue con esta guía ( en inglés ): How to compile TWRP touch recovery (http://forum.xda-developers.com/showthread.php?t=1943625[DEV) si vamos a usar un kernel TWRP, o bien este otro pendiente si vamos a usar CWM, o bien este [GUIDE] How to compile PhilZ Touch 6 Recovery for ARM android devices using BBQLinux (http://forum.xda-developers.com/android/development/huide-how-to-compile-philz-touch-6-t2862706) si queremos hacer un Philz Touch.

Ya para ser especificos nos queda leernos los pasos 2, 3, 4 y 5; y el 2º post para ser especificos con las CPU's MediaTeck del último hilo: [GUIDE] How to compile PhilZ Touch 6 Recovery for ARM android devices using BBQLinux (http://forum.xda-developers.com/android/development/huide-how-to-compile-philz-touch-6-t2862706)

PASO 2

Syncing Part-Source


Updates -> Refer to this post . . . (http://forum.xda-developers.com/showpost.php?p=55971492&postcount=58)

Download (http://forum.xda-developers.com/devdb/project/dl/?id=8266) & unzip the script to your [HOME]. Start Mate Terminal (http://mate-desktop.org/#mate-terminal) & follow below command.
Code:
chmod 777 ~/PhilZ
./PhilZ <- Execute it by typing dot forward-slash PhilZ
Screenshot
Click image for larger version

Name: syncing.png
Views: 1284
Size: 121.7 KB
ID: 2920278

You can stop the script at any time by pressing Ctrl + z
To resume then execute the script again.

Misc Tips


Pls be patient, first sync will take quite awhile depending on your ISP

Screenshot of Part-Source script when finish syncing
Name: script.jpg
Views: 7233
Size: 66.7 KB

You can also drag & drop it from your host OS
Name: dnd PhilZ boot.jpg
Views: 7264
Size: 101.0 KB

Pull your MTK device boot.img directly to BBQLinux then you have to enable the USB port on Virtualbox first.
Name: USB.jpg
Views: 7216
Size: 49.2 KB

Check your MT65xx_Android_scatter.txt for boot or recovery partition size

partition_index: SYS9
partition_name: BOOTIMG
file_name: boot.img
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x1DA0000
physical_start_addr: 0x1DA0000
partition_size: 0xA00000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00

partition_index: SYS10
partition_name: RECOVERY
file_name: recovery.img
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x27A0000
physical_start_addr: 0x27A0000
partition_size: 0x1400000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00

You can also use adb shell cat /proc/dumchar_info to check too.

Part_Name Size StartAddr Type MapTo
bootimg 0x0000000000A00000 0x0000000001DA0000 2 /dev/block/mmcblk0
recovery 0x0000000001400000 0x00000000027A0000 2 /dev/block/mmcblk0

Use Calculator (http://en.wikipedia.org/wiki/Calculator_(Windows)) or Online Hex to Dec (http://www.binaryhexconverter.com/hex-to-decimal-converter) & convert it to decimal.

0xA00000 = 10485760
0x1400000 = 20971520

adb shell "dd if=/dev/bootimg of=/mnt/sdcard/boot.img bs=10485760 count=1"
adb pull /mnt/sdcard/boot.img
adb shell rm /mnt/sdcard/boot.img
OR
adb shell "dd if=/dev/recovery of=/mnt/sdcard/recovery.img bs=20971520 count=1"
adb pull /mnt/sdcard/recovery.img
adb shell rm /mnt/sdcard/recovery.img

PASO 3

Setting up the files


Now that you have sync the Part-Source, you will need to use mkvendor.sh to generate the skeleton files for building PhilZ Touch.

Copy your device boot.img or recovery.img to [HOME]

cd ~/cm11
build/tools/device/mkvendor.sh vendor_name device_name ~/boot.img
OR
build/tools/device/mkvendor.sh vendor_name device_name ~/recovery.img

Eg. build/tools/device/mkvendor.sh Lenovo S939 ~/boot.img


mkvendor.sh will auto-generate eight files for your device needed for building PhilZ Touch

AndroidBoard.mk
AndroidProducts.mk
BoardConfig.mk
cm.mk
device_device_name.mk
kernel
recovery.fstab
system.prop

Screenshot of mkvendor.sh
Click image for larger version

Name: mkvendor.sh.png
Views: 1206
Size: 80.8 KB
ID: 2920279

You need to edit the files as listed below only. Below are examples, do not copy & paste, refer to here (http://forum.xda-developers.com/android/development/huide-how-to-compile-philz-touch-6-t2862706/post55419902) & here (http://forum.xda-developers.com/showpost.php?p=55438125&postcount=42) .

Put all PhilZ Touch build flags at the bottom of the BoardConfig.mk under a heading of #PhilZ Touch build flags for easy reference

~/cm11/device/Lenovo/S939/BoardConfig.mk

USE_CAMERA_STUB := true

# inherit from the proprietary version
-include vendor/Lenovo/S939/BoardConfigVendor.mk

TARGET_ARCH := arm
TARGET_NO_BOOTLOADER := true
TARGET_BOARD_PLATFORM := unknown <- Non-critical, you can either leave it as it is or change to any name
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
TARGET_CPU_VARIANT := cortex-a7 <- Critical, either cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a15, krait, scorpion or generic
TARGET_CPU_SMP := true
ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_BOOTLOADER_BOARD_NAME := S939

BOARD_KERNEL_CMDLINE :=
BOARD_KERNEL_BASE := 0x10000000
BOARD_KERNEL_PAGESIZE := 2048

# fix this up by examining /proc/mtd on a running device
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x1400000 <- Change this accordingly to your recovery size so that build will error when its oversize
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x105c0000
BOARD_FLASH_BLOCK_SIZE := 131072

TARGET_PREBUILT_KERNEL := device/Lenovo/S939/kernel

BOARD_HAS_NO_SELECT_BUTTON := true

#PhilZ Touch build flags for MTK
TARGET_COMMON_NAME := Lenovo S939
BOARD_USE_MTK_LAYOUT := true
BOARD_MTK_BOOT_LABEL := "/bootimg"
BOARD_USE_NTFS_3G := false
BRIGHTNESS_SYS_FILE := "/sys/class/leds/lcd-backlight/brightness"
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/devices/virtual/android_usb/android0/f_mass_storage/lun%d/file" <- Credits to RD chrmhoffmann
TARGET_SCREEN_HEIGHT := 1280
TARGET_SCREEN_WIDTH := 720
BOARD_CUSTOM_BOOTIMG_MK := device/Lenovo/S939/boot.mk <- Credits to RD chrmhoffmann. MTK uses custom mkbootimg

~/cm11/device/Lenovo/S939/cm.mk

## Specify phone tech before including full_phone
$(call inherit-product, vendor/cm/config/gsm.mk)

# Release name
PRODUCT_RELEASE_NAME := S939

# Inherit some common CM stuff.
#$(call inherit-product, vendor/cm/config/common_full_phone.mk) <- Disable it to use this Part-Source or ERROR 1. You don't need this for building PhilZ Touch

# Inherit device configuration
$(call inherit-product, device/Lenovo/S939/device_S939.mk)

## Device identifier. This must come after all inclusions
PRODUCT_DEVICE := S939
PRODUCT_NAME := cm_S939
PRODUCT_BRAND := Lenovo
PRODUCT_MODEL := S939
PRODUCT_MANUFACTURER := Lenovo

~/cm11/device/Lenovo/S939/recovery.fstab

# Android fstab file.
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK

/dev/bootimg /bootimg emmc defaults defaults
/dev/recovery /recovery emmc defaults defaults
/dev/uboot /uboot emmc defaults defaults
/emmc@android /system ext4 ro,noatime wait
/emmc@cache /cache ext4 noatime,nosuid,nodev,noauto_da_alloc wait
/emmc@usrdata /data ext4 noatime,nosuid,nodev,noauto_da_alloc wait,encryptable=footer

/devices/platform/mtk-msdc.0/mmc_host/mmc0 auto vfat defaults voldmanaged=sdcard0:4 <- Change accordingly to your MTK fat partition no.
/devices/platform/mtk-msdc.1/mmc_host/mmc1 auto vfat defaults voldmanaged=sdcard1:auto

~/cm11/device/Lenovo/S939/device_S939.mk

$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)

# The gps config appropriate for this device
#$(call inherit-product, device/common/gps/gps_us_supl.mk) <- Disable it to use this Part-Source or ERROR 1.

$(call inherit-product-if-exists, vendor/Lenovo/S939/S939-vendor.mk)

DEVICE_PACKAGE_OVERLAYS += device/Lenovo/S939/overlay

LOCAL_PATH := device/Lenovo/S939
ifeq ($(TARGET_PREBUILT_KERNEL),)
LOCAL_KERNEL := $(LOCAL_PATH)/kernel
else
LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)
endif

PRODUCT_COPY_FILES +=
$(LOCAL_KERNEL):kernel

$(call inherit-product, build/target/product/full.mk)

PRODUCT_BUILD_PROP_OVERRIDES += BUILD_UTC_DATE=0
PRODUCT_NAME := full_S939
PRODUCT_DEVICE := S939

#PhilZ Touch
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/recovery.fstab:recovery/root/fstab.mt6592 <- adb shell getprop ro.hardware to identify it.

~/cm11/device/Lenovo/S939/boot.mk
Credits to Chris Hoffmann (https://twitter.com/chrmhoffmann) AKA RD chrmhoffmann (https://github.com/chrmhoffmann/android_device_wiko_stairway/blob/cm-11.0/boot.mk) , now you can automate the whole build process, no need to unpack/ repack after building !

define make_header
perl -e 'print pack("a4 L a32 a472", "x88x16x88x58", $$ARGV[0], $$ARGV[1], "xFF"x472)' $(1) $(2) > $(3)
endef

$(recovery_ramdisk).mtk.header: $(recovery_ramdisk)
size=$$($(call get-file-size,$(recovery_ramdisk))); \
$(call make_header, $$((size)), "RECOVERY", $@)
$(recovery_ramdisk).mtk: $(MKBOOTIMG) $(recovery_ramdisk).mtk.header
$(call pretty,"Adding MTK header to recovery ramdisk.")
cat $(recovery_ramdisk).mtk.header $(recovery_ramdisk) > $@

INTERNAL_MTK_RECOVERYIMAGE_ARGS := \
--kernel $(PRODUCT_OUT)/kernel \
--ramdisk $(recovery_ramdisk).mtk

$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTIMG) \
$(recovery_ramdisk).mtk $(PRODUCT_OUT)/kernel \
@echo -e ${CL_CYN}"----- Making recovery image ------"${CL_RST}
$(MKBOOTIMG) $(INTERNAL_MTK_RECOVERYIMAGE_ARGS) \
$(BOARD_MKBOOTIMG_ARGS) --output $@
$(hide) $(call assert-max-image-size,$@, \
$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)
@echo -e ${CL_CYN}"Made recovery image: $@"${CL_RST}

PASO 4

Start Building it !


Below are the commands to build, thats it !

cd ~/cm11
export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 50G
source build/envsetup.sh
lunch cm_S939-eng <- Change accordingly to your device_name
make -j8 recoveryimage

Video Preview (http://www.youtube.com/watch?v=KVAgAwfU7Oo)

Misc Tips

First build will take quite awhile, pls be patient however subsequence build will be quick b'cos of ccache (https://ccache.samba.org/) .

if you hate cli (http://en.wikipedia.org/wiki/Command-line_interface) like i do then you can automate it, no need to type it every time since you are building for the same device that you own.

Click image for larger version

Name: s939.png
Views: 887
Size: 30.3 KB
ID: 2935830

Use geany (http://en.wikipedia.org/wiki/Geany) & fill in the commands accordingly to your device.

Click image for larger version

Name: execute.png
Views: 801
Size: 37.3 KB
ID: 2935831
Make it executable by right-click at the file name -> Properties -> Permissions -> Put a Tick at Allow executing file as program. Execute it by typing ./s939 or whatever your file name is.

GNU make

GNU make (http://en.wikipedia.org/wiki/Make_(software)) can handle parallel tasks with a -j# argument.

make -j# recoveryimage

Replace the # with the core count +1, so if you have a dual core it's -j3 and a quad core becomes -j5, etc.

Above is applicable for Native-Boot, on Virtualbox -j8 will work even if you have the old Pentium II except your host OS will lag.

make -j8 recoveryimage 2>&1 | tee ~/Documents/compile.log

You can also use above command so that you can refer to the compile.log for error checking.

Subsequent Build

Refer to post #2 (http://forum.xda-developers.com/showpost.php?p=55141153&postcount=2) -> Misc Tips -> Make clean before each recompiling or your flag changes will not be picked up !


PASO 5

Push it directly to your device


Screenshot of Build Completed
Click image for larger version

Name: complete.png
Views: 1060
Size: 120.0 KB
ID: 2920729

Screenshot of adb push
Click image for larger version

Name: push.png
Views: 990
Size: 34.8 KB
ID: 2920732

adb push ~/cm11/out/target/product/S939/recovery.img /mnt/sdcard
adb shell "dd if=/mnt/sdcard/recovery.img of=/dev/recovery"
adb reboot recovery

Misc Tips

You can also use Flashify (https://play.google.com/store/apps/details?id=com.cgollner.flashify&hl=en) or Mobileuncle (https://play.google.com/store/apps/details?id=com.mobileuncle.toolbox&hl=en) to install it too.
Congrats, now you have compiled & install PhilZ Touch to your MTK device . . .

Notes about 4.4 Kit Kat ROMs and SELinux

XDA members that has success in building PhilZ Touch for any other android devices please share your experience & tips here too so that this will help out others when they face the same problem . . .

Source (http://wiki.cyanogenmod.org/w/Doc:_porting_intro#Method_1:_Use_mkvendor.sh_to_ge nerate_skeleton_files)

Confirmed working PhilZ Touch using this guide(mkvendor.sh technique)

Todos los dispositivos MediaTek (http://www.mediatek.com/en/products/mobile-communications/smartphone1/)(MT65xx) o los dispositivos MediaTek (http://www.mediatek.com/en/products/mobile-communications/tablet/)(MT83xx)
LG L90(msm8226) thanks to shoxxy (http://forum.xda-developers.com/showpost.php?p=55141926&postcount=3)

Ya también recuerdo que se puede usar autentificación para nuestras cosas, y así tener más seguridad por si usamos VPN o una IP que usen muchos clientes ( servidores remotos con múltiples clientes con la misma IP ):

Ya pendiente seguir a partir de esto para continuar con las opciones: - Pendiente traducir

https://source.android.com/source/downloading.html#using-authentication

Y aquí el hilo si queremos compilar un TWRP, que falta reducirlo también, [DEV]How to compile TWRP touch recovery (http://forum.xda-developers.com/showthread.php?t=1943625)

All of TWRP 2.x source is public. You can compile it on your own. This guide isn't going to be a step-by-step, word-for-word type of guide. If you're not familiar with basic Linux commands and/or building in AOSP then you probably won't be able to do this.

You can currently use Omni 4.3, Omni 4.4, Omni 5.0, CM10.0, CM10.1, CM10.2, and CM11.0 source code. Omni 4.4 or 5.0 is recommended. (If for some reason you need to compile in an older tree like CM9 or CM7, you will have to use the android-4.4 branch which we will not continue to update.)

If you are using CM, you'll need to replace CM/bootable/recovery with this:
https://github.com/omnirom/android_bootable_recovery
Select the newest branch available. This step is not necessary with Omni because Omni already includes TWRP source by default.

*BEFORE YOU COMPILE*
Note: If you add or change any flags, you will need to make clean or make clobber before recompiling or your flag changes will not be picked up.

Now that you have the source code, you'll need to set or change a few build flags for your device(s). Find the BoardConfig.mk for your device. The BoardConfig.mk is in your devices/manufacturer/codename folder (e.g. devices/lge/hammerhead/BoardConfig.mk). First, scan the BoardConfig.mk file for
TARGET_RECOVERY_INITRC :=
If your device has this line, it will have a path to a custom, prebuilt init.rc that is used in recovery. Most likely you will need to change the custom init.rc slightly. Find the recovery's init.rc file and open it. Near the top you will see something like this:
Code:
on init

$ export PATH /sbin

$ export LD_LIBRARY_PATH .:/sbin

Add the last line needed. This line is needed to get the linker running. Unlike ClockworkMod, TWRP is a dynamically linked recovery. Dynamic linking allows us to save a considerable amount of space to help make sure that TWRP recovery images will fit on more devices. It also lets us use dynamically linked touchscreen binaries as seen on the Motorola Photon and Atrix and the HP TouchPad without having to mount /system.

Your board config also needs to include architecture and platform settings. Usually these are already included if you're using device configs that someone else created, but if you created your own, you may need to add them. Without them, recovery may seg fault during startup and you'll just see the teamwin curtain flash on the screen over and over.

We usually put all of our flags at the bottom of the BoardConfig.mk under a heading of #twrp For all devices you'll need to set a resolution. TWRP needs to know the resolution at compile time so that it knows what stock theme to include. You can only use resolutions that have a theme so if you don't see your resolution, you'll have to pick one that's less than or equal to your resolution. You can find the list of stock themes in bootable/recovery/gui/devices. So if your device has a 540x960 display, you would add this:
DEVICE_RESOLUTION := 540x960

Note that themes do not rotate, so the 1280x800 theme is intended for tablets and would not work on the Samsung Galaxy Note 1 that expects a 800x1280 type of theme.

In addition to the resolution, we have the following build flags:
RECOVERY_SDCARD_ON_DATA := true -- this enables proper handling of /data/media on devices that have this folder for storage (most Honeycomb and devices that originally shipped with ICS like Galaxy Nexus)
RECOVERY_GRAPHICS_USE_LINELENGTH := true -- fixes slanty looking graphics on some devices
BOARD_HAS_NO_REAL_SDCARD := true -- disables things like sdcard partitioning and may save you some space if TWRP isn't fitting in your recovery patition
TW_INCLUDE_DUMLOCK := true -- includes HTC Dumlock for devices that need it
TW_NO_BATT_PERCENT := true -- disables the display of the battery percentage for devices that don't support it properly
TW_CUSTOM_POWER_BUTTON := 107 -- custom maps the power button for the lockscreen
TW_NO_REBOOT_BOOTLOADER := true -- removes the reboot bootloader button from the reboot menu
TW_NO_REBOOT_RECOVERY := true -- removes the reboot recovery button from the reboot menu
TW_NO_USB_STORAGE := true -- removes the USB storage button on devices that don't support USB storage
RECOVERY_TOUCHSCREEN_SWAP_XY := true -- swaps the mapping of touches between the X and Y axis
RECOVERY_TOUCHSCREEN_FLIP_Y := true -- flips y axis touchscreen values
RECOVERY_TOUCHSCREEN_FLIP_X := true -- flips x axis touchscreen values
TW_ALWAYS_RMRF := true -- forces the rm -rf option to always be on (needed for some Motorola devices)
TW_NEVER_UNMOUNT_SYSTEM := true -- never unmount system (needed for some Motorola devices)
TW_INCLUDE_INJECTTWRP := true -- adds ability to inject TWRP into some Samsung boot images for Samsung devices that have recovery as a second ramdisk in the boot image
TW_DEFAULT_EXTERNAL_STORAGE := true -- defaults to external storage instead of internal on dual storage devices (largely deprecated)
TWRP_EVENT_LOGGING := true -- enables touch event logging to help debug touchscreen issues (don't leave this on for a release - it will fill up your logfile very quickly)

Here's some flags that may help you, but are not specific to TWRP (works in CWM too):
This flag has multiple options, but can be used to set different graphics modes that may be need to correct color space issues on some devices:
TARGET_RECOVERY_PIXEL_FORMAT := "BGRA_8888"
TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888"
TARGET_RECOVERY_PIXEL_FORMAT := "RGB_565"

BOARD_HAS_FLIPPED_SCREEN := true -- flips the screen upside down for screens that were mounted upside-down
TARGET_PREBUILT_RECOVERY_KERNEL := path/to/kernel -- use to specify a kernel specifically for building recovery

*RECOVERY.FSTAB*
TWRP 2.5 and higher supports some new recovery.fstab features that you can use to extend TWRP's backup/restore capabilities. You do not have to add fstab flags as most partitions are handled automatically.

Note that TWRP does not currently support the "fstab 2" version of fstab files seen in 4.3 or higher. You will still need to use the "old" format of fstab for TWRP (example of that format is below). To maximize TWRP's compatibility with your build tree, you can create a twrp.fstab and use PRODUCT_COPY_FILES to place the file in /etc/twrp.fstab When TWRP boots, if it finds a twrp.fstab in the ramdisk it will rename /etc/recovery.fstab to /etc/recovery.fstab.bak and then rename /etc/twrp.fstab to /etc/recovery.fstab. Effectively this will "replace" the fstab 2 file that your device files are providing with the TWRP fstab allowing you to maintain compatibility within your device files and with other recoveries.
Code:

$ PRODUCT_COPY_FILES += device/lge/hammerhead/twrp.fstab:recovery/root/etc/twrp.fstab

The fstab in TWRP can contain some "flags" for each partition listed in the fstab.

Here's a sample TWRP fstab for the Galaxy S4 that we will use for reference:
Code:

/boot emmc /dev/block/platform/msm_sdcc.1/by-name/boot
/system ext4 /dev/block/platform/msm_sdcc.1/by-name/system
/data ext4 /dev/block/platform/msm_sdcc.1/by-name/userdata length=-16384
/cache ext4 /dev/block/platform/msm_sdcc.1/by-name/cache
/recovery emmc /dev/block/platform/msm_sdcc.1/by-name/recovery
/efs ext4 /dev/block/platform/msm_sdcc.1/by-name/efs flags=display="EFS";backup=1
/external_sd vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="Micro SDcard";storage;wipeingui;removable
/usb-otg vfat /dev/block/sda1 /dev/block/sda flags=display="USB-OTG";storage;wipeingui;removable
/preload ext4 /dev/block/platform/msm_sdcc.1/by-name/hidden flags=display="Preload";wipeingui;backup=1
/modem ext4 /dev/block/platform/msm_sdcc.1/by-name/apnhlos
/mdm emmc /dev/block/platform/msm_sdcc.1/by-name/mdm

Flags are added to the end of the partition listing in the fstab separated by white space (spaces or tabs are fine). The flags affect only that partition but not any of the others. Flags are separated by semicolons. If your display name is going to have a space, you must surround the display name with quotes.
Code:

$ /external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDcard";storage;wipeingui;removable

The flags for this partition give it a display name of "Micro SDcard" which is displayed to the user. wipeingui makes this partition available for wiping in the advanced wipe menu. The removable flag indicates that sometimes this partition may not be present preventing mounting errors from being displayed during startup. Here is a full list of flags:
removable -- indicates that the partition may not be present preventing mounting errors from being displayed during boot
storage -- indicates that the partition can be used as storage which makes the partition available as storage for backup, restore, zip installs, etc.
settingsstorage -- only one partition should be set as settings storage, this partition is used as the location for storing TWRP's settings file
canbewiped -- indicates that the partition can be wiped by the back-end system, but may not be listed in the GUI for wiping by the user
userrmrf -- overrides the normal format type of wiping and only allows the partition to be wiped using the rm -rf command
backup= -- must be succeeded by the equals sign, so backup=1 or backup=0, 1 indicates that the partition can be listed in the backup/restore list while 0 ensures that this partition will not show up in the backup list.
wipeingui -- makes the partition show up in the GUI to allow the user to select it for wiping in the advanced wipe menu
wipeduringfactoryreset -- the partition will be wiped during a factory reset
ignoreblkid -- blkid is used to determine what file system is in use by TWRP, this flag will cause TWRP to skip/ignore the results of blkid and use the file system specified in the fstab only
retainlayoutversion -- causes TWRP to retain the .layoutversion file in /data on devices like Sony Xperia S which sort of uses /data/media but still has a separate /sdcard partition
symlink= -- causes TWRP to run an additional mount command when mounting the partition, generally used with /data/media to create /sdcard
display= -- sets a display name for the partition for listing in the GUI
storagename= -- sets a storage name for the partition for listing in the GUI storage list
backupname= -- sets a backup name for the partition for listing in the GUI backup/restore list
length= -- usually used to reserve empty space at the end of the /data partition for storing the decryption key when Android's full device encryption is present, not setting this may lead to the inability to encrypt the device
canencryptbackup= -- 1 or 0 to enable/disable, makes TWRP encrypt the backup of this partition if the user chooses encryption (only applies to tar backups, not images)
userdataencryptbackup= -- 1 or 0 to enable/disable, makes TWRP encrypt only the userdata portion of this partition, certain subfuldes like /data/app would not be encrypted to save time
subpartitionof= -- must be succeeded by the equals sign and the path of the partition it is a subpartition of. A subpartition is treated as "part" of the main partition so for instance, TWRP automatically makes /datadata a subpartition of /data. This means that /datadata will not show up in the GUI listings, but /datadata would be wiped, backed up, restored, mounted, and unmounted anytime those operations are performed on /data. A good example of the use of subpartitions is the 3x efs partitions on the LG Optimus G:
Code:

/efs1 emmc /dev/block/mmcblk0p12 flags=backup=1;display=EFS
/efs2 emmc /dev/block/mmcblk0p13 flags=backup=1;subpartitionof=/efs1
/efs3 emmc /dev/block/mmcblk0p14 flags=backup=1;subpartitionof=/efs1

This lumps all 3 partitions into a single "EFS" entry in the TWRP GUI allowing all three to be backed up and restored together under a single entry.

If you have questions, feel free to stop by #twrp on Freenode. If you post here I may not see it for a while as I have lots of threads out there and there's no way for me to keep track of them all. If you successfully port TWRP to a new device, please let us know! We love to hear success stories!

If you have code changes that you'd like to submit, please submit them through the Omni Gerrit server. Guide is here.

Once you get Omni or CM sync'ed and your TWRP flags set, you should do a source ./build/envsetup.sh We usually lunch for the device in question, so something like "lunch omni_hammerhead-eng".

After you lunch successfully for your device this is the command used for most devices:
Code:

$ make clean && make -j# recoveryimage

Replace the # with the core count +1, so if you have a dual core it's -j3 and a quad core becomes -j5, etc. If you're dealing with a "typical" Samsung device, then you'll need to
Code:

$ make -j# bootimage

Most Samsung devices have the recovery included as an extra ramdisk in the boot image instead of a separate recovery partition as found on most other devices.

Notes about 4.4 Kit Kat ROMs and SELinux
There's absolutely no SELinux support in ICS trees or older. libselinux is not included in these trees and some dependencies for libselinux don't exist elsewhere in these older trees so there's no way to get SELinux support unless you move to a newer tree. I recommend using a 4.3 based tree or higher.

SELinux support is included in all builds of TWRP so long as you build in a tree that has libselinux present. However, for SELinux support to work, your kernel must support EXT4 security labels as well. If you're using an older kernel, your TWRP won't support SELinux and you will get errors when installing 4.4 Kit Kat ROMs due to set_metadata not being able to set SELinux contexts. You'll see an error in the recovery log stating something along the lines of "Operation not supported on transport endpoint." This means you need to add proper support to the kernel you are using in recovery. (Yes, at least in most cases, recovery has its own kernel.)

In the kernel source I was testing, the needed flag was CONFIG_EXT4_FS_SECURITY=y and the option was called Ext4 Security Labels under the file systems menu. If you want full SELinux in your kernel you will need to add auditing support (usually found under general setup) then enable SELinux under security options. There's multiple flags and some dependencies involved so your setup may vary slightly.

The android-4.4 branch of TWRP from Omni now includes a check during boot. You will see text in the log and in the console indicating the SELinux status. This should help you identify what issue(s) you may have with SELinux support.

Deprecated build flags:
For TWRP < 2.5:
The below is how you can add custom / special partitions to the list of partitions available for backup. The SP1_NAME must match the name of a partition defined in recovery.fstab. The SP1_DISPLAY_NAME is the name displayed on the backup page if it needs to be different than SP1_NAME. SP1_BACKUP_METHOD defines how the partition should be backed up (files or image). And SP1_MOUNTABLE determines if the partition can be mounted.
SP1_NAME := "pds"
SP1_BACKUP_METHOD := files
SP1_MOUNTABLE := 1
SP2_NAME := "osh"
SP2_DISPLAY_NAME := "Webtop"
SP2_BACKUP_METHOD := files
SP2_MOUNTABLE := 1
SP3_NAME := "preinstall"
SP3_BACKUP_METHOD := image
SP3_MOUNTABLE := 0


Y ya de paso una buena opción para probarlo sin arriesgar nuestro dispositivo puede ser con esto ( sigue faltandome traducirlo ):

You can now boot TWRP in an emulator. If you're trying to help develop TWRP, this can be a huge help as you don't have to risk your device and you can do everything directly on your computer.


Download this set of device configuration files (https://github.com/TeamWin/android_device_emulator_twrp)

Compile a recoveryimage using those device files. In the Android SDK, click on Tools -> Manage AVDs. Click New. Set it up as the following:
AVD Name: TWRP
Device: Galaxy Nexus
Target: ICS or newer though anything will probably work here
CPU: ARM (armeabi-v7a)
Check the box for hardware keyboard (your computer's keyboard will work in TWRP)
Up to you if you want to have the skin with controls present
Front Camera: None
Back Camera: None
RAM: 1024 VM Heap: 64
Internal Storage: 200
SD Card: Size: 500 MiB

Then click OK.

Once you have your AVD and your recoveryimage, you can boot TWRP in the emulator by browsing to your android-sdk/tools folder and run this command:
./emulator -avd TWRP -ramdisk CMFOLDER/out/target/product/twrp/ramdisk-recovery.img

Note that ADB doesn't work right away. About 10 to 15 seconds after TWRP finishes booting, ADB will come online. We start ADB via init.rc so even if TWRP fails to boot due to some kind of code error that you may have made, ADB should still work. Enjoy!

fusionero
14/01/15, 04:07:28
reservado

Como hacer un .zip con el kernel/recovery creado para instalar a través del recovery original o ya cambiado por uno de los 4 que hay en opciones por ahora:

Como hacer un zip flasheable (update.zip|Amend|Edify|firmas) (https://www.androidfilehost.com/?fid=23622183712473008)

Muchas veces para aplicar parches o cambios al sistema se nos otorgan archivos zipeados que están hechos para poder ser flasheados desde el custom recovery (Amon-Ra, ClockWorkMod, TWRP, etc.), hacer estos archivos no es difícil y son muy prácticos cuando se requieren hacer pequeños cambios. En este tuto primero voy a explicar de dónde viene esta funcionalidad y realizaremos un ejemplo simple, cabe decir que todo lo que esta acá esta en base a lo que he venido deduciendo, experimentando y leyendo en varios sitios.

El flasheo de estos zips es una función nativa de la partición recovery y está hecha con el fin de realizar actualizaciones en el sistema, originalmente llamados update.zip son usados por los fabricantes para realizar los upgrades al sistema o parches de seguridad. En el 2008 cuando salió el G1 y se logro el acceso root, los devs accesaron a esta partición, la modificaron creando los custom recoverys y aprovecharon esta funcionalidad para realizar cambios al sistema o reemplazarlo por completo (Custom ROMs).

El zip contiene un archivo con instrucciones que indican como el recovery debe realizar el flasheo, estas instrucciones están escritas en un formato (o lenguaje) creado por Google, la primera versión se llamó Amend que fue usado en Android 1.0 y 1.5, luego de eso Google removió Amend y a partir de Donut (1.6) se empezó a usar Edify que es la versión actual de ese lenguaje de instrucciones.

La diferencia más saltante entre ambos formatos es que en Amend el archivo de instrucciones se llama update-script y el lenguaje es parte del recovery, mientras que en Edify el archivo se llama updater-script y así mismo se requiere un archivo update-binary que contiene el lenguaje compilado. A mi parecer Amend es más sencillo y básico mientras que Edifiy es más elaborado y algo complejito en la forma de realizar las instrucciones, si bien Amend fue descontinuado aún se continua usando por varios devs mas que todo debido a su simplicidad y que aun hay equipos con recoverys de fabrica que leen Amend, pero actualmente solo el Custom Recovery de Amon-Ra lo sigue soportando, ClockWorkMod no lo soporta desde su versión 3 y otros recoverys que vienen saliendo ya no lo consideran al estar solo Edify en el código fuente del recovery. Para efectos del tuto mostrare ambos formatos pero siempre es más recomendable usar Edify.

Ahora vamos al ejemplo de cómo crear un zip flasheable, para el caso vamos a crear un zip que realice algunas funciones básicas:

- Borrar el archivo "01ejemplo" de la ruta system/etc/init.d/
- Copiar el archivo "gps.conf" en la ruta system/etc/ y la app de sistema "app.apk" en la ruta system/app/
- Asignar permisos a "app.apk"
- Crear el directorio "ejemplo" en la SD y dentro de este habrá un archivo ejemplo.txt

Primero en nuestro ambiente de trabajo (una carpeta cualquiera en la PC) creamos una carpeta llamada "META-INF" y dentro de esta creamos la siguiente ruta de subdirectorios: com\google\android\ , es en esta ruta donde va a ir el archivo con instrucciones, pero la creación de esto lo dejaremos para el final.

Luego replicamos las rutas de lo que queremos meter en el sistema, para eso creamos la carpeta "system" con las carpetas "etc/init.d" y "app" dentro y dentro de estas los archivos gps.conf y app.apk, así mismo creamos la carpeta "sdcard" dentro de esta creamos la carpeta "ejemplo" y dentro de esta ponemos el archivo ejemplo.txt, finalmente el árbol debería quedar así:

-META-INF/
|-com/
|-google/
|-android/
-system/
|-etc/
|-init.d/
|-gps.conf
|-app/
|-app.apk
-sdcard/
|-ejemplo/
|-ejemplo.txt


Ahora viene la parte de crear el archivo de instrucciones, como se indico usaremos ambos lenguajes empezando por Amend:

Amend

Creamos un archivo de texto simple, lo llamamos update-script y lo colocamos en la ruta META-INF\com\google\android\ con las siguientes instrucciones:

Esta línea crea la barra de progreso (opcional):
show_progress 0.1 0

Esta línea borra el archivo 01ejemplo de la ruta system/ect/init.d/:
delete SYSTEM:etc/init.d/01ejemplo

Esta línea copia los contenidos de la carpeta system dentro de las rutas indicadas en el archivo, si ya hay un archivo con ese nombre, será sobrescrito:
copy_dir PACKAGE:system SYSTEM:

Esta línea asigna los permisos correspondientes al archivo flasheado, el tipo de permiso depende mucho del sistema, los que se indica en el ejemplo (0 0 0644) son los que se deben asignar a las apps de sistema, la mejor manera de saber que permisos requiere cada archivo es mirando que permisos tienen los otros archivos de la misma carpeta:
set_perm 0 0 0644 SYSTEM:app/app.apk

Esta línea copia los contenidos de la carpeta sdcard en la raíz de la SD, si ya hay un archivo con ese nombre, será sobrescrito:
copy_dir PACKAGE:sdcard SDCARD:

Esta línea cierra la barra de progreso(opcional):
show_progress 0.1 10

Adicionalmente hay que dejar una línea en blanco luego de la última instrucción, el archivo debe quedar de esta manera:
show_progress 0.1 0
delete SYSTEM:etc/init.d/01ejemplo
copy_dir PACKAGE:system SYSTEM:
set_perm 0 0 0644 SYSTEM:app/app.apk
copy_dir PACKAGE:sdcard SDCARD:
show_progress 0.1 10


luego grabar y cerrar.

Edify

Creamos un archivo de texto simple, lo llamamos updater-script y lo colocamos en la ruta META-INF\com\google\android\ con las siguientes instrucciones:

Esta línea crea la barra de progreso (opcional):
show_progress(0.1, 0);

Esta línea monta la partición SYSTEM:
mount("MTD", "system", "/system");

Esta línea monta la partición SDCARD:
mount("MTD", "sdcard", "/sdcard");

Esta línea borra el archivo 01ejemplo de la ruta system/ect/init.d/:
delete("/system/etc./init.d/10ejemplo")

Esta línea copia los contenidos de la carpeta system dentro de las rutas indicadas en el archivo, si ya hay un archivo con ese nombre, será sobrescrito:
package_extract_dir("system", "/system");

Esta línea asigna los permisos correspondientes al archivo flasheado, el tipo de permiso depende mucho del sistema, los que se indica en el ejemplo (0 0 0644) son los que se deben asignar a las apps de sistema, la mejor manera de saber que permisos requiere cada archivo es mirando que permisos tienen los otros archivos de la misma carpeta:
set_perm(0, 0, 0644, "/system/app/app.apk");

Esta línea copia los contenidos de la carpeta sdcard en la raíz de la SD, si ya hay un archivo con ese nombre, será sobrescrito:
package_extract_dir("sdcard", "/sdcard")

Esta línea desmonta la partición SYSTEM:
unmount("/system");

Esta línea desmonta la partición SDCARD:
unmount("/sdcard");

Esta línea cierra la barra de progreso(opcional):
show_progress(0.1, 10);

Adicionalmente hay que dejar una línea en blanco luego de la última instrucción, el archivo deberá quedar de esta manera:
show_progress(0.1, 0);
mount("MTD", "system", "/system");
mount("MTD", "sdcard", "/sdcard");
delete("/system/etc/init.d/10ejemplo");
package_extract_dir("system", "/system");
set_perm(0, 0, 0644, "/system/app/app.apk");
package_extract_dir("sdcard", "/sdcard");
unmount("/system");
unmount("/sdcard");
show_progress(0.1, 10);


Luego grabar y cerrar, adicionalmente Edify requiere de un archivo update-binary, la forma más práctica de obtener este archivo es abrir el zip de alguna ROM para tu equipo y copiarlo de la ruta META-INF\com\google\android\

Como se ve Edify tiene una sintaxis más compleja y requiere que se monten primero las particiones, un tip sobre Edify es que tiene un comando que permite mostrar mensajes en el recovery, para esto se usa el comando ui_print, por ejemplo si quisiéramos mostrar el mensaje "Borrando el archivo 10ejemplo" antes de ejecutar esa acción, tendríamos que insertar esta línea antes del la línea con el comando "delete":
ui_print("Borrando el archivo 10ejemplo");

Cualquiera que sea el método que deseemos usar para el archivo de instrucciones hay que recordar que solo podemos usar uno de ellos y que él/los archivo/s van dentro de la ruta META-INF\com\google\android\

Tomando el caso que usáramos Edify nuestro árbol de carpetas quedaría así:

-META-INF/
|-com/
|-google/
|-android/
|-update-binary
|-updater-script
-system/
|-etc/
|-init.d/
|-gps.conf
|-app/
|-app.apk
-sdcard/
|-ejemplo/
|-ejemplo.txt

Luego procedemos a zipear las tres carpetas con todo su contenido con algún nombre y ahora se procede a firmar.

Firma digital (http://download.oracle.com/javase/6/docs/api/java/security/Signature.html)

La firma digital se genera vía java, es un mecanismo de seguridad de que los archivos en el zip son correctos y que no se hayan corrompido durante la descarga, los custom recovery como Amon-Ra permiten desactivar la verificación de firmas y otros como el ClockWorkMod ni siquiera la revisan, de todas maneras si desean firmar sus zips las opciones más simples a mi parecer son dos:

- HTC kitchen .- La cocina de ROMs tiene una opción de firma de zips, para eso solo vamos a la opción 0, luego la opción 22, luego la opción z, esto crea una carpeta sign_files_XXX_XXXX, ponemos el zip dentro de esta carpeta y presionamos Enter, la cocina lo firmara y dejara el archivo con la palabra signed en la carpeta.

Cualquiera de estas dos opciones requiere tener el JDK instalado para su uso.

Una vez firmado el zip esta listo para flashearlo, solo queda ponerlo en la SD y realizar el flasheo vía recovery.

Un par de últimos consejos por si desean experimentar, primero siempre hagan un nandroid backup antes de flashear cualquier cosa y segundo que la mejor forma de aprender sobre esto es abriendo los zips y chequeando el update/r-script.

Creador del tutorial RoQ (http://www.mioptimusone.com/foros/member.php?action=profile&uid=3)

Este hilo por si le puedo sacar utilidad a los pasos 3 y 4 o se hace sin esa necesidad, aunque para dispositivos sin sources si que se necesitaría por ejemplo el paso 3 que viene bien ante actualizaciones que no se tengan esas nuevas caracteristicas en ningún github:

[Tutorial] Compila tu primer Kernel [EXPLICADO] (http://www.htcmania.com/showthread.php?t=858798)

fusionero
14/01/15, 04:10:12
2º reservado

Adaptar instrucciones de este hilo a Linux, ya que no usamos Windows en este tuto:

Tienes un MTK y quieres empezar a cocinar entra aqui (http://www.htcmania.com/showthread.php?t=689955)

fusionero
14/01/15, 04:10:49
3º reservado

Pendiente la traducción de este hilo para dexodear la Rom con una CPU MT6592:

http://www.telefoninostop.com/forum/cina-fonia/5650-deodexare-rom-mt6592.html

Y añadir más cosas como este hilo:

[SCRIPTS] Unpack / repack MT65xx/MT83xx boot.img, recovery.img or logo.bin (http://forum.xda-developers.com/showthread.php?t=1587411)

luisetex84
14/01/15, 08:44:43
Me he leído el post en diagonal ya que estoy en el curro y te comento algunas cosillas de memoria ya que no puedo comprobarlo del todo:

- Requisito imprescindible: para compilar android se necesita una cpu de 64 bits. Creo que desde ICS se necesita, para versiones anteriores una de 32 bits nos valdría.

Configuramos el acceso usb ADB:
Pendiente, no lo he conseguido por ahora

1. Si no lo has hecho antes, ejecuta 'adb devices' para iniciar el demonio de adb. Se creará una carpeta oculta en tu directorio home llamada .android, si no existía ya. El problema que no te reconozca la tablet es que Linux no sabe el id del fabricante. Vamos a obtenerlo.

2. Sin conectar la tablet al pc ejecuta:
http://www.htcmania.com/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfoAAAAyCAIAAAA 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 gPt8f1pGLVLYQAAAAASUVORK5CYII=http://www.htcmania.com/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAAAzCAIAAAB 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650509
Conecta la tablet al pc y vuelve a ejecutar de nuevo comando.
http://www.htcmania.com/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAABRCAIAAAA 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 q/gdwhuAkZo51OgAAAABJRU5ErkJggg==http://www.htcmania.com/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAABQCAIAAAA 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
Compara el resultado con la ejecución anterior y el dispositivo que aparezca nuevo es la tablet. Apunta los cuatro dígitos después de ID y antes de los dos puntos, el del recuadro rojo es un ejemplo. Este es el idVendor.

3. En la carpeta .android de tu home, busca el fichero adb_usb.ini . Se debe añadir el idVendor al fichero. Si no existiera, crealo y añade esto:
0x{idVendor} ->>>> siguiendo el ejemplo 0x0bb4

4. Mata el demonio de adb para que al volver a iniciarlo y que coja la nueva configuración:
adb kill-server

5. adb devices

Revisamos que tenemos el directorio bin/ en la raíz de nuestro pc, o lo creamos así ( nada más abrir la Terminal, no cambiamos de directorio ):
$ mkdir ~/bin
$ PATH=~/bin:$PATHYa de paso recordar que mkdir es para crear carpetas u otro tipo de archivos, pero con sus correspondientes variantes, ya que mk es para crear, y dir especifica que es un directorio/carpeta.

Descargamos la tool/herramienta de la Repo y nos aseguramos de que sea ejecutable:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

Estoy habia que hacerlo antiguamente, cuando no existía ningún paquete que contuviera el comando repo. Ahora si que existe uno (por lo menos en Ubuntu 14.04) y es tan sencillo como hacer:
sudo apt-get install phablet-tools

Yo lo que haría es editar el tutorial, poniendo lo del phablet-tools (que es mucho más rápido y sencillo) y en el caso que no exista el paquete, hacer lo que comentabas.

fusionero
15/01/15, 05:52:48
Añadidos tus detalles y revisado para que este mejor a la vista, lo malo es que no es posible meter un spoiler dentro de otro, o usar quotes dentro de otros, o descuadra todo apareciendo muchos más y desorganizados, estropeando lo que hago, jeje.

Bueno por lo menos hasta aquí voy por ahora, ya que como he querido añadir todo lo que pueda al final, de todas maneras quiero ponerlo para al menos 3 Recovery's, TWRP, CWM y Philz, que ya sabemos que los sabes hacer luisetex84, jeje, por eso con tús indicaciones esto al final se debe dejar adaptable a todas las CPU's MediaTeck, y si se puede dejar algo para otros modelos de CPU's de otras marcas lo que se pueda, y como tengo un exynos4 puedo readaptar lo necesario para ellos, o con ayuda de otros usaurios a otros modelos de CPU's ( ejemplo SnapDragon ), que lo importante es ya dejar las bases e ir mejorandolo para ser al final un hilo para que este todo para iniciarse y usarlo usuarios de linux, al que pertenezco, y que no le veo casi información al menos en español y en un solo hilo y sin tener que rebuscar en todo el hilo si tiene miles de páginas que ya se hace una locura enterarse de todo y no perder el hilo principal de la tarea, ya que tener que buscar cada cosa por un lado no es eficiente para dar el inicio a todos los posibles cocineros :ok:

Necro1280
17/06/15, 07:25:07
Muyyyyyy buen tutorial, a ver si me animo y me pongo a probar lo que decis, seguiiiiid asiiiii!!!!!

Un Saludo.