|
||
|
![]() |
![]() |
Avisos |
ROMs y desarrollo HTC Desire ROMs y desarrollo HTC Desire |
![]() |
|
Herramientas |
#1
|
||||
|
||||
¿ Como Hacer Compilación de Kernels?
Lo primero y más esencial es que yo, no tengo conocimientos suficientes para desarrollar este tutorial. Ni poseo herramientas para ello. Dicho esto y aclarado, aquí os lo dejo. Para el que sí sepa, y no entienda el Idioma. ![]() ![]() ![]() ![]() Traducción de ¿Como hacer Compilación de Kernels? Como hasta el momento, no he podido encontrar una guía para hacer Kernels. Ya que algunas de las que hay, son anticuadas y se asume demasiado. Pense que yo mismo escribiría el mio propio. Aquí les pongo: Anotación: Esto no es una guía para novatos. Investigue antes de preguntar, por favor. Para que el Menú interactivo del Kernel construya el Script, mire el post #31 Desarrollaré este Post a la vez que lo hago, por lo cual estará imcompleto al principio, careciendo de detalles. Elementos necesarios: 1. Ubuntu Box (Pcon esto quiero decir un ordenador personal con una instalación Ubuntu, no un Live CD) 2. Un el Android NDK, o su propio toolchain 3. Una fuentede una Desiré GB/Froyo de htcdevs.com, o fuentes de github 4. Familiaridad con Shell Linux y comandos de linux básicos. 5. Voluntad para aprender Primero lo más importante: 1. Adquisición de las fuentes La fuentepara la Desiré de HTC está disponible de dos clases de Resources ( puedes conseguirlo A través de htcdevs.com (HTC oficial Dev sitio), o del código fuente subido por alguién. Para este Turorial, asumiré que trabajamos en el código fuente de GRAN BRETAÑA HTC oficial. Por tanto descargue bravo_2.6.35_gb-mr.tar.gz de htcdevs.com. 2. Configuración de la compilación pera poner en una Box, y preparado del Codigo fuente 2.1. Instalar algunos paquetes esenciales para el Terminal Linux Code: sudo apt-get install libncurses5-dev 2.2 Extraer el código fuente El archivo que usted descargó es un archivo TAR (como un archivo ZIP), entonces usted tiene que extraerlo auna ruta conveniente. Vaya a la Shell de Linux y abrá una ventana terminal (Accesorios-> Terminal) Teclé: Vamos a nuestro directorio de casa: Código:
cd ~ Ahora, cree los directorios para nuestro Kernel Compilation Box. Ahora tienes que copiar el archivo tar.gz de donde quiera que usted lo descargara a este Dir. Extraiga el archivo: Código:
tar -xvf ~/android/kernel/bravo_2.6.35_gb-mr.tar.gz cd ~/android/kernel/bravo_2.6.35_gb-mr Ahora podemos ver los archivos extraídos dentro del directorio ~/android/kernel/bravo_2.6.35_gb-mr 2.3 Establecer el Toolchain Un Toolchain es un paquete de programas que permiten que usted compile el código fuente (cualquier código fuente, no sólo de Kernels). El Toolchain es específico para el procesador y hardware, entonces necesitamos un específico para Android y sobre todo para la Desiré. Si usted es un usuario PRO o semiavanzado, puede compilar su propio Toolchain (Ver la guía de los theGanymede para hacer esto). Si la compilación de Kernels es todo lo que usted requiere, por suerte para usted, hay un camino fácil - el Androide NDK - v7 (último por ahora) está disponible aquí Consiga el NDK para Linux – Ahora copie el archivo NDK a ~/android/ndk Siempre que yo diga COPY, usted tiene que copiar a mano el archivo con cualquier administrador de archivos. El Nautilus viene con Ubuntu, y Delfín con Kubuntu. También puede usar la Shell por supuesto. Código:
cp [sourcefile] [destination] Código:
Código:
gedit ~/.bashrc 2. Configuración de parámetros del Kernel Los Kernels son compilados con un programa llamado GNU, y usan un juego de opciones de configuración especificadas dentro de un archivo llamado Makefile. Un punto vital para anotar es que los Kernels son compilados con un programa llamado GNC (básicamente el GNU compilador), y nuestro NDK en sí tiene su propia versión optimizada de GCC. Compilando, nosotros, actualmente lo compilamos cruzándolo (sentido de la compilación de un paquete binario en un sistema que es diferente del sistema actual que se supone, va dirigirlo - usted lo compila en su ordenador personal mientras realmente se destina para corra en la Desiré) Este significa que cuando usted lo compila, usted tiene que asegurarse que usted compila con la versión del NDK de GCC, en vez de la versión de sistema. ¡Por otra parte usted termina con un Kernel destinado para correr en su PC, ! La especificación qué GCC usa, es por la variable CROSS_COMPILE. Usted puede establecerlo con este comando Código:
CROSS_COMPILE=arm-linux-androideabi- Podemos compilar Kernels con muchas opciones diferentes, como con el soporte de ext4, o sin ext4 como parte del Kernel zImage (en cuyo caso hace el Kernal más grande), o como un módulo cargable (de la forma somename.ko, que es cargado en init.d/init.rc con la orden insmod modulename.ko) Especificamos las opciones exactas que requerimos con la ayuda del programa llamado menuconfig para una configuración útil (Como su nombre sugiere, es un menú para hacer opciones de Configuración). Una cosa importante para anotar concerniente a la compilación de Kernels Hay una cantidad enorme de opciones al sistema, y a menos que usted sea cuidadoso con la compilación del Kernel, usted no será capaz de establecer las opciones correctamente y conseguir su Kernel para Bootearlo. Por suerte para nosotros, la fuente de Kernel ya viene con un juego de falta de parámetros que pueden ser fácilmente establecidos. Anote: Todos estos comandos debe ser ejecutados dentro del directorio bravo_2.6.35_gb-Sr.. Vamos allá: Código:
cd ~/android/kernel/bravo_2.6.35_gb-mr make ARCH=arm CROSS_COMPILE=arm-linux-androideabi- bravo_defconfig Este produce un archivo .config (usado por el menuconfig)para contener parámetros esenciales, para producir un Kernel Bootable para nuestra Desiré. anote: hay un modo más simple de conseguir el archivo .config básico, y este debe conseguirlo de un Kernel que esté ya construido por alguien . Usted puede extraer el .config de un Kernel que corra con estos comandos: Código:
cd ~/android/kernel/bravo_2.6.35_gb-mr adb pull /proc/config.gz zcat config.gz > .config Ahora nosotros podemos abrir menuconfig además de añadir algo que necesitamos. Código:
make ARCH=arm CROSS_COMPILE=arm-linux-androideabi- menuconfig Puedes añadir el soporte de ext4 por ejemplo (Ver la imagen encima) Una vez haya hecho la elección de opciones, puede salir de menuconfig. 4. Compilandolo Este es simple. El comando básico es: Hacer ARCH=arm cROSS_COMPILE=arm-linux-androideabi--j10 El-j10 especifica el número de empleos para ejecutar por operación. Por lo general, por encima de 50 en mi CPU( Quad Core). Prevengasé, puesto que puede tener una CPU lenta y congelarse Linux. Durante la compilación, usted verá todas las clases de mensajes, que pueden incluir Advertencias. En la mayor parte de casos, hágase fuerte no para hacer caso de advertencias. Si hay errores, la compilación se parará, y usted tendrá que fijar las cuestiones. 5. Distribución de su Kernel a usuarios Al final de compilación, se genera los archivos llamados zImage, y varios archivos .ko. Usted tiene que copiarlos de su ruta por defecto a un archivo de ZIP. El mejor camino, es usar mi variante de Koush de cualquier Kernel, y copias los archivos . Entonces, puede cerrar el ZIP con la carpeta entera y verá que tiene el Falsheable Zip para distribuir a otros Usted también puede quitar el zImage y los módulos de/system/lib/modules de cualquier Kernel ZIP y copiarle sobre sus archivos, en la posición correcta. De este modo, digamos que usted a extraído un Kernel ZIP, existente a la posición ~/flashable La estructura de archivo debería parecer a esta: Código:
|-- kernel | |-- dump_image | |-- mkbootimg | |-- mkbootimg.sh | |-- unpackbootimg | `-- zImage |-- META-INF | |-- CERT.RSA | |-- CERT.SF | |-- com | | `-- google | | `-- android | | |-- update-binary | | `-- updater-script | `-- MANIFEST.MF `-- system `-- lib `-- modules `-- bcm4329.ko 8 directories, 11 files He incluido mi directorio flasheable junto con este Post Descarga de kernel_flashable.tar.bz2.zip a ~ Código:
cd ~ tar -jvxf kernel_flashable.tar.bz2.zip Este creará la estructura de directorio perfilada encima. Ahora después de cada compilación del Kernel, ejecute estos comandos de donde usted ejecutó Haga: Código:
cp arch/arm/boot/zImage ~/kernel_flashable find . -name '*ko' -exec cp '{}' ~/kernel_flashable/system/lib/modules/ \; cd ~/kernel_flashable zip -r mykernel . Este creará mykernel.zip en ~/kernel_flashable. Usted puede distribuir este a sus usuarios para flashearlo . Asegúrese que usted corrige la updater-escriturantes . Errores comunes y otras materias Ok, el Post #1 era la materia simple. Ahora,en el supuesto de que usted haya tenido errores compilando. El post *2 es sobre esto, y sube el nivel del conocimiento un poco.. Algunos errores de compilación de Kernel: Las advertencias de error se solucionan quitando la String '-Werror' de todo Makefiles del archivo que dejó de compilar. Algunas personas habían dicho que el verdadero error (Serie de límites que advierten) era debido a optimizaciones GCC. Pero poniendo-O2 a-o0 no hacen nada. Ningunos de empleos deberían exceder 50. 'advertencia: paquete de variables no usado [-wunused-but-set-variable] '-mira en KBUILD_CFLAGS por lo general Makefile. Añada-Wno-error=unused-but-set-variable para el Set existente de banderas. Anote lo siguiente del manual GCC: -WerrorMake todas las advertencias en errores difíciles. El código fuente que provoca advertencias será rechazado. Los-w Inhiben todos los mensajes de advertencia. Si usted está familizrizado con el código de C y le gusta fijar la materia, no debe hacer caso de Bugs potenciales, use esto como últimop recurso - un 'brahmastram' (el arma más poderosa en su tiempo de la necesidad más grave) cuando las epopeyas dirían -WerrorMake todas las advertencias en errores. -Werror=Make la advertencia especificada en un error. El specifier para una advertencia es añadido, por ejemplo el-werror=switch gira las advertencias controladas por-Wswitch en errores. Este interruptor toma una forma negativa, para ser usado en negar-Werror para advertencias específicas, por ejemplo el-wno-error=switch hace advertencias-Wswitch no ser errores, aun cuando-Werror es en efecto. Usted puede usar la opción-fdiagnostics-show-option para tener cada advertencia controlada y enmendada con la opción que lo controla, y determinar que usar con esta opción. Entonces lo que hice para suprimir errores, fue añadir: Código:
KBUILD_CFLAGS += -w KBUILD_CFLAGS += -Wno-error=unused-but-set-variable Aunque el-wunused-but-set-variable no sea una verdadera cuestión en sí mismo, esto genera tanto 'ruido' que usted puede perder lo que actualmente dá error. Este es el error de qué yo hablaba.. Código:
drivers/net/wireless/bcm4329_204/wl_iw.c: In function 'wl_iw_set_pmksa': drivers/net/wireless/bcm4329_204/wl_iw.c:5075:5: error: array subscript is above array bounds [-Werror=array-bounds] drivers/net/wireless/bcm4329_204/wl_iw.c:5078:5: error: array subscript is above array bounds [-Werror=array-bounds] Solución: Corrija drivers/net/wireless/bcm4329_204/Makefile Localice-Werror dentro de DHDCFLAGS, y suprímalo. Código:
DHDCFLAGS = -DLINUX -DBCMDRIVER -DBCMDONGLEHOST -DDHDTHREAD -DBCMWPA2 \ -DUNRELEASEDCHIP -Dlinux -DDHD_SDALIGN=64 -DMAX_HDR_READ=64 \ -DDHD_FIRSTREAD=64 -DDHD_GPL -DDHD_SCHED -DBDC -DTOE -DDHD_BCMEVENTS \ -DSHOW_EVENTS -DBCMSDIO -DDHD_GPL -DBCMLXSDMMC -DBCMPLATFORM_BUS \ -Wall -Wstrict-prototypes -Werror -DOOB_INTR_ONLY -DCUSTOMER_HW2 \ -DDHD_USE_STATIC_BUF -DMMC_SDIO_ABORT -DWLAN_PFN -DWLAN_PROTECT \ -DBCMWAPI_WPI \ Este impedirá a GCC tratar como meras advertencias los errores Como modificar Kerenls aplicados a mods - Aplicación de Path de Kernel Ok, usted ha compilado un Kernel Stock Simple. ¿Ahora qué? ¿Quisiera usted añadir fix/mods desarrollados por otros desarrolladores de Kernels? Este post explica Patchs y como hacer exactamente esto. Los Paths de Kernels son aplicados vía archivos de Path. Los archivos de Path son archivos de texto simples generados por el linux diff programa que toma dos archivos de texto, los compara y escribe las diferencias (de ahí llamado diff) a otro archivo de texto que por la convención tiene la extensión .patch Atado a este post hay un Path que contiene mi 'Extended Battery' fijado con battfix de Sibere. Explicaré el zurcido con esto. Vamos a entender de qué se trata. Ábralo en cualquier editor de textos. Código:
diff -rupN -X /home/droidzone/android/kernel/exclude.opts bravo_2.6.35_gb-mr/drivers/power/ds2784_battery.c bravo_2.6.35_gb-mr.main//drivers/power/ds2784_battery.c--- bravo_2.6.35_gb-mr/drivers/power/ds2784_battery.c 2011-08-25 13:16:53.000000000 +0530+++ bravo_2.6.35_gb-mr.main//drivers/power/ds2784_battery.c 2011-11-06 16:43:21.544317342 +0530@@ -118,8 +118,11 @@ PS. 0 or other battery ID use the same p /* Battery ID = 1: HT-E/Formosa 1400mAh */ #define BATT_ID_A 1 #define BATT_FULL_MAH_A 1400- #define BATT_FULL_MAH_DEFAULT 1500+#define BATT_FULL_MAH_CAMERONSINO 2400+#define BATT_ID_CAMERONSINO+#define BATT_TYPE 0+ Anote la primera línea: Código:
diff -rupN -X /home/droidzone/android/kernel/exclude.opts bravo_2.6.35_gb-mr/drivers/power/ds2784_battery.c bravo_2.6.35_gb-mr.main//drivers/power/ds2784_battery.c bravo_2.6.35_gb-mr/drivers/power/ds2784_battery.c era el archivo original, y bravo_2.6.35_gb-mr.main // drivers/power/ds2784_battery.c era el archivo objetivo o el archivo que contiene el mod.. ¿Cómo aplicar archivos de Pacth? La orden depende de donde su directorio corriente este. Si usted está en ~/android/kernel/bravo_2.6.35_gb-mr/y su directorio corriente contiene el directorio 'Drivers', usted puede aplicar este Patch con esta orden: Código:
patch -p1<extended_battfix.patch Código:
patch -p2<extended_battfix.pat Compartiendo y Colaborando - Usando Github ________________________________________ La compilación de Kernel es un esfuerzo de grupo (al menos debería ser). Cuando diferentes desarrolladores trabajan en partes diferentes del código y crean a sus propios mods, progresa el desarrollo. Para este fin, es importante que usted comparta su código con otro desarrolladores. El mejor modo de hacer es Subir sus fuentes a github. Primero, cree una cuenta de github. Después usted puede ver las fuentes github de otros desarrolladores y examinar sus cometidos. Cometidos son básicamente Patch que se aplican a la fuente anterior cargada. El cometido de Github es el uso, y el formato de Path universal y puede ser visto directamente, descargado como archivos de Pacth, y aplicado su código. Usted también puede decidir descargar el árbol de la fuente entero, cargado por otro desarrollador y examinarlo. Construye un sistema de Menú Interactivo para Kernels. Esto te ahorra tiempo si haces muchos Kernels Ver post *22 Última edición por Wel Día 07/03/12 a las 20:32:45. |
Los siguientes 5 usuarios han agradecido a Wel su comentario: | ||
|
#2
|
||||
|
||||
Bueno aqui os lo dejo....jejeje
![]() Si le veis algo, avisais, ok?? Un saludo, y espero que sirva.... |
#3
|
||||
|
||||
__________________
|
Gracias de parte de: | ||
![]() |
![]() |
||||||
|