{"id":7939,"date":"2015-05-11T18:54:40","date_gmt":"2015-05-11T16:54:40","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=7939"},"modified":"2015-05-11T19:38:51","modified_gmt":"2015-05-11T17:38:51","slug":"compilacion-de-un-kernel-linux-en-ubuntu-debian-u-otras-distros","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/compilacion-de-un-kernel-linux-en-ubuntu-debian-u-otras-distros\/","title":{"rendered":"Compilaci\u00f3n de un Kernel Linux en Ubuntu, Debian u otras distros."},"content":{"rendered":"<p>Si posees conocimientos de <strong>GNU\/Linux<\/strong> y sistemas operativos esta entrada te resultar\u00e1 interesante.<\/p>\n<p style=\"text-align: justify;\">Cuando hablamos de &#8220;<strong>Linux<\/strong>&#8221; es frecuente referirnos al sistema operativo y sus aplicaciones y no al <strong>n\u00facleo o kernel del sistema<\/strong>. La realidad es que Linux es\u00a0<strong>s\u00f3lamente<\/strong>\u00a0el\u00a0<a href=\"http:\/\/es.wikipedia.org\/wiki\/N%C3%BAcleo_(inform%C3%A1tica)\" target=\"_blank\">n\u00facleo del sistema<\/a>: componente de gran envergadura que hace operar nuestro ordenador. Entre las <strong>funciones<\/strong> m\u00e1s importantes del kernel:<\/p>\n<ul>\n<li>Administraci\u00f3n de la <strong>memoria<\/strong> del equipo.<\/li>\n<li>Establecimiento de la <strong>comunicaci\u00f3n<\/strong> entre aplicaciones y dispositivos de <strong>hardware<\/strong>.<\/li>\n<li><strong>Administraci\u00f3n<\/strong> de procesos (o tareas).<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/05\/Kernel-linux.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-7942\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/05\/Kernel-linux.png\" alt=\"Kernel-linux\" width=\"423\" height=\"305\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/05\/Kernel-linux.png 850w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2015\/05\/Kernel-linux-300x217.png 300w\" sizes=\"auto, (max-width: 423px) 100vw, 423px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Recuerda que para hablar con propiedad (al C\u00e9sar lo que es del C\u00e9sar), muchas veces denominamos Linux al sistema, cuando debi\u00e9ramos llamarlo\u00a0<strong>GNU\/Linux<\/strong>. Puesto que el sistema operativo esta constituido por aplicaciones y el n\u00facleo. Vaya mosqueo se podr\u00eda pillar <a href=\"http:\/\/es.wikipedia.org\/wiki\/Richard_Stallman\" target=\"_blank\">Richard Stallman<\/a>.<\/p>\n<p style=\"text-align: justify;\">Aunque no son las \u00fanicas funciones, s\u00ed son las de m\u00e1s importantes.<\/p>\n<p style=\"text-align: justify;\">El n\u00facleo Linux se caracteriza por ser muy vol\u00e1til y tener muy buenos\u00a0desarrolladores al momento de corregir un problema o agregar una nueva caracter\u00edstica al n\u00facleo; recibiendo as\u00ed gran cantidad de actualizaciones en poco tiempo.<\/p>\n<p style=\"text-align: justify;\">Dichas actualizaciones com\u00fanmente contienen <strong>nuevos m\u00f3dulos<\/strong>, mejoras de seguridad, administraci\u00f3n de recursos y muchas otras caracter\u00edsticas.<\/p>\n<p><strong>\u00bfC\u00f3mo averiguar que innovaciones incorpora determinado n\u00facleo?<\/strong><\/p>\n<p>Observando un archivo incorporado en el mismo llamado\u00a0<strong><em>ChangeLog<\/em><\/strong>.<\/p>\n<p>Tambi\u00e9n\u00a0es posible\u00a0descargar y observar el archivo de texto plano Changelog desde la\u00a0<a href=\"http:\/\/kernel.org\/\">p\u00e1gina oficial del proyecto<\/a>.<\/p>\n<p style=\"text-align: justify;\">Muchas veces surgen dudas acerca de la necesidad de compilar el n\u00facleo\u00a0cuando liberan una nueva versi\u00f3n: no debemos dudar, solamente se compila una nueva versi\u00f3n de kernel cuando tenemos dispositivos de <strong>hardware muy recientes<\/strong> y nos vemos forzados a migrar hacia una versi\u00f3n que incluya\u00a0m\u00f3dulos\u00a0para el soporte de este.<\/p>\n<p>Otra raz\u00f3n se basa en que poseemos una <strong>versi\u00f3n\u00a0muy\u00a0antigua<\/strong> y optamos por actualizarlo para tener mejoras en la administraci\u00f3n de memoria, procesos, recursos, etc. Actualmente ocurre esto con la rama <strong>3.18\u00a0y 3.19\u00a0<\/strong>del kernel Linux.<\/p>\n<p>La tercera raz\u00f3n es por motivos relacionados con la <strong>seguridad<\/strong>, bugs, fallos.<\/p>\n<p>Cuanto <strong>m\u00e1s adaptado se encuentre el kernel a nuestro sistema mejor.\u00a0<\/strong>Es por eso que a muchos linuxeros puros les gusta\u00a0Gentoo y Arch Linux y, en ambos casos, es inevitable no mencionar otros nombres como por ejemplo Linux From Scratch, para compilar todo desde Cero.<\/p>\n<p><span style=\"line-height: 1.5;\">El kernel\u00a0<\/span><strong style=\"line-height: 1.5;\">NO<\/strong><span style=\"line-height: 1.5;\">\u00a0se actualiza, si deseas una nueva versi\u00f3n debes <\/span><strong style=\"line-height: 1.5;\">descargarla<\/strong><span style=\"line-height: 1.5;\"> de la p\u00e1gina oficial del proyecto y <\/span><strong style=\"line-height: 1.5;\">compilarla<\/strong><span style=\"line-height: 1.5;\">. Tambi\u00e9n puedes buscar un paquete (por ejemplo en los repositorios de Debian) con una versi\u00f3n ya compilada para tu arquitectura de hardware; evitando la tarea de compilar y desaprovechando la optimizaci\u00f3n del sistema.<\/span><a name=\"toc2\"><\/a><\/p>\n<p><strong> \u00bfPorqu\u00e9 compilar un kernel a la manera Debian?<\/strong><\/p>\n<p>Dejar de compilar un kernel por la vertiente cl\u00e1sica para hacerlo a la manera Debian (<em>debian way<\/em>) proporciona muchas <strong>ventajas<\/strong>: motivo a que se empaqueta se crea un paquete con extensi\u00f3n <strong>.deb<\/strong>. Cualquier buen administrador de sistemas sabe las principales ventajas de que se genere un paquete, entre las principales:<\/p>\n<ul>\n<li>Cuando tengamos que eliminar el kernel (quiz\u00e1s porque ya hayamos compilado una nueva versi\u00f3n, por ejemplo), lo \u00fanico que debemos hacer es utilizar la herramienta <strong>dpkg<\/strong> de la siguiente manera:<strong>\u00a0dpkg -r TU_KERNEL<\/strong>. Donde\u00a0TU_KERNEL\u00a0es el nombre que le diste al paquete. Para eliminar el kernel tambi\u00e9n puedes utilizar herramientas como <strong>apt-get, aptitude<\/strong>, o mejor a\u00fan <strong>Synaptic<\/strong> para los usuarios novel que est\u00e1n comenzando con Linux.<\/li>\n<\/ul>\n<ul>\n<li>Tener un paquete con nuestro kernel facilita guardarlo en un Pendrive, CD, DVD, o mejor a\u00fan: si tenemos un servidor web es factible distribuirlo. El principal objetivo de esto es tener la<strong> posibilidad de instalar ese mismo kernel en varias m\u00e1quinas<\/strong>. Debian est\u00e1 implementando esta caracter\u00edstica desde hace mucho a\u00f1os, ofrece kernel&#8217;s pre-compilados para tu computador en sus repositorios de paquetes, de manera que si eres un usuario final, te da pereza compilar el kernel o no est\u00e9s en la necesidad de hacerlo tengas la posibilidad de elegir el paquete (kernel) entre la\u00a0gran variedad\u00a0que hay e instalarlo con alg\u00fan gestor de paquetes como aptitude, apt, dpkg.<a name=\"toc3\"><\/a><\/li>\n<\/ul>\n<p><strong>\u00a0Ejemplo pr\u00e1ctico<\/strong><\/p>\n<p>Imagina que en tu trabajo gestionas informaci\u00f3n de gran envergadura y <strong>no deseas que los usuarios puedan hacer uso de pendrives ni dispositivos extra\u00edbles<\/strong> para trasladar dicha informaci\u00f3n.<\/p>\n<p>Asimismo tu organizaci\u00f3n decide migrar hacia tecnolog\u00eda inal\u00e1mbrica: debes configurar el kernel para adicionar el soporte del chipset de tu tarjeta inal\u00e1mbrica; esto porque tuviste la mala suerte de que por defecto Linux no lo inclu\u00eda.<\/p>\n<p>B\u00e1sicamente lo que debes hacer es crear un paquete (por ser paquete: f\u00e1cil distribuci\u00f3n, instalaci\u00f3n y purgado) con el kernel de Debian <strong>optimizado<\/strong>: deshabilitando los puertos USB y agregando el m\u00f3dulo que ofrece soporte a tu tarjeta inal\u00e1mbrica.<\/p>\n<p>El problema radica en que tu organizaci\u00f3n posee 1300 usuarios (cada uno con su m\u00e1quina), ser\u00eda poco pr\u00e1ctico y absurdo enviar el grupo de soporte a realizar el proceso de compilaci\u00f3n m\u00e1quina por m\u00e1quina.<\/p>\n<p>Pero como t\u00fa eres buen administrador de red: tienes un mirror de Debian personalizado donde subes paquetes desarrollados o modificados por ti (o por tu grupo de administraci\u00f3n\/soporte de sistemas). As\u00ed te motivas a compilar dicho kernel optimizado y lo subes al mirror. Para garantizar la convergencia de dicho kernel en todas las m\u00e1quinas utilizas herramientas como\u00a0<strong><a href=\"http:\/\/www.cfengine.org\/\" target=\"_blank\">cfengine<\/a><\/strong>,\u00a0<strong><a href=\"http:\/\/puppet.reductivelabs.com\/\">puppet<\/a><\/strong>\u00a0y <strong>pkgsync<\/strong>.<a name=\"toc4\"><\/a><\/p>\n<p><strong style=\"line-height: 1.5;\">Descargando y desempaquetando el kernel<\/strong><\/p>\n<p>En principio, para <strong>compilar<\/strong> un kernel es evidente que debes descargar el <strong>c\u00f3digo fuente<\/strong> del mismo. Para eso ingresamos en la\u00a0<a href=\"http:\/\/kernel.org\/\" target=\"_blank\">p\u00e1gina oficial del proyecto<\/a>\u00a0donde se encuentran todos los kernel oficiales de Linux, desde la primera versi\u00f3n hasta la \u00faltima. Cuando los descarguemos vendr\u00e1 empaquetado y comprimido en alguno de los siguientes formatos:\u00a0.tar.bz2\u00a0o\u00a0.tar.gz\u00a0. Es indiferente cual se descarguen, explicar\u00e9 como descomprimir y desempaquetar ambos tipos de formato.<\/p>\n<p>Lo tradicional es descomprimir el kernel en el directorio\u00a0<em>\/usr\/src<\/em>, sin embargo no olvides que tienes la libertad de hacerlo en donde caprichosamente desees.<\/p>\n<ul>\n<li>Para quienes se descargaron el .tar.gz :<\/li>\n<\/ul>\n<p><strong>tar xvzf linux-version-kernel.tar.gz<\/strong><\/p>\n<ul>\n<li>Para quienes se descargaron el .tar.bz2:<\/li>\n<\/ul>\n<p><strong>tar xvjf linux-version-kernel.tar.bz2<\/strong><\/p>\n<p>Notar la\u00a0j\u00a0para el de extensi\u00f3n .tar.bz2<\/p>\n<ul>\n<li>Luego necesitamos ingresar al directorio donde se descomprimi\u00f3 y desempaquet\u00f3 el kernel para poder configurarlo y compilarlo, ingresamos al directorio:<\/li>\n<\/ul>\n<p><strong>cd linux-version-kernel<\/strong><\/p>\n<p><a name=\"toc5\"><\/a><strong> Configurando el kernel<\/strong><\/p>\n<p>Una vez dentro del directorio, necesitamos limpiarlo de todo archivo de configuraci\u00f3n que tenga.<\/p>\n<p><u>NOTA<\/u>: Podemos obviar este paso para la primera vez que nos lo descarguemos, ya que este viene completamente listo para compilar. Pero una vez que terminas la compilaci\u00f3n y por cualquier raz\u00f3n quieres volver a compilarlo, no es necesario que tengas que descomprimirlo y desempaquetarlo de nuevo, puedes reutilizar ese mismo c\u00f3digo y es all\u00ed cuando tienes que eliminar (limpiar) todos los archivos que se generaron con la compilaci\u00f3n anterior.<\/p>\n<p>Para &#8220;limpiar&#8221; los fuentes del kernel:<\/p>\n<p><strong>make mrproper<\/strong><\/p>\n<p>Ahora debemos configurarlo, esto quiere decir decidir cuales m\u00f3dulos deseamos que tenga (o que no tenga) una vez compilado. Como es caracter\u00edstico del Software Libre: tenemos varias maneras de hacer las cosas, hablemos sobre 3 formas de configurar el kernel:<\/p>\n<p><strong>1era alternativa:<\/strong>\u00a0make config\u00a0&lt;&#8211; Hay que tener algo de experiencia, si no la tienes no te recomiendo seguir este camino ya que hace muchas preguntas de hardware.<\/p>\n<p><strong>2da alternativa:<\/strong>\u00a0make menuconfig\u00a0&lt;&#8211; Es muy c\u00f3modo hacer la configuraci\u00f3n por este m\u00e9todo porque posees un men\u00fa muy sencillo he interactivo.\u00a0<u>NOTA<\/u>: Necesitas tener instalado las las librer\u00edas ncurses, en debian:\u00a0aptitude install libncurses5-dev<\/p>\n<p><strong>3ra alternativa:<\/strong>\u00a0make xconfig\u00a0&lt;&#8211; Debes tener instalado y en funcionamiento el servidor X, ya que toda la configuraci\u00f3n se hace gr\u00e1ficamente (haciendo uso del sistema de ventanas).\u00a0<u>NOTA:<\/u>\u00a0Necesitas tener instaladas las librer\u00edas QT, en debian\u00a0aptitude install libqt3-dev<\/p>\n<p>Para la configuraci\u00f3n utilizar\u00e9 la segunda alternativa, es decir,\u00a0make menuconfig, como lo hago siempre. Est\u00e1s en la libertad de utilizar la que quieras. Sin embargo te recomiendo el segundo m\u00e9todo debido a que no necesitas estar en entornos de escritorio ni tener funcionando el servidor X, adem\u00e1s que tiene una interfaz muy simple e interactiva.<\/p>\n<p>Para comenzar la configuraci\u00f3n:<\/p>\n<p><strong>make menuconfig<\/strong><\/p>\n<p>Cuando se dediquen a configurar el kernel recuerden ser muy precavidos seleccionando o habilitando los m\u00f3dulos. Si tenemos dispositivos como FlashDrive (o Pendrive) es indefectible activar el soporte SCSI (espec\u00edficamente soporte para discos SCSI), ya que estos son emulados como discos SCSI en Linux. Si desactivas el soporte para CDROM, evidentemente la unidad de CDROM no funcionar\u00eda una vez instalado. De igual manera pasa si desactivamos el soporte USB, no funcionar\u00eda todo los que conectemos por el puerto USB.<\/p>\n<p><a name=\"toc6\"><\/a><strong> Compilando<\/strong><\/p>\n<p>Terminada la configuraci\u00f3n del kernel lo compilaremos. Debido a que lo estamos haciendo a la\u00a0<em>Debian way<\/em>\u00a0es necesario que tengamos instalado un paquete llamadokernel-package, el cual suministrar\u00e1 las herramientas necesarias para poder compilar y generar el paquete con nuestro kernel, para instalarla:\u00a0<strong>aptitude install kernel-package<\/strong>. Antes de comenzar la compilaci\u00f3n debemos estar en el directorio donde se encuentra el c\u00f3digo fuente del kernel y luego ejecutar lo siguiente:<\/p>\n<p><strong>make-kpkg clean<\/strong><\/p>\n<p><strong>make-kpkg &#8211;initrd kernel_image kernel_headers<\/strong><\/p>\n<p>Los que hayan compilado un kernel de Linux este comando equivale a:\u00a0make dep, make clean, make bzImage y make modules<\/p>\n<p>La opci\u00f3n\u00a0&#8211;initrd\u00a0crea una imagen initrd en el paquete que se guardar\u00e1 en\u00a0<em>\/boot<\/em>\u00a0cuando instalemos el kernel (recordar que solo estamos compilando y empaquetando,<strong>no<\/strong>\u00a0instalando).<\/p>\n<p>El comando anterior crear\u00e1 dos paquetes con extensi\u00f3n .deb en el directorio superior. Un paquete ser\u00e1 el kernel y el otro los kernel-headers.<\/p>\n<p>La opci\u00f3n de\u00a0kernel_headers\u00a0es opcional, yo la utilizo debido a que muchos programas y m\u00f3dulos (ver la secci\u00f3n Gesti\u00f3n de m\u00f3dulos) necesitan tener los headers del kernel que se est\u00e1 usando para poder ser instalados, ejemplo: el driver de nvidia, VMware, ndiswrapper, madwifi, otros.<\/p>\n<p><u>NOTA:<\/u>\u00a0El tiempo de compilaci\u00f3n es proporcional a la configuraci\u00f3n que hayas hecho y a tu poder de computo. Si incluiste muchos m\u00f3dulos se demorar\u00e1 m\u00e1s. Hay que tener paciencia, es muy frecuente que se tarde bastante.<\/p>\n<p><a name=\"toc7\"><\/a><strong> Instal\u00e1ndolo<\/strong><\/p>\n<p>Una vez que termina la compilaci\u00f3n y es corroborada la existencia de los dos paquetes en el directorio superior es el momento de instalarlo. La instalaci\u00f3n es muy trivial, debemos ejecutar en el directorio donde est\u00e1n los paquetes:<\/p>\n<p><strong>dpkg -i TU_KERNEL.deb<\/strong><\/p>\n<p><strong>dpkg -i TU_KERNEL-HEADERS.deb<\/strong><\/p>\n<p><strong>\u00a1Felicidades!<\/strong>\u00a0Con esto terminas la instalaci\u00f3n del kernel, ya podr\u00edas reiniciar la m\u00e1quina e iniciar con tu nuevo kernel.<\/p>\n<p><a name=\"toc8\"><\/a><strong> Gestionando m\u00f3dulos<\/strong><\/p>\n<p><a name=\"toc9\"><\/a><strong>\u00a0Module Assistant &#8211; Compilando y agregando m\u00f3dulos<\/strong><\/p>\n<p style=\"text-align: justify;\">Module Assistant es una herramienta para la gesti\u00f3n de m\u00f3dulos\u00a0<strong>ya empaquetados<\/strong>\u00a0(preparadas sus fuentes con un\u00a0<em>debian\/rules<\/em>) para Debian. Nos permite compilar, construir e instalar m\u00f3dulos del kernel sin necesidad de reiniciar el computador ni recompilar el kernel. No olvidar que permite gestionar\u00a0s\u00f3lo\u00a0los m\u00f3dulos que est\u00e9n preparados para Debian (y derivados, p.e Ubuntu). Debes tener los headers de nuestro kernel<\/p>\n<p>Para entender su funcionamiento se elaborar\u00e1 un ejemplo con alg\u00fan m\u00f3dulo. Arbitrariamente escog\u00ed uno que permite hacer uso de cualquier tarjeta inal\u00e1mbrica que implemente chipset atheros .\u00a0Los m\u00f3dulos de\u00a0madwifi\u00a0nos habilitar\u00e1n el soporte para estas tarjetas, por lo que debemos agregar los m\u00f3dulos de madwifi. Ya dichos m\u00f3dulos vienen\u00a0preparados para debian\u00a0y se encuentran en los repositorios oficiales (en la secci\u00f3n de non-free).<\/p>\n<p>Debemos instalar (descargar) el c\u00f3digo fuente del m\u00f3dulo madwifi, para eso instalaremos el paquete madwifi-source el cual trae empaquetado las fuentes de estos m\u00f3dulos. Motivo que es condici\u00f3n sine qua non que el m\u00f3dulo deba estar preparado para debian, es frecuente que la mayor\u00eda de los que queramos instalar est\u00e9n en los repositorios oficiales de Debian.<\/p>\n<p><strong>aptitude install madwifi-source<\/strong><\/p>\n<p>Se descargar\u00e1 e instalar\u00e1 el paquete con las fuentes de los m\u00f3dulos en\u00a0<em>\/usr\/src\/modules\/madwifi<\/em>. Si ingresan al directorio de las fuentes podr\u00e1n notar una carpeta\u00a0<em>debian\/<\/em>, la cual contiene las reglas para la construcci\u00f3n del paquete. Por eso hice tanta referencia en que module-assistant debe ser usado para m\u00f3dulos\u00a0preparados \u00fanicamente para debian o derivados.<\/p>\n<p><strong>m-a prepare madwifi<\/strong><\/p>\n<p>El argumento\u00a0prepare\u00a0determinar\u00e1 si tenemos todo lo necesario para la compilaci\u00f3n del m\u00f3dulo, si no, module-assistant se encarar\u00e1 de instalar lo que haga falta. Es muy t\u00edpico que nos falten los cabeceras del kernel (kernel-headers), ya estas se se necesitan para construir todos los m\u00f3dulos (no s\u00f3lo de madwifi).<\/p>\n<p>Para compilar el m\u00f3dulo procedemos a compilarlo:<\/p>\n<p><strong>m-a build madwifi<\/strong><\/p>\n<p>La compilaci\u00f3n generar\u00e1 un paquete .deb (paquete de debian) el cual contiene el m\u00f3dulo para nuestro kernel, lo que faltar\u00eda es instalar el paquete y cargar el m\u00f3dulo para usarlo (no hace falta reiniciar el computadora).<\/p>\n<p><strong>m-a install madwifi<\/strong><\/p>\n<p>Con esto ya tienes el m\u00f3dulo instalado y listo para funcionar funcionar. El \u00faltimo comando lo que hace es instalar el paquete .deb al que hicimos referencia anteriormente.<\/p>\n<p>Ya el m\u00f3dulo est\u00e1 instalado, faltar\u00eda cargarlo (en la mayor\u00eda de los sistemas de carga al conectar la tarjeta).<\/p>\n<p><strong>modprobe ath_pci<\/strong><\/p>\n<p><a name=\"toc10\"><\/a><strong>M\u00f3dulos no preparados para Debian<\/strong><\/p>\n<p>Es muy probable que en la secci\u00f3n anterior se hayan preguntado que hacer con los m\u00f3dulos no preparados para debian: si hay soluci\u00f3n para ellos, s\u00f3lo que es un poco m\u00e1s laboriosa y tedioso el proceso. De igual manera tomar\u00e9 un ejemplo para explicar los pasos a seguir.<\/p>\n<p><a name=\"toc11\"><\/a><strong> Aplicar parches al kernel<\/strong><\/p>\n<p>Para aplicar un parche hacemos uso del programa\u00a0patch. Es probable que lo tengamos instalado, de no ser as\u00ed:<\/p>\n<p><strong>aptitude install patch<\/strong><\/p>\n<p>Una vez instalado se puede aplicar el parche distintas formas:<\/p>\n<p><a name=\"toc12\"><\/a><strong>\u00a0A la manera Debian<\/strong><\/p>\n<p>Una vez descargado el parche (normalmente un archivo .patch) lo copiamos al directorio donde est\u00e1n las fuentes del kernel (depende donde no los hayamos descargado, siguiendo el tutorial:\u00a0<em>\/usr\/src\/linux-version<\/em>) y al compilarlo agregar:<\/p>\n<p><strong>make-kpkg &#8211;initrd &#8211;added-patches=MI-PARCHE.patch kernel_image kernel_headers<\/strong><\/p>\n<p>make-kpkg se encargar\u00e1 de aplicar el parche y compilar nuevamente el kernel, notar que es le mismo comando (make-kpkg) que hemos venido usando a lo largo del tutorial. Adjunto al argumento\u00a0&#8211;added-patches=\u00a0deber\u00e1s colocar, separado por comas, los parches a aplicar al kernel.<\/p>\n<p><a name=\"toc13\"><\/a><strong>A la manera tradicional<\/strong><\/p>\n<p>Lo descargamos y copiamos donde est\u00e1n las fuentes del kernel y ejecutamos:<\/p>\n<p><strong>patch -p0 &lt; nombre-del-parche.patch<\/strong><\/p>\n<p>Finalmente recompilamos el kernel siguiendo los pasos del tutorial.<\/p>\n<p><a name=\"toc14\"><\/a><strong> \u00bfD\u00f3nde consigo m\u00e1s informaci\u00f3n?<\/strong><\/p>\n<ul>\n<li>Si deseas averiguar e indagar sobre otras opciones y argumentos que puedas utilizar con\u00a0<strong>make-kpkg<\/strong>\u00a0para compilar el kernel te recomiendo leer las p\u00e1ginas del manual (est\u00e1n completamente en espa\u00f1ol). Para eso:\u00a0<strong>man make-kpkg<\/strong><\/li>\n<li>Una vez descargado el c\u00f3digo fuente del kernel leer el archivo\u00a0<em>README<\/em>\u00a0incluido en el mismo.<\/li>\n<\/ul>\n<p><a name=\"toc15\"><\/a><strong style=\"line-height: 1.5;\">TIPS y consejos<\/strong><\/p>\n<ul>\n<li>Todos los kernels que han existido se encuentran en:\u00a0<a href=\"http:\/\/kernel.org\/pub\/linux\/kernel\" target=\"_blank\">http:\/\/kernel.org\/pub\/linux\/kernel<\/a><\/li>\n<li>Para averiguar los cambios que sufre un determinado release del kernel tendr\u00e1s que ver el archivo <strong>Changelog<\/strong>.<\/li>\n<li>Si ya tenemos un kernel configurado y no queremos reiterar el tedioso paso de configurar nuevas versiones podemos hacemos lo siguiente: En\u00a0<em>\/boot<\/em>\u00a0debe estar nuestra configuraci\u00f3n anterior, el archivo que contiene tu configuraci\u00f3n anterior se llama config-VERSION_KERNEL. Ese archivo lo tenemos que copiar en directorio donde est\u00e1n las fuentes del kernel con el nombre\u00a0.config\u00a0(recuerden el &#8220;.&#8221; que es importante, sin \u00e9l no funcionar\u00e1 el proceso). En mi caso lo copi\u00e9 de esta manera:<\/li>\n<\/ul>\n<p>cp \/boot\/config-2.6.14 \/usr\/src\/linux-version-kernel\/.config\u00a0make oldconfig<\/p>\n<p>Una vez que hacemos eso ya tenemos lista la configuraci\u00f3n, podemos verificar usando cualquiera de los 3 m\u00e9todos explicados. Notaremos que tiene una configuraci\u00f3n diferente a la que viene por defecto.<\/p>\n<ul>\n<li>Recordar que para la configuraci\u00f3n del kernel con\u00a0make config\u00a0debemos conocer nuestro hardware, cuando digo conocer me refiero a que debemos de saber algunos dispositivos de hardware que posee nuestro ordenador. Por eso si eres medio novato te recomiendo que te vayas por el\u00a0make menuconfig<\/li>\n<li>Si compilar\u00e1s m\u00e1s de un kernel puedes colocarle un nombre a cada compilaci\u00f3n para identificar al paquete .deb en el directorio superior. Para hacer esto necesitas agregar\u00a0&#8211;append-to-version=NOMBRE. Como ya se imaginan, donde dice nombre es donde colocan el nombre que caracterice a cada kernel.<\/li>\n<li>\u00bfQuieres ejecutar con\u00a0<strong>un solo comando<\/strong>\u00a0todos los pasos para tener en funcionamiento un m\u00f3dulo con Module Assistant? Pues el truco es ejecutar:<\/li>\n<\/ul>\n<p>m-a a-i madwifi<\/p>\n<p>a-i\u00a0Significa &#8220;auto-install&#8221;, equivale a\u00a0prepare,build\u00a0e\u00a0install<\/p>\n<ul>\n<li>Si ten\u00edas un kernel con m\u00f3dulos ya instalados (por ejemplo, madwifi, nvidia, etc) e instalas un nuevo kernel\u00a0<strong>perder\u00e1s el soporte de estos m\u00f3dulos en tu nuevo kernel<\/strong>. Ergo: tienes que volver a compilarlos, no es tan tr\u00e1fico porque afortunadamente tienes la herramienta Module Assitant<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Si posees conocimientos de GNU\/Linux y sistemas operativos esta entrada te resultar\u00e1 interesante. Cuando hablamos de &#8220;Linux&#8221; es frecuente referirnos al sistema operativo y sus aplicaciones y no al n\u00facleo o kernel del sistema. La realidad es que Linux es\u00a0s\u00f3lamente\u00a0el\u00a0n\u00facleo del sistema: componente de gran envergadura que hace operar nuestro ordenador. Entre las funciones m\u00e1s importantes del kernel: Administraci\u00f3n de la memoria del equipo. Establecimiento de la comunicaci\u00f3n entre aplicaciones y dispositivos de hardware. Administraci\u00f3n de procesos (o tareas).<\/p>\n","protected":false},"author":1,"featured_media":5090,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[431],"tags":[210],"class_list":["post-7939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-2","tag-linux"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/7939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=7939"}],"version-history":[{"count":11,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/7939\/revisions"}],"predecessor-version":[{"id":7951,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/7939\/revisions\/7951"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/5090"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=7939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=7939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=7939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}