16-06-2014, 12:59 AM
(Este mensaje fue modificado por última vez en: 19-01-2015, 04:46 PM por daemonium.)
Para que me sirva de recordatorio y compartir con los compis los pasos q he aprendido sobre la nueva plataforma voy a hacer una especie de miniguia.
Lo primero aviso q soy un completo noob en esta nueva plataforma, así que seguro q mas de un gazapo meto, así que corregidme si veis algun fallo
En rockchip tenía bastante claro para q servía cada parte de la rom, en esta nueva plataforma he empezado desde cero y mas perdido que la leche, asi que toda corrección, aclaración y nuevas aportaciones seran recibidas con gran alegria por mi parte
Como en todos los dispositivos android que conozco aquí también tenemos un bootloader que se encarga de gestionar los primeros pasos del cacharro al arrancar, de momento y que yo conozca tiene tres maneras de arrancar:
Modo bootloader: el sistema escucha la entrada usb otg esperando una conexion desde un pc para ser flasheado y busca en la sdcard un sector de arranque, si lo encuentra empieza a flashear desde ahí.
Modo recovery: El sistema arranca un kernel dentro de la partición recovery con un sistema muy básico (pero mucho mas completo que el stock de rockchip) desde el cual se pueden hacer wipes, instalar zips con script en edify desde la sdcard, usb o desde adb sideload.
Modo Normal: Arranca android desde boot.img (tiene un kernel dentro de boot.img), muestra el logo en logo.img, monta las diferentes particiones y comienza a trabajar normalmente.
En los S802 podemos ver que no reserva un espacio específicamente para data (genial q toda nuestra memoria interna puede ser usada para almacenar datos o instalar programas ), los espacios asignados y reservados en la nand son solo para el loader, boot.img, recovery.img, logo.img, cache misc? y system.img, en el resto de nuestra nand es usada como /data y el almacenamiento interno es solo una carpeta dentro de esa partición.
Otra diferencia muy importante con los rockchip es que aquí no tenemos una partición exclusivamente para el kernel, por lo que tanto dentro de boot.img, como dentro de recovery.img tenemos kernels dentro, los nuevos kernels 3.10 los tengo atragantados de momento y hay varias cosas (muchas) que no entiendo bien, (mis días de gentoo y de compilar kernels se quedaron en 2.4 y 2.6, el 3.0 es bastante similar, pero estos 3.10 me van a hacer sudar la gota gorda).
Bueno tras el ladrillo-introducción (pero importante, sin saber como funciona una cosa es difícil por no decir imposible modificarla y tunearla correctamente) vamos con lo que he conseguido de momento:
Las roms en estos dispositivos pueden ser instaladas desde pc por usb OTG en un archivo rom.img que contiene dentro todas las particiones, o desde recovery en un zip con un updater-script en edify (como cwm o twrp).
Para descomprimir y tunear la rom desde windows ( puff que feo me parece eso) tenemos un programa que se llama AML Customization Tool. Desde alli podemos cambiar logos, bootanimation, cambiar los kernels, etc... Lo mas interesante de este programa para mi es que me permite descomprimir la rom.img en sus diferentes partes, de momento no he logrado hacer esto desde linux, así que en mi caso tiro de virtualbox y arranco mi windows xp virtualizado para desempaquetar la rom, al desempaquetarla me aseguro de marcar la opción (Unpack system partition). que nos dará nuestro system descomprimido y libre de symlinks q añadiremos mas tarde desde el edify script.
links a:
Aml Customization tool:
www.freak-tab.de/leolas/amlogic/Customization_ToolV2.zip
Manual traducido al ingles para los q no dominen el chino mandarin :
www.freak-tab.de/leolas/amlogic/manual.zh-CN.en.doc
Despues de desempaquetar la rom dentro del directorio de instalacion del programa tenemos una carpeta tmp, alli dentro tendremos dos subcarpetas level1 y level2.
En level1 tenemos lo que nos hace falta para customizar nuestra rom, las particiones que vamos a usar para preparar nuestro zip con la rom modeada, nos son útiles:
bootloader.PARTITION ---> bootloader.img
boot.PARTITION ----------> boot.img
recovery.PARTITION -----> recovery.img
logo.PARTITION ----------> logo.img
En level2 cogemos la carpeta system y sin preocuparnos de permisos nos la copiamos donde queramos, los permisos tampoco, los pondremos junto a los simlinks en el script edify.
LOGO.IMG
Vamos a ver que tiene dentro logo.img. De momento lo que he encontrado son dos cabeceras para dos imágenes en formato bmp, y las dos imagenes, una en 720p y otra en 1080p, y en todas las roms que he visto mantienen la misma estructura y ambas imágenes empiezan el el mismo sector del fichero.
Para desempaquetarla usamos dd de manera que:
con ello obtenemos ambas imagenes para poder ser retocadas y ambas cabeceras para poder luego empaquetar las imagenes.
Para volver a empaquetar logo.img tras retocar las imagenes usamos nuestro querido cat y sumamos los ficheros:
BOOT.IMG Y RECOVERY.IMG
Ambos tienes las mismas partes y se empaquetan y desempaquetan igual, (aqui vamos a referirnos a boot.img, pero todo lo expuesto es usado igualmente para recovery.img).
Dentro de boot.img nos encontramos con un kernel, un ramdisk y un segundo fichero que es nuestro dtc (Device tree compiler) complemento de nuestro kernel.
Para desempaquetarlo usaremos el script en perl split_bootimg.pl www.freak-tab.de/leolas/amlogic/split_bootimg.pl
y con el obtendremos tres archivos:
boot.img-kernel -------------------> Kernel Image o zImage
boot.img-ramdisk.gz ---------------> Nuestro ramdisk
boot.img-second.gz ----------------> El dtc (device-tree-compiler)
Para desempaquetar el ramdisk:
Para convertir el dtc a un formato comprensible necesitamos instalar el paquete "device-tree-compiler" y lo descomprimimos usando:
Tras modificar lo que queramos o instalar un nuevo kernel y para volverlo a empaquetar:
con el ramdisk:
con el dtc (usaremos el antiguo solo si no hemos compilado un kernel nuevo, si lo hemos hecho usaremos el dtc del nuevo kernel:
Y una vez tengamos las 3 partes usaremos este mkbootimg (www.freak-tab.de/leolas/amlogic/amlmkbootimg), yo lo he llamado amlmkbootimg para diferenciarlo del de rockchip:
Exactamente todo lo anteriormente expuesto vale para recovery.img.
Con el system trabajamos todo lo que queramos sin preocuparnos por permisos y preopietarios, todo eso lo definiremos en el script edify.
Y ya está, solo nos quedara crear el zip, firmarlo y a correr. Ya es muy tarde así que mañana sigo con el tema.
Lo primero aviso q soy un completo noob en esta nueva plataforma, así que seguro q mas de un gazapo meto, así que corregidme si veis algun fallo
En rockchip tenía bastante claro para q servía cada parte de la rom, en esta nueva plataforma he empezado desde cero y mas perdido que la leche, asi que toda corrección, aclaración y nuevas aportaciones seran recibidas con gran alegria por mi parte
Como en todos los dispositivos android que conozco aquí también tenemos un bootloader que se encarga de gestionar los primeros pasos del cacharro al arrancar, de momento y que yo conozca tiene tres maneras de arrancar:
Modo bootloader: el sistema escucha la entrada usb otg esperando una conexion desde un pc para ser flasheado y busca en la sdcard un sector de arranque, si lo encuentra empieza a flashear desde ahí.
Modo recovery: El sistema arranca un kernel dentro de la partición recovery con un sistema muy básico (pero mucho mas completo que el stock de rockchip) desde el cual se pueden hacer wipes, instalar zips con script en edify desde la sdcard, usb o desde adb sideload.
Modo Normal: Arranca android desde boot.img (tiene un kernel dentro de boot.img), muestra el logo en logo.img, monta las diferentes particiones y comienza a trabajar normalmente.
En los S802 podemos ver que no reserva un espacio específicamente para data (genial q toda nuestra memoria interna puede ser usada para almacenar datos o instalar programas ), los espacios asignados y reservados en la nand son solo para el loader, boot.img, recovery.img, logo.img, cache misc? y system.img, en el resto de nuestra nand es usada como /data y el almacenamiento interno es solo una carpeta dentro de esa partición.
Otra diferencia muy importante con los rockchip es que aquí no tenemos una partición exclusivamente para el kernel, por lo que tanto dentro de boot.img, como dentro de recovery.img tenemos kernels dentro, los nuevos kernels 3.10 los tengo atragantados de momento y hay varias cosas (muchas) que no entiendo bien, (mis días de gentoo y de compilar kernels se quedaron en 2.4 y 2.6, el 3.0 es bastante similar, pero estos 3.10 me van a hacer sudar la gota gorda).
Bueno tras el ladrillo-introducción (pero importante, sin saber como funciona una cosa es difícil por no decir imposible modificarla y tunearla correctamente) vamos con lo que he conseguido de momento:
Las roms en estos dispositivos pueden ser instaladas desde pc por usb OTG en un archivo rom.img que contiene dentro todas las particiones, o desde recovery en un zip con un updater-script en edify (como cwm o twrp).
Para descomprimir y tunear la rom desde windows ( puff que feo me parece eso) tenemos un programa que se llama AML Customization Tool. Desde alli podemos cambiar logos, bootanimation, cambiar los kernels, etc... Lo mas interesante de este programa para mi es que me permite descomprimir la rom.img en sus diferentes partes, de momento no he logrado hacer esto desde linux, así que en mi caso tiro de virtualbox y arranco mi windows xp virtualizado para desempaquetar la rom, al desempaquetarla me aseguro de marcar la opción (Unpack system partition). que nos dará nuestro system descomprimido y libre de symlinks q añadiremos mas tarde desde el edify script.
links a:
Aml Customization tool:
www.freak-tab.de/leolas/amlogic/Customization_ToolV2.zip
Manual traducido al ingles para los q no dominen el chino mandarin :
www.freak-tab.de/leolas/amlogic/manual.zh-CN.en.doc
Despues de desempaquetar la rom dentro del directorio de instalacion del programa tenemos una carpeta tmp, alli dentro tendremos dos subcarpetas level1 y level2.
En level1 tenemos lo que nos hace falta para customizar nuestra rom, las particiones que vamos a usar para preparar nuestro zip con la rom modeada, nos son útiles:
bootloader.PARTITION ---> bootloader.img
boot.PARTITION ----------> boot.img
recovery.PARTITION -----> recovery.img
logo.PARTITION ----------> logo.img
En level2 cogemos la carpeta system y sin preocuparnos de permisos nos la copiamos donde queramos, los permisos tampoco, los pondremos junto a los simlinks en el script edify.
LOGO.IMG
Vamos a ver que tiene dentro logo.img. De momento lo que he encontrado son dos cabeceras para dos imágenes en formato bmp, y las dos imagenes, una en 720p y otra en 1080p, y en todas las roms que he visto mantienen la misma estructura y ambas imágenes empiezan el el mismo sector del fichero.
Para desempaquetarla usamos dd de manera que:
Código:
dd if=logo.img of=cab1 bs=1 count=128
dd if=logo.img of=bootup_1080.bmp skip=128 bs=1 count=6220864
dd if=logo.img of=cab2 skip=6220992 bs=1 count=64
dd if=logo.img of=bootup_720.bmp skip=6221056 bs=1 count=2764863
Para volver a empaquetar logo.img tras retocar las imagenes usamos nuestro querido cat y sumamos los ficheros:
Código:
cat cab1 bootup_1080 cab2 bootup_720 > new-logo.img
BOOT.IMG Y RECOVERY.IMG
Ambos tienes las mismas partes y se empaquetan y desempaquetan igual, (aqui vamos a referirnos a boot.img, pero todo lo expuesto es usado igualmente para recovery.img).
Dentro de boot.img nos encontramos con un kernel, un ramdisk y un segundo fichero que es nuestro dtc (Device tree compiler) complemento de nuestro kernel.
Para desempaquetarlo usaremos el script en perl split_bootimg.pl www.freak-tab.de/leolas/amlogic/split_bootimg.pl
y con el obtendremos tres archivos:
boot.img-kernel -------------------> Kernel Image o zImage
boot.img-ramdisk.gz ---------------> Nuestro ramdisk
boot.img-second.gz ----------------> El dtc (device-tree-compiler)
Para desempaquetar el ramdisk:
Código:
mkdir boot
cd boot/
gunzip < ../boot.img-ramdisk.gz | cpio -i --make-directories
cd ..
Para convertir el dtc a un formato comprensible necesitamos instalar el paquete "device-tree-compiler" y lo descomprimimos usando:
Código:
dtc -I dtb boot.img-second.gz -O dts -o boot.dtc.dtd
Tras modificar lo que queramos o instalar un nuevo kernel y para volverlo a empaquetar:
con el ramdisk:
Código:
cd boot/
find . -exec touch -d "1970-01-01 01:00" {} \;
find . ! -name "." | sort | cpio -oa -H newc | gzip -n >../new.boot.img-ramdisk.gz
cd ..
con el dtc (usaremos el antiguo solo si no hemos compilado un kernel nuevo, si lo hemos hecho usaremos el dtc del nuevo kernel:
Código:
dtc -I dts boot.dtc.dtd -O dtb -o new.boot.PARTITION-second.gz
Y una vez tengamos las 3 partes usaremos este mkbootimg (www.freak-tab.de/leolas/amlogic/amlmkbootimg), yo lo he llamado amlmkbootimg para diferenciarlo del de rockchip:
Código:
amlmkbootimg --kernel ZIMAGE --ramdisk new.boot.img-ramdisk.gz --second new.boot.img-second.gz --output new.boot.img
Exactamente todo lo anteriormente expuesto vale para recovery.img.
Con el system trabajamos todo lo que queramos sin preocuparnos por permisos y preopietarios, todo eso lo definiremos en el script edify.
Y ya está, solo nos quedara crear el zip, firmarlo y a correr. Ya es muy tarde así que mañana sigo con el tema.