Ayuda para compilar un kernel a medida para un HP Pavilion dv6-3190es

Imagen de Arnao
29 puntos

Hola ubunteros y linuxeros en general, preciso de vuestra ayuda y conocimientos para compilar un kernel a medida para mi laptop HP pavilion dv6-3190es. Mi equipo rinde bien con el kernel generic pero me gustaría personalizarlo pues supongo que funcionaría aún mejor, a parte de que así aprendería mejor el proceso y el por que de cada decisión...

Les cuento que se compilar y lo he hecho otras veces, pero lo que no se es lo que tengo que seleccionar en la configuración para personalizar el kernel para mi equipo, con lo cual resulta que no se optimizarlo del todo. He mirado muchos tutoriales y en ninguno explican claramente que es cada una de las opciones y me gustaría que me ayudaran a elegirlas, a saber cuales son los modulos correctos que debería marcar para contruir el kernel para mi equipo.

Añadir que uso ubuntu 11.10 de 64bits con unity y me va perfecto.

Las especificaciones técnicas del laptop las pueden ver en la siguiente dirección web:
http://h10025.www1.hp.com/ewfrf/wc/document?docname=c02513156&tmp_task=p...

Si precisan de algún dato más sobre el equipo se lo proporcionaré encantado.

Un saludo y gracias

Imagen de AgD
+1
0
-1

Haz un lspci y compila únicamente los drivers de tu hardware. El resto, lo quitas todo.

Para que hagas cuentas, un kernel genérico de ubuntu ocupa de media 13+4.5MB (17.5 MB) + 100 MB en módulos. Un kernel aligerado puede ocupar 3.6MB + 16 MB en módulos. Es decir, se ha eliminado todo lo que no es necesario.

Así por ejemplo en lugar de compilar 30MB de drivers de controladoras de disco, compila únicamente el driver de tu controladora de disco.

Un ejemplo, si lspci arroja:
...
05:00.0 SATA controller: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 02)
...

Ese es el único driver que debes de compilar, para que tu controladora de discos funcione.

Para el resto de opciones, que no son driver, tan solo tienes que leer la ayuda del kernel. Ver que función cumple y actuar en consecuencia.

Y por supuesto paciencia, no esperes que tu kernel funcione al primer intento porque no lo hará. Tendrás decenas de kernel panic antes de conseguir tener un kernel compilado desde cero por ti mismo.

Como consejo, te diría que lo hagas a la inversa. Copia la configuración actual de tu kernel. Es el archivo .config-versión que encontrarás en tu /boot/ al directorio donde este el kernel que este compilando, con el nombre .config. Y ve quitando todo lo que sobre: drivers u cosas que no uses.

+1
0
-1

make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux
Imagen de Arnao
+1
0
-1

muchas gracias, no había visto su respuesta antes de haber reportado la información de lspci de mi maquina. Bueno pues intentaré poco a poco ir viendo las opciones del kernel. Según se me vayan presentando dudas de las que no encuentre respuesta iré publicándolas para que me podais ayudar.

Un saludo

P.D.: compilaré el kernel 3.1.1 que es el ultimo estable. Seguiré las indicaciones del tutorial de su blog.

+1
0
-1
Imagen de Arnao
+1
0
-1

como información adicional añado los resultados de lspci y de lsusb

lspci

00:00.0 Host bridge: Intel Corporation Core Processor DMI (rev 11)
00:03.0 PCI bridge: Intel Corporation Core Processor PCI Express Root Port 1 (rev 11)
00:08.0 System peripheral: Intel Corporation Core Processor System Management Registers (rev 11)
00:08.1 System peripheral: Intel Corporation Core Processor Semaphore and Scratchpad Registers (rev 11)
00:08.2 System peripheral: Intel Corporation Core Processor System Control and Status Registers (rev 11)
00:08.3 System peripheral: Intel Corporation Core Processor Miscellaneous Registers (rev 11)
00:10.0 System peripheral: Intel Corporation Core Processor QPI Link (rev 11)
00:10.1 System peripheral: Intel Corporation Core Processor QPI Routing and Protocol Registers (rev 11)
00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)
00:1a.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 05)
00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 05)
00:1c.1 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 (rev 05)
00:1d.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a5)
00:1f.0 ISA bridge: Intel Corporation Mobile 5 Series Chipset LPC Interface Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller (rev 05)
00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 05)
01:00.0 VGA compatible controller: ATI Technologies Inc Madison [AMD Radeon HD 5000M Series]
01:00.1 Audio device: ATI Technologies Inc Redwood HDMI Audio [Radeon HD 5600 Series]
02:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
7f:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-Core Registers (rev 04)
7f:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 04)
7f:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 04)
7f:02.1 Host bridge: Intel Corporation Core Processor QPI Physical 0 (rev 04)
7f:03.0 Host bridge: Intel Corporation Core Processor Integrated Memory Controller (rev 04)
7f:03.1 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Target Address Decoder (rev 04)
7f:03.4 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Test Registers (rev 04)
7f:04.0 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 0 Control Registers (rev 04)
7f:04.1 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 0 Address Registers (rev 04)
7f:04.2 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 0 Rank Registers (rev 04)
7f:04.3 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 0 Thermal Control Registers (rev 04)
7f:05.0 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 1 Control Registers (rev 04)
7f:05.1 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 1 Address Registers (rev 04)
7f:05.2 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 1 Rank Registers (rev 04)
7f:05.3 Host bridge: Intel Corporation Core Processor Integrated Memory Controller Channel 1 Thermal Control Registers (rev 04)

lsusb

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 0bda:0159 Realtek Semiconductor Corp. Digital Media Card Reader
Bus 002 Device 003: ID 138a:0005 Validity Sensors, Inc. VFS301 Fingerprint Reader
Bus 002 Device 004: ID 064e:f209 Suyin Corp.

+1
0
-1
Imagen de Arnao
+1
0
-1

bueno pues he comenzado manos a la obra, he descargado las fuentes del kernel 3.1.1 y he llegado a la parte en la que cargo el archivo .config de mi kernel actual (el 3.0.0-13.22 de los repositorios de ubuntu) y hago make menuconfig para entrar en la configuración del kernel. Bueno pues ante la gran cantidad de opciones no se por donde empezar, cuales serían a grandes rasgos las más susceptibles de afectar al rendimiento y por ello en las que se haría más incapié? mas que nada por no empezar a toquetear a ciegas...
Como son muchas las opciones y mi inglés es nefasto tendría que ir una por una y tirar de traductor para saber que es cada cosa, con lo cual me llevará tiempo, pero bueno, como se suele decir, con paciencia y saliva...

Otra duda, recuerdo que otras veces que he intentado compilar el kernel he tenido errores y no se ha llegado a compilar por falta de librerías, que librerías y/o paquetes debo tener instalados para no tener errores a la hora de compilar?

Bueno por lo pronto eso es todo por hoy, un saludo

+1
0
-1
Imagen de EnriqueK
+1
0
-1

Con los que cada vez mas poderosos procesadores que hay, el cuello de botella está dado en las memorias, en los DD y en general a las rutas por donde fluye la información, por lo que el optimizar un kernel será un trabajo cuyos beneficios no serán perceptibles, si quieres puedes recompilar el kernel sacando los módulos que no uses, esto va a conseguir tener un kernel notablemente mas chico, para ello sigue estos simples pasos

1.- Descarga el source de la distro por que contiene todos los parches y correcciones que esta le ha dado al kernel base, o sea ejecuta
audo apt-get install linux-source
se instalará como archivo comprimido en /usr/src , lo descompimes en esa carpeta.
2.- Con el fin de que se activen todos los módulos que usas, conecta todos tus dispositivos que uses, como ser enchufa un pendrive, pon un cd en la compactera, reproduce un sonido, imprime algo, etc,etc
3.- Ahora entra en la carpeta de fuentes que has descomprimido y ejecuta

sudo make localmodconfig
sudo make-kpkg --initrd --append-to-version=-XXXXXXX kernel_image kernel_headers
En donde XXXXXXX es la etiqueta que tendrá el kernel personalizado.
4.- Ahora solo resta instalar los dos paquetes .deb que se generaron en el directorio superior a la de las fuentes o sea en /usr/src, terminada la instalación de estos, reinicias y ya podrás elegir el nuevo kernel.

+1
0
-1
Imagen de Arnao
+1
0
-1

sería otra opción muy interesante y a la vez más sencilla de realizar que tener que configurar todo de 0 que sería muy laborioso, pero esta opción sería igualmente valida? es decir, que con un kernel compilado de esta forma conseguiría que mi máquina rindiese igual que con el kernel configurado "a mano"? Si así fuese, o por lo menos el rendimiento fuese similar en ambos casos me quedaría sin duda con esta opción.

Muchas gracias, un saludo

EDITO:
Otra duda que me surge, el paso 3 lo tengo que realizar mientras se está funcionando todo lo mencionado en el paso 2?

+1
0
-1
Imagen de EnriqueK
+1
0
-1

Como dije antes, los procesadores han avanzado mucho mas que el resto de los componentes de una PC, hoy el cuello de botella está en esos otros componentes, por ejemplo el día que en vez de cableado de cobre se tenga una red de fibra óptica, recién se notará un cambio radical en el rendimientto del equipo, por todo esto, hoy en día el compilar un kernel casi que no tiene sentido ya que la fuerza bruta de los poderosos procesadores que hay hoy, cubren cualquier falencia.
Respecto al segundo punto, debes mantener hasta después de ejecutar
sudo make localmodconfig
Esta orden lo que hace es generar el archivo .config la cual se hace rápido si es que estás recompilando para la misma versión del kernel , en cambio si usas como source un kernel mas reciente , tendrás que seleccionar a mano las nuevas opciones.
Para ejecutar el otro comando ya puedes sacar todo lo que montaste e inclusive apagar el equipo y continuar el otro momento

+1
0
-1
Imagen de Arnao
+1
0
-1

muchas gracias, lo haré a ver que tal.

un saludo

+1
0
-1
Imagen de Arnao
+1
0
-1

vale, pues estoy en ello pero me han surgido varias cuestiones:
al hacer sudo make localmodconfig me sale en la terminal lo siguiente:

BT8XX GPIO abuser (GPIO_BT8XX) [N/m/y/?] (NEW)

ahí que tengo que contestar?

y la otra cuestión es que cuando ejecuto
sudo make-kpkg --initrd --append-to-version=-XXXXXXX kernel_image kernel_headers
me sale:

sudo: make-kpkg: command not found

el comando debe estar mal, cual sería el correcto?

EDITO: he resuelto el problema de make-kpkg, resulta que me faltaba instalar la herramienta y ya está compilando. En cuanto a lo del GPIO contesté y

+1
0
-1
Imagen de AgD
+1
0
-1

No, no es lo mismo. Esta opción no optimiza el kernel, tan solo descarta los módulos que no están cargados en memoría en el momento que se ejecuta la utilidad. Aunque como ya ha comentado el compañero, las mejoras en rendimiento suelen ser pequeñas entre un kernel optimizado y una genérico por lo que en un sobremesa no son apreciables.

Si usas el kernel de Ubuntu, aun pasándolo por esta utilidad, el kernel estará compilado para una arquitectura genérica paraq que sirva en cualquier PC. Configurar correctamente el procesador mejorará el desempeño del kernel.

     ?????????????????????????? Processor family ??????????????????????????
     ?  Use the arrow keys to navigate this window or press the hotkey of ?  
     ?  the item you wish to select followed by the . Press    ?  
     ?  <?> for additional information about this option.                 ?  
     ? ?????????????????????????????????????????????????????????????????? ?  
     ? ?     (X) 386                                                    ? ?  
     ? ?     ( ) 486                                                    ? ?  
     ? ?     ( ) 586/K5/5x86/6x86/6x86MX                                ? ?  
     ? ?     ( ) Pentium-Classic                                        ? ?  
     ? ?     ( ) Pentium-MMX                                            ? ?  
     ? ?     ( ) Pentium-Pro                                            ? ?
     ? ?     ( ) Pentium-II/Celeron(pre-Coppermine)                     ? ?  
     ? ?     ( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon       ? ?  
     ? ?     ( ) Pentium M                                              ? ?  
     ? ?     ( ) Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon     ? ?  
     ? ?     ( ) K6/K6-II/K6-III                                        ? ?  
     ? ?     ( ) Athlon/Duron/K7                                        ? ?   
     ? ?     ( ) Opteron/Athlon64/Hammer/K8                             ? ?  
     ? ?     ( ) Crusoe                                                 ? ?  
     ? ?     ( ) Efficeon                                               ? ?  
     ? ?     ( ) Winchip-C6                                             ? ?  
     ? ?     ( ) Winchip-2/Winchip-2A/Winchip-3                         ? ?  
     ? ?     ( ) AMD Elan                                               ? ?  
     ? ?     ( ) GeodeGX1                                               ? ?  
     ? ?     ( ) Geode GX/LX                                            ? ?  
     ? ?     ( ) CyrixIII/VIA-C3                                        ? ?  
     ? ?     ( ) VIA C3-2 (Nehemiah)                                    ? ?  
     ? ?     ( ) VIA C7                                                 ? ?  
     ? ?     ( ) Core 2/newer Xeon                                      ? ?  
     ? ?     ( ) Intel Atom                                             ? ?  
     ? ??????????v(+)???????????????????????????????????????????????????? ?  
     ??????????????????????????????????????????????????????????????????????  
     ?                             < Help >                       ?  
     ??????????????????????????????????????????????????????????????????????

Ese es solo un ejemplo, pero existen muchas opciones en el kernel que pueden ser interesantes activarlas, desactivarlas o cambiar su configuración.

+1
0
-1

make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux
Imagen de Arnao
+1
0
-1

bueno lo que tengo pensado hacer es una combinación de ambos métodos, no se si será bueno o no pero me parece que si compilo un kernel con localmodconfig cargando unicamente los módulos que uso, y luego con el .config de este kernel lo uso para confugurar un nuevo kernel en el cual ya elegiría las opciones adecuadas para mis dispositivos resultaría un kernel bastante optimizado para mi maquina. Estoy en lo cierto? o por el contrario puede resultar desastroso?

+1
0
-1
Imagen de lukaspoissen
+1
0
-1

hola , ya tengo el archivo .config, pero cuando mando el comando me tira ese error de ahi abajo , probe con varias formas , sin fakeroot tambien que lei en internet y nada.

que puede ser

sudo fakeroot make-kpkg --initrd --revision=mikernl.1.0 kernel_image

make[3]: *** No hay ninguna regla para construir el objetivo «kernel/bounds.c», necesario para «kernel/bounds.s». Alto.
make[2]: *** [prepare0] Error 2
make[2]: se sale del directorio «/usr/src/linux-headers-3.0.0-14-generic-pae»
make[1]: *** [debian/stamp/conf/kernel-conf] Error 2
make[1]: se sale del directorio «/usr/src/linux-headers-3.0.0-14-generic-pae»
make: *** [debian/stamp/conf/minimal_debian] Error 2
Failed to create a ./debian directory: at /usr/bin/make-kpkg line 984.

+1
0
-1

2 gb de ram requiere windows seven, con 2 gb de ram , me instalo Alto ubuntu by el grone de los 15 pesos