Ir al contenido
Shiba87

Configurar y compilar el kernel Linux (Debianeros y no tan Debianeros)

Recommended Posts

vBUSvEk.png?1


Hace tiempo escribí un tema similar y aunque las ansias de trastear siguen siendo las mismas, hay cosas que debemos poner al día.
Es por eso que he querido rehabilitar esta "pequeña" guía que a más de uno, incluyéndome, le ha servido de ayuda en más de una ocasión

Importante:
  • Todos los comandos son ejecutados como Root, salvo el utilizado para la descompresión del kernel. Si usas Ubuntu o derivados, anteponer siempre sudo.
  • Paciencia, no apresurarse, el proceso no es complicado, pero hay que ser meticulosos, y tomarse tiempo para indagar y recapacitar
  • Un kernel con demasiados añadidos será muy lento, y uno con muy pocos, estará muy limitado en compatibilidad. Buscar un término medio aceptable
  • La regla de oro a la hora de configurar el kernel será: Si no se sabe o no se está seguro, no se toca
Utilizaré dos métodos (Y algunas variantes) distintos para compilar el kernel:


Método General


Para compilar el kernel de esta manera es necesario tener instalados los paquetes:

libncurses5-dev build-essential initramfs-tools bc
Descargar la versión del kernel que queremos instalar desde

http://www.kernel.org/

Para esta ocasión utilizaré Linux-4.6.tar.xz para otras versiones sólo hay que cambiar la numeración en los comandos que daré a continuación.


2.1 Descomprimirlo y moverlo a /usr/src


tar -xvf linux-4.6.tar.xz
mv linux-4.6 /usr/src
2.2 Crear enlace simbólico.

Creamos un enlace a la carpeta que acabamos de incluir en /usr/src


ln -s /usr/src/linux-4.6 /usr/src/linux
En caso de que el enlace ya exista eliminar previamente con rm:

rm /usr/src/linux
Configurar y compilar el kernel


3.1 Ingresar en /usr/src/linux y ejecutar lo siguiente:

make clean
make mrproper
make menuconfig
3.2 Hemos llegado a la parte clave, configurar el kernel.

Para eso he creado una sección especial justo debajo. Una vez esté el kernel configurado, retomar desde aquí

NOTA: Es posible utilizar la configuración del kernel que ya teníamos, ejecutando lo siguiente en lugar de make menuconfig:


make oldconfig
NOTA 2: Si existe alguna diferencia entre los kernels, nos preguntará por las características que no coinciden, una por una.
NOTA 3: Exite otra manera de configurar el kernel para que incluya sólo los módulos que realmente usamos, lo que nos ajusta muy bien Linux a nuestras máquina/necesidades.

El comando es el siguiente.


make localmodconfig
Como dije al principio del a guía, el inconveniente de esta configuración es que es muy ajustada, pues sólo reconoce lo que estamos usando en el momento que la ejecutamos, y eso puede ocasionar que módulos que sí usamos o que necesitaremos más adelante no se incluyan en el kernel porque no estaban en uso esos dispositivos cuando lo configuramos.


Compilar e instalar

Para eso ejecutamos lo siguiente:

(Puede tardar entre 2 minutos y dos horas, dependiendo del nº de módulos a compilar y de la potencia de la cpu)
(Lo he colocado todo en una sola línea porque el proceso es muy largo y hacerlo por pasos sería perder mucho tiempo. En caso de error, no quedará más remedio que ir paso a paso para ver dónde falla)

make; make modules; make modules_install install
A día de hoy no es necesario, pero si por alguna razón quisiéramos generar manualmente las imágenes initrd, basta con indicar la ruta correcta a mkinitramfs

mkinitramfs -o /boot/initrd.img-4.6 /lib/modules/4.6
Actualizar GRUB

Si todo ha salido bien, el kernel estará compilado y listo para usar, ya sólo falta actualizar el grub, para que nos dé la opción de arrancar con él, aunque lo más probable es que el update grub se ejecute automáticamente al ejecutar el make install.
En caso de que no sea así, basta con ejecutar:


update-grub




Método Debian


Para compilar el kernel de esta manera es necesario tener instalados los paquetes:

libncurses5-dev
build-essential
initramfs-tools
kernel-package

Es decir:

aptitude install libncurses5-dev build-essential initramfs-tools kernel-package
Descargar la versión del kernel que queremos instalar desde

http://www.kernel.org/.

Para esta ocasión utilizaré Linux-4.6.tar.xz para otras versiones sólo hay que cambiar la numeración en los comandos que daré a continuación.

2.1 Descomprimirlo y moverlo a /usr/src


tar -xvf linux-4.6.tar.xz
mv  linux-4.6 /usr/src
2.2 Crear enlace simbólico.

Creamos un enlace a la carpeta que acabamos de incluir en /usr/src


ln -s /usr/src/linux-4.6 /usr/src/linux
En caso de que el enlace ya exista eliminar previamente con rm:

rm /usr/src/linux
Configurar y compilar el kernel


3.1 Ingresar en /usr/src/linux, hacer limpieza y configurar los parámetros del kernel.

make clean
make mrproper
Para la configuración podemos optar por menuconfig, xconfig o, si somos más valientes, editar el archivo .config con nuestras propias manos :cejas:

Simplemente
make menuconfig
sn2SIbK.jpg

Y para hacerlo de manera más gráfica necesitaremos algunas dependencias extra, pues dependemos de las librerías y herramientas de desarrollo de Qt
aptitude install libqt4-dev qt4-dev-tools
make xconfig
Ez4FfE7.jpg?1

O si nos decantamos por GTK+
aptitude install libgtk2.0-dev libglib2.0-dev libglade2-dev
make gconfig
l4hece8.jpg


3.2 Hemos llegado a la parte clave, configurar el kernel.

Para tratar este tema con un poco más de profundidad he creado una sección específica justo debajo. Una vez esté el kernel configurado, retomar desde aquí


NOTA: Es posible utilizar la configuración del kernel que ya teníamos, ejecutando lo siguiente:
make oldconfig
NOTA 2: Si existe alguna diferencia entre los kernels, nos preguntará por las características que no coinciden una por una

NOTA 3: Exite otra manera de configurar el kernel para que incluya sólo los módulos que realmente usamos, lo que nos ajusta muy bien el kernel a nuestras máquina/necesidades.

El comando es el siguiente.
make localmodconfig
Como dije al principio de la guía, el inconveniente de esta configuración es que es ajustada en extremo, pues sólo reconoce lo que estamos usando en el momento que la ejecutamos, y eso puede ocasionar que módulos que sí usamos o que necesitaremos más adelante no se incluyan en el kernel porque no estaban en uso cuando realizamos la configuración.

Compilar e instalar

(Puede tardar entre 2 segundos y dos semanas, dependiendo del nº de módulos a compilar y de la capacidad de la cpu)

make-kpkg --initrd kernel_image kernel_headers
Instalar el kernel

El comando anterior habrá reducido el kernel resultante a 2 paquetes deb que estárán en /usr/src
Ya sólo nos quedaría instalarlos,para tener un nuevo kernel funcional (aunque esto último dependerá de si hemos hecho las cosas bien):
dpkg -i /usr/src/linux*.deb
  • Al instalar los paquetes deb, GRUB se actualizara automáticamente
  • Los paquetes debs pueden ser copiados y utilizados posteriormente en otras instalaciones o en otras distros (basadas en Debian), pero dependiendo de los ajustes, quizá sólo ofrezcan un buen resultado en el equipo donde fueron compilados




Método "Externo"

Este método es una variante del método Debian y se utiliza para compilar el kernel de una máquina desde otra distinta.
Viene muy bien para compilar kernels para máquinas poco potentes desde pc más rápidos, o para ahorrar algo de tiempo.

Configurar el kernel en la máquina donde queremos instalarlo, siguiendo cualquiera de los métodos anteriores.

(se puede hacer desde la máquina donde se va a compilar, pero hay que tener mucho más cuidado con las opciones que se eligen)


Copiar el fichero de configuración del kernel desde el pc objetivo hasta el equipo donde vamos a compilar.

Lo encontraremos en (es un archivo oculto):

/usr/src/linux/.config


En el pc que se encargará de compilar seguiremos también los pasos del método Debian, pero en lugar de configurar el kernel, colocaremos el .config que ya tenemos del otro pc en la carpeta:

/usr/src/linux/


Procedemos a crear los paquetes .deb que contienen el kernel y sus cabeceras
  • 4.1 Si ambas máquinas son de la misma arquitectura
make-kpkg --initrd kernel_image kernel_headers
  • 4.2 Kernel de 32 bits compilado en máquina de 64 bits
linux32 make-kpkg --rootcmd fakeroot --cross-compile - --arch=i386 --initrd kernel_image kernel_headers
  • 4.3 Kernel de 64 bits compilado en máquina de 32 bits
make-kpkg --rootcmd fakeroot --cross-compile - --arch=amd64 --initrd kernel_image kernel_headers
Copiar los paquetes deb e instalarlos en la máquina objetivo

Ahora es cuando se lía la cosa y es el momento en el que tiramos de "la solución chapuza"

Para máquinas de la misma arquitectura, no existe ningún problema, la instalación de los paquetes deb no tiene ningún misterio.

Pero para máquinas de diferente arquitectura, aunque hayamos compilado bien el kernel con la arquitectura correcta, el make-kpkg nos creará un deb para la arquitectura del pc donde se ejecutó y no para el pc objetivo. Intentar instalar un paquete amd64 en un pc i386 o viceversa nos dará error de arquitectura.

Se pueden crear paquetes para otras arquitecturas utilizando entornos de chroot, pero me parece demasiado trabajo para un paquete que es para un sólo ordenador y que se va a instalar una sola vez.

Por lo que haremos la siguiente "chapuza":
dpkg -i --force-architecture *.deb
No habrá lugar a conflicto, el contenido del paquete es de la misma arquitectura que elegimos al compilarlo.

NOTA En el caso de compilar un kernel de 32 en una máquina de 64, puede evitarse anteponiendo a la orden make-kpkg el comando linux32




Proceso de configuración (es igual para todos los métodos)

Una vez hayamos seguido los pasos anteriores y ejecutado

Para la configuración en un menú desde la terminal

make menuconfig

sn2SIbK.jpg


Para la configuración mediante la interfaz gráfica Qt
make xconfig

Ez4FfE7.jpg?1


O si nos decantamos por la interfaz GTK+
make gconfig

l4hece8.jpg


No suele quedar claro cómo se debe configurar Linux para, posteriormente, compilarlo, y hay poca información al respecto, por lo que intentaré centrarme en varias secciones y opciones que pueden resultar importantes.

Podemos utilizar los atajos que proporciona menuconfig a la hora de configurar:
  • / Nos permite buscar
  • shift +? nos da la descripción de la sección o módulo en el que nos encontremos y también consejos sobre lo que podemos hacer (En inglés)
  • n desmarca la opción
  • m marca la opción como módulo
  • y incluye la opción dentro del kernel
A la hora de seleccionar qué se incluye como módulo y qué no, tener en cuenta lo siguiente:
  • Si es vital, se incluye dentro del kernel
  • Si es un componente o periférico se incluye como módulo
  • Los componentes que deben ser incluidos dentro del kernel, en la mayoría de los casos, no permiten otra cosa
Las secciones en las que nos centraremos son:


2.1 General setup

u8Rc23j.jpg

Lo más importante a configurar en esta sección es:
  • Kernel compression mode Nos permite elegir el nivel de compresión de la imagen resultante del Kernel

ZW9O3qD.jpg?1

La diferencias entre elegir una u otra opción no son muy marcadas, por lo que si disponemos de espacio, elegiremos la más rápida
  • Gzip Es el compresor por defecto y el habitual. Tiene unos valores de compresión y descompresión intermedios y un tamaño del kernel más bien alto.
  • Bzip2 La velocidad de compresión es intermedia. La descompresión es lenta. El tamaño del kernel será un 10% menor que con gzip. Bzip2 usa una gran cantidad de memoria.
  • LZMA proporciona mayor compresión, pero no es nada rápido (más bien bastante lento). El tamaño del kernel será aproximadamente un 33% (una tercera parte) más pequeño comparado con gzip.
  • XZ incorpora el algoritmo de compresión LZMA2, siendo algo mejor cuando se trata de lidiar con archivos no comprimibles. Es, por tanto, el que ofrece mayor compresión con el costo de ser también el más lento
  • LZO La compresión es muy poca, un 10% más de tamaño del kernel con respecto a gzip, lo que le hace ser muy rápido.
  • LZ4 la compresión en este caso es menor que LZO, pero al mismo tiempo la velocidad de descompresión es la más rápida de todas.
-De mayor a menor compresión: XZ>LZMA>Bzip2>Gzip>LZO>LZ4
-De mayor a menor rapidez des/comprimiendo: LZ4>LZO>Gzip>Bzip2>LZMA>XZ

NOTA Para poder comprimir en lzo o LZ4 tendremos que instalar primero el paquete lzop o liblz4-tool respectivamente
  • Support for paging of anonymous memory Nos permite habilitar o deshabilitar la memoria swap
  • Optimize for size Como el mismo nombre indica, optimiza GCC para obtener un kernel más pequeño
  • Initial RAM filesystem and RAM disk (initramfs/initrd) support a la hora de arrancar el sistema, suelen ser necesarios algunos módulos que no se encuentran dentro del propio kernel. Es ahí donde la imagen de arranque initrd entra en juego. Al igual que en el caso de la imagen del kernel, podremos elegir también el formato de compresión de la misma.
  • Control Group Support Optimización necesaria para mejorar el desempeño multitarea (versiones de Linux superiores a la 2.6.38)

gEJLbtA.jpg?1

Dentro de esta sección se habilitarán las siguientes opciones:
  • Namespace cgroup subsystem
  • Freezer cgroup subsystem
  • Device Controller for cgroups
  • Cpuset support
  • Include legacy /proc/<pid>/cpuset
  • Resource counters
  • Memory Resource Controller for Control Groups
  • Memory Resource Controller Swap Extension
  • Group CPU scheduler (y lo que hay dentro)
Automatic process group scheduling mejora el desempeño multitarea (Linux 2.6.38 o más reciente)

Para que sea efectivo, debemos habilitarlo.

jDzsCWm.jpg?1


Code optimization level como su propio nombre indica, nos permitirá ajustar el nivel de optimización con el que se compilará el código
  • Default optimization (optimización por defecto -O2)
  • Optimize harder (Optimización intensiva -O3)
  • Optimize for size (Optimizar por tamaño -Os)
2.2 Enable the block layer

Uyp7LmU.jpg?1


En esta sección se puede habilitar/deshabilitar y seleccionar distintos "block layers" para el kernel (y no me extenderé más en esto), así como el tipo de particiones soportadas.

K2t8nuZ.jpg?1


Dentro de IO schedulers marcaremos como block layer por defecto (Default I/O scheduler).
  • CFQ I/O scheduler
Otras posibilidades, como deadline o No-op, son mejores alternativas para discos de memoria sólida (SSD) y, aunque no se encuentra disponibles por defecto, Brain Fuck Scheduler (BFQ), se postula con la próxima alternativa que aparecerá por defecto.
Al margen de lo que elijamos, siempre podremos definir otra opción diferente en la configuración del sistema que no sea la que hemos fijado por defecto o, incluso, definir varias alternativas diferentes a la vez, según el caso.

Z6gSUwp.jpg?1



2.3 Processor type and features

Sobra decir que en esta sección se configura todo lo relacionado con el procesador.

5FmpOgC.jpg?1


Lo más importante a configurar en esta sección es:
  • Processor family Donde elegiremos nuestro procesador (existen también opciones genéricas)
  • Maximum number of CPUs Como su nombre indica, número máximo de CPus
  • SMT (Hyperthreading) scheduler support Imprescindible para procesadores con Hyperthreading y desaconsejado para los que no lo tengan
  • Multi-core scheduler support Mejora las decisiones del conmutador cuando se trabaja con múltiples núcleos de CPU
  • High Memory Support Esta opción sólo está disponible para 32 bits, y nos permite ampliar el límite de memoria física.

Off= 1Gb o menos
4GB= 4GB o menos
64GB= 64GB o menos

  • PAE (Physical Address Extension) Support Soporte PAE (extensión de memoria física en sistemas de 32 bits) Dependiendo de lo que respondiéramos a la anterior, la elegiremos o no.
  • Timer frequency Nos permite elegir la frecuencia del timer (no me voy a extender en ésto)
  • 1000Hz valor recomendado para equipos de escritorio
  • 100Hz valor recomendado para servidores de muchos procesadores
  • Preemption Model Aquí jugaremos con la latencia, mejorando el tiempo de reacción, aunque con un pequeño coste en cuanto a rendimiento. Las opciones se explican por sí mismas en orden de mayor a menor latencia en función del tipo de equipo que vayamos a manejar, servidor o equipo de escritorio.
    • No Forced Preemption (Server)
    • Voluntary Kernel Preemption (Desktop)
    • Preemption Kernel (Low-Latency Desktop)
Para aprovechar esta mejora en equipos "de andar por casa", nos interesa una latencia baja (Desktop) o muy baja (Low-Latency Desktop)
  • Transparent Hugepage Support Mejora desempeño en tareas que hagan uso intensivo de memoria (Linux 2.6.38 o más reciente)
Al habilitar esta sección aparecerán dos subsecciones que tendremos que habilitar también Page migration y Transparent Hugepage Support sysfs defaults

NOTA dentro de Transparent Hugepage Support sysfs defaults, si queremos ser conservadores elegiremos:

madvise


En realidad, las dos opciones son correctas, pero madvise es mucho menos "agresiva" y ofrece más garantías. Con always ocurre lo contrario, es más agresiva, pero ofrece menos garantías. Es a elección de cada uno, suelo optar por madvise, pero si always también les valdrá.
  • Support for hot-pluggable CPUs Permite habilitar y deshabilitar procesadores o núcleos "al vuelo", si utilizas esta característica inclúyelo.
  • Memtest Permite realizar test de memoria con memtest
2.4Power management and ACPI options

uRTb7dy.jpg?1


Administración de energía, suspensión, ACPI, escalado de frecuencia de CPU... todo está aquí
  • ACPI (Advanced Configuration and Power Interface) Support
  • CPU Frequency scaling permite modificar la frecuencia de la CPU al vuelo
    • performance mantiene la frecuencia más alta posible
    • powersave mantiene la frecuencia más baja posible
    • userspace permite cambiar la frecuencia de la CPU manualmente o a través de aplicaciones, desde el espacio de usuario
    • ondemand la frecuencia de la CPU se ajusta en función de la demanda
    • conservative la respuesta es similar al ajuste según la demanda, pero haciendo hincapié en prolongar la autonomía (para equipos que dependen de baterías)
  • Default CPUFreq governor aquí elegiremos el que utilizará nuestro sistema por defecto
2.5 Bus options (PCI etc.)

Aquí podremos administrar las conecciones, Pci, PCI-E y los distintos buses.

Ar39q09.jpg?1


Lo más importante a tener en cuenta de esta sección:
  • PCI support Nos permite habilitar el soporte bus Pci.
  • PCI Express support Nos permite habilitar el soporte bus Pci-Express. Imprescindible para tarjetas gráficas actuales
  • PCI Express ASPM control Opción que brinda un mejor control del consumo de energía en relación al Bus PCI-E. Esta opción es muy importante a la hora de ahorrar energía, sobre todo en equipos portátiles
2.6 Device Drivers

Nos permite seleccionar todo lo relacionado con los componentes de nuestro equipo

esXPpBo.jpg?1


Esta sección es muy extensa, por lo que sólo me centraré en las categorías importantes que contiene sin profundizar en ellas:
  • Multiple devices driver support Nos permite habilitar el soporte RAID y LVM, poco más que decir
  • Network device support Tarjetas de red, wifi, Adaptadores wifi USB y demás, están en esta sección.
  • Input device support Dispositivos de entrada, tales como Teclados, ratones, joysticks, tablets, touchscreens... están en esta sección
  • Multimedia support Capturadoras de video, sintonizadores de TDT/DVB , y adaptadores DAB están aquí
  • Sound card support En esta sección podemos meter bastante la mano, seleccionando el tipo de tarjeta de sonido dentro de:
  • Advanced Linux Sound Architecture Elegimos entre PCI,USB o generic y dentro de la categoría, el modelo concreto de tarjeta (si lo conocemos), y desmarcamos el resto. Aplicar regla de oro
  • Graphics support En esta sección se encuentra todo lo referente a gráficos. En esta sección, a partir del 2.6.35 tendremos en cuenta la opción:
  • Maximum number of GPUs Como su nombre indica, número máximo de GPus. Esta opción es especialmente importante para portátiles que llevan más de una gráfica y alternan entre ellas según se requiera y para estaciones con varias gpus trabajando conjuntamente.
  • USB support USBs en general, impresoras, modems wifi, pendrives, etc. destacar dos elementos en particular: EHCI HCD (USB 2.0) support y xHCI HCD (USB 3.0) support el resto depende de lo que cada uno use
  • MMC/SD/SDIO card support Lectores de tarjeta de memoria, (se refiere a los integrados, los de tipo USB se manejan en la sección anterior)
  • Staging drivers En esta sección se encuentran los controladores en estado experimental o con soporte parcial, si tienes un dispositivo que no tiene soporte, puede que encuentres aquí.
2.7 File systems

Aquí se configura todo lo relacionado con Sistemas de archivos y tipos de particiones.

y7lBvc5.jpg?1


Lo más destacado en esta sección es:
  • XFS filesystem support Soporte para XFS
  • Btrfs filesystem support Soporte para Btrfs
  • The Extended 4 (ext4) filesystem (imprescindible)
  • CD-ROM/DVD Filesystems Marcar todas las opciones dentro de esta sección
  • DOS/FAT/NT Filesystems Particiones Windows, MSDOS, VFAT y NTFS, si las vas a usar, inclúyelas (como módulo si es posible)
  • Partition Types La mayoría utilizamos particiones tipo PC BIOS, pero si dispones de particiones Mac, Sun, BSD u otro tipo, las encontrarás aquí
2.8 Security options

Esta sección es Realmente compleja y ofrece muchas posibilidades.

Para aprender a usarla y configurarla hay que estar bastante puesto en el tema y no es mi caso.
Las opciones que trae por defecto son las óptimas en la inmensa mayoría de los casos y
a no ser que necesites un extra en seguridad por algún motivo, no es necesario tocar nada.


2.8 Virtualization

Pues eso, virtualización

Si utilizas las características de virtualización, como por ejemplo en máquinas virtuales, esta sección tendrá que estar activa.

gx4Uh8A.jpg?1


Lo más importante:
  • Kernel-based Virtual Machine (KVM) support Para máquinas virtuales, elegir esta opción y ajustar al tipo de procesador
2.9 Networking support

Todo lo relacionado con redes se encuentra en esta sección: Wifi, Wimax, bluetooth, Radio, ..... y las opciones relacionadas con los diferentes protocolos de red.

0MJT6NJ.jpg?1


Lo más importante:
  • Wireless Si tenemos/usamos lo marcamos, si no, pues lo desmarcamos
  • Bluetooth subsystem support Lo mismo que en el caso anterior




Guardar los cambios y continuar con el método que estábamos llevando a cabo:

Pulsar exit, repetidas veces hasta que salgas del configurador, y cuando pregunte si queremos guardar le decimos que




Otros procedimientos útiles

Velocidad de Compilado

Hace poco me enteré de que Linus Torvalds es capaz de compilar el kernel en menos de un minuto utilizando algunos "trucos" de su arsenal privado. Nosotros no vamos a ser menos.

Para usar varios hilos simultáneos al compilar tenemos que ejecutar el make con la opción -jn. Siendo n el número de procesadores o núcleos que tenga nuestro equipo +1.

Por ejemplo, para un equipo de 4 núcleos en el caso del método general, sería:

make -j5


En el caso del método Debian, no se puede especificar la opción -j a make-kpkg, así que habrá que especificarla antes, mendiante:

export CONCURRENCY_LEVEL=X

Y luego compilar, ejecutar el resto de procesos normalmente.

make-kpkg --initrd kernel-image kernel-headers
Tanto para "CONCURRENCY_LEVEL=", como para la opción -j, el número asociado X debe ser igual al número de nucleos o procesadores de nuestra máquina


Por ejemplo, para un equipo con un procesador de 4 núcleos:

export CONCURRENCY_LEVEL=5


Según vaya recopilando información iré colocando en esta sección algunos "trucos" para que tardemos menos en compilar el kernel


Compilar un único módulo

A todos nos ha pasado, después de pasar un buen rato compilando, comprobamos que todo funciona y es entonces cuando caemos en la cuenta de que nos falta un módulo importante.
¿Tenemos que volver a compilarlo todo?. La respuesta es NO.

Los pasos que tenemos que seguir son:

Localizar el módulo que nos falta desde menuconfig y además de marcarlo, también copiamos su ruta.(Es difícil de explicar, por lo que pondré un ejemplo):


1.1 Supongamos que se nos ha olvidado el soporte para USB3 (algo muy común :lol:)

Abrimos el menuconfig y nos vamos hasta donde está el módulo y solicitamos ayuda pulsando "shift + ?"

Nos fijamos en la parte que dice "Defined at:"

En este caso la ruta sería: drivers/usb/host/


1.2 Una vez conocemos la ruta del módulo lo compilamos :

make modules_prepare
make M=drivers/usb/host/ modules


1.3 E instalamos:

make modules_install

Aplicar parches al Kernel

Método General


Descargamos el parche que queramos incluir y lo copiamos a la carpeta con las fuentes del kernel (/usr/src/linux). Una vez allí ejecutamos

Parche simple

patch -p1 < nombre-del-parche.diff

Finalmente recompilamos el kernel siguiendo los pasos del tutorial.

Conjunto de parches comprimidos

Puede ocurrir que nos encontremos intentando aplicar un conjunto de parches comprimidos. En este caso no es necesario que los extraigamos para luego ir aplicándolos uno a uno, podemos optimizar un poco las cosas actuando directamente sobre el archivo comprimido.

GZ

zcat nombre-del-parche.x.y.z.gz | patch -p1

BZ2

bzcat nombre-del-parche.x.y.z.bz2 | patch -p1

XZ

xzcat nombre-del-parche.x.y.z.xz | patch -p1



Revertir la acción de un parche

Para eso tenemos la opción -R (reverse)

patch -R -p1 < nombre-del-parche.x.y.z


Método Debian

Descargamos el parche que queramos incluir y lo copiamos a la carpeta con las fuentes del kernel (/usr/src/linux)

Y en lugar de compilar como se expone en el "método Debian", lo que debemos ejecutar para compilar es lo siguiente:

make-kpkg --initrd --added-patches=nombre-del-parche.patch kernel_image kernel_headers

https://www.kernel.org/doc/Documentation/applying-patches.txt

 



https://www.kernel.org/doc/Documentation/

Compartir este post


Enlace al post
Compartir en otros sitios

bueno, no quiero agregar nada al post. ya que es perfecto, lo vengo usando desde que lo pusiste por primero vez hace años en vagos. y siempre que tengo que compilar un kernel recurro a el, como mi manual principal.

 

Muchas gracias.

Compartir este post


Enlace al post
Compartir en otros sitios

A ver si me pueden ayudar.. estoy pensando en compilar un kernel para mi distro.. la que estoy usando es mint 15 con kernel 3.8.0 y tengo problemas con la instalacion de los drivers de la placa de WiFi.. el problema viene por la compatibilidad con el kernel (corrijanme por favor si estoy errado).

El asunto es que antes los tenia instalado en un kernel 3.2 e iban perfectos, ahora en el 3.8 se complico, me tira unos errores al querer instalarlos, les dejo el log aca..

 

make -C /lib/modules/3.8.0-30-generic/build M=/home/xxfacusxx/Descargas/rtl_92ce_92se_92de_8723ae_88ee_linux_mac80211_0012.0207.2013 modules
make[1]: Entering directory `/usr/src/linux-headers-3.8.0-30-generic'
  CC [M]  /home/xxfacusxx/Descargas/rtl_92ce_92se_92de_8723ae_88ee_linux_mac80211_0012.0207.2013/base.o
In file included from /home/xxfacusxx/Descargas/rtl_92ce_92se_92de_8723ae_88ee_linux_mac80211_0012.0207.2013/base.c:39:0:
/home/xxfacusxx/Descargas/rtl_92ce_92se_92de_8723ae_88ee_linux_mac80211_0012.0207.2013/pci.h:247:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rtl_pci_probe’
make[2]: *** [/home/xxfacusxx/Descargas/rtl_92ce_92se_92de_8723ae_88ee_linux_mac80211_0012.0207.2013/base.o] Error 1
make[1]: *** [_module_/home/xxfacusxx/Descargas/rtl_92ce_92se_92de_8723ae_88ee_linux_mac80211_0012.0207.2013] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.8.0-30-generic'
make: *** [all] Error 2

Esto ejecutado como root.

 

Mi pregunta es, me combiene compilar un kernel mas antiguo para mi distro? y de ser asi, al darla a actualizar me dara conflictos?

 

Tambien al momento de compilarlo queria optimizarlo un poco para aumentar el rendimiento para mi notebook, vamos traen soporte para bluetooth y mas cosas que no tiene, ocupan espacio en vano y estaria bueno sacarlas.

 

Perdon si esta duda no va aca, pero es que justo como es de compilacion, por eso decidi hacerla aca. Si no corresponde, creo un hilo nuevo donde me indiquen y pido disculpas de ante mano.

Compartir este post


Enlace al post
Compartir en otros sitios

Normalmente si tienes los drivers funcionando en Kernel 3.2 y actualizas a 3.8, deberían ir sin problema alguno. Lo mejor sería o volver a instalar el kernel 3.2 o compilar una versión más actual y activar en ellos el soporte para los drivers de tu tarjeta Wifi. En mi caso tengo kernel 3.10 y lo compile sin noveau :D, siempre tengo los 3.9 alli instaladitos en caso que algo me falle con los 3.10 pero hasta ahora van de maravilla y ya llevo algunos meses sin cambiar de kernel :P. Ahora como estas instalando el driver de la wifi? Por medio se synaptic? por medio de la consola con aptitude? o estas compilandolos? en caso de ser lo último, busca en los repos si exísten tus drivers alli para que no pases tanto problema :)

Compartir este post


Enlace al post
Compartir en otros sitios

Yo mejor empezaría por saber con qué hardware estamos tratanto :P

 

Por lo poquito que se ve en el mensaje de error, parece una rtl819x, pero a saber qué modelo y qué controladores :sweat:

 

Abre un tema nuevo con la lista de componentes del equipo en cuestión, especialmente la Wifi y los controladores que estás usando para habilitarla y ya vemos con calma lo que se puede hacer.

 

Si es una tarjeta interna:

 

lspci -nn

 

Si es usb

 

lsusb

 

Nos basta con la ID, el resto se puede averiguar muy fácilmente

Compartir este post


Enlace al post
Compartir en otros sitios

buenas tardes chicos...

despues de compila la nueva 3.12 con buenisimos resultados para mi portatil con optimus, y despues de refrescar el maravilloso tutorial de shiba...me decidi a hacer lo mismo pero para mi solydk del sobremesa.

me anime con la aun mas reciente 3.12.1, sin problemas, compile con localmodconfig con "todo" o casi todo conectado. despues de eso me pasee un poco por "make menu config" y ajuste aun mas el kernel a mis pocas necesidades, en el pc de sobremesa...

 

Bueno me he llevado una paqueña sorpresa...

 

para trabajar, utilizo una red VPN, me conecto desde el propio gestor de KDE que es el que mejor y mas facil me va. tengo mi perfil ".pfc" de "cisco" importado, con todos los datos de la VPN de mi empresa, y luego con Kdrc o cualquier programa RDP, ya me conecto a mi ordenador del trabajo... hasta ahi, todo facil y normal.

 

tras compilar el kernel, diferentes kernels....la vpn no conecta. en cambio con los kernel oficiales de mi distro, el mas reciente "3.10.3", puede conectar a la VPN sin problemas, como siempre. entiendo que algo me he dejado fuera del kernel, que me impide conectar a la VPN en particular.

 

tambien quiero añadir que la VPN es CISCO, que siempre he oido que son algo mas complejas por el tipo de cifrado que utilizan...

 

me podeis ayudar o por lo menos orientarme un poco hacia el camino correcto.

 

PD: con el kernel nuevo 3.12.1, mi solydk (debian), 8gb de ram DDR3, un intel I3 normalucho, una gtx550, y un disco SSD Samsung + (steam)= metro last nigth que te corres...xD todo al maximo y es una delicia jugar en linux, me funcionan hasta los mandos de juego, sin previa configuracion ni nada. ya no hay excusas para quedarse en windows...

Compartir este post


Enlace al post
Compartir en otros sitios

Una forma "fácil" de averiguar qué es lo que falta sería conectarse a la red VPN desde la versión de Linux que funciona y luego ver la lista de módulos cargados con:

 

lsmod

Los que falten en el kernel compilado a mano serán los culpables.

 

Otra forma sería partir de la configuración del kernel funcional y empezar a eliminar lo que sobre manualmente en lugar de recurrir a localmodconfig. Más trabajosos, pero vas "a lo seguro"

Compartir este post


Enlace al post
Compartir en otros sitios

Pues el unico modulo distinto que veo diferente, entre tener levantada la VPN y no, es este...

instantanea1-787468.png[/img]

"tun"

lo puedo añadir a mi kernel compilado a mano??? o tengo que volver a compilar, si tengo que volver a compilar, donde encuentro ese modulo y que hago con el??? xD

Editado por Fransis

Compartir este post


Enlace al post
Compartir en otros sitios

Todos los problemas que yo he tenido de red los he solucionado compilando esto aparte, lo que no se si llevara los drivers que te hacen falta para VPN, busca el de tu kernel:

 

https://www.kernel.org/pub/linux/kernel/projects/backports/stable/

 

Cuando hagas el make se te abrira una configuracion parecida a la del kernel con los drivers que lleva el paquete, mira si van los que tu necesites y si estan los instalas, si no cancelas y le haces un make clean :)

Compartir este post


Enlace al post
Compartir en otros sitios

Puedes mirar el apartado de "Compilar un único módulo" :P

 

Y según el buscador del menuconfig

 

Postear Imagen

 

Ahí está :busca:

Ok.

Gracias a los dos, mañana me pondré con ello a ver que sale.... seguro que me cargo algo mas.... jajaja

Compartir este post


Enlace al post
Compartir en otros sitios

Pedazo de post  @@Shiba87, yo siempre habia tirado de make oldconfig para no rayarme y normalmente con buenos resultados , pero este post me lo guardo para mi "hall of fame" ya que es un currazo.

 

Se agradece el esfuerzo.

 

Lo dicho muchas gracias 

Compartir este post


Enlace al post
Compartir en otros sitios

Como no tenía nada que hacer me ha dado por compilar la versión 4.1 por enésima vez (las anteriores veces que he compilado algo ha fallado).  El caso es que me pregunto, si habiendo compilado a la debian, y no funciona, puedo ejecutar desde el paso de compilación directamente el modo tradicional.

Compartir este post


Enlace al post
Compartir en otros sitios

pues yo tambien!!!

por retomar esto y ver si puedo ajustar un poquito el kernel apesar de estar contento con liquorix, me voy a compilar mi propio 4.1.1.

de primeras con localmodconfig, he encendido vpn, de todo...a ver si esta vez a la primer asolo con eso me va todo bien!! xDDD :reves:

 

wuooooo!!! ni 5 minutos me ha llevado compilar el kernel con el I7, nunca habia compilado con el. deje la cocina y las historias de los kernels cuando aun andaba con el i3 y madre mia!!!!! no hay color!!!

con vpn y todo funcionando, solo me volvio a ejecutar liquorix para volver a instalar los drivers de nvidia, y listo, una excusa mas para poneros otra captura de mi escritorio...que se que os mola!!

Editado por Fransis

Compartir este post


Enlace al post
Compartir en otros sitios

Como no tengo prisa, y he probado el liquorix que me ha dejado colgado el equipo, me quedo con el mío compilado, y me haré alguna actualización más adelante.

 

 

A mi el Liquorix me freeza igual la distro, sin embargo el pf-kernel me va de maravilla

Compartir este post


Enlace al post
Compartir en otros sitios
Perdonad mi ignorancia/torpeza, ¿el kernel 4.4 qué tal me iría con Debian Testing?

Debería funcionar perfectamente.

Compartir este post


Enlace al post
Compartir en otros sitios

 

 

Perdonad mi ignorancia/torpeza, ¿el kernel 4.4 qué tal me iría con Debian Testing?

 

Debería funcionar perfectamente.

Depende de quién lo compile... :silba:

Y de la máquina a veces un Kernel antiguo va mejor otras va peor, solo testeando se puede percibir y leiendo las infos del kernel , que tampoco a veces abundan en lenguaje facil para quien no sea un entendido en pcs.

Compartir este post


Enlace al post
Compartir en otros sitios

 

 

Perdonad mi ignorancia/torpeza, ¿el kernel 4.4 qué tal me iría con Debian Testing?

Debería funcionar perfectamente.

 

Depende de quién lo compile... :silba:

 

y yo me hacía a la idea de que iba a instalar un pre-compilado. Y sí, también tenés razón, también depende quién lo compile. :D

Compartir este post


Enlace al post
Compartir en otros sitios

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invitado
Responder en este tema...

×   Has incluido contenido con formato.   Eliminar formato

  Sólo se permiten 75 emoticonos como máximo.

×   Tu enlace ha sido insertado automáticamente.   Deshacer y mostrar como enlace

×   Su contenido anterior ha sido restaurado.   Limpiar editor

×   No puedes pegar imágenes directamente. Súbelas a algún hosting de imágenes y pega la dirección URL


×
×
  • Crear Nuevo...