Difference between revisions of "Kernel Compilation (Español)"
C4explosive (talk | contribs) |
|||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | + | ||
[[Category:Kernel (Español)]] | [[Category:Kernel (Español)]] | ||
− | + | [[cs:Kernel Compilation]] | |
− | + | [[en:Kernels]] | |
+ | [[it:Kernels]] | ||
+ | [[zh-CN:Kernels]] | ||
Arch Linux provee varios metodos para compilar el kernel. Usar [[Arch Build System]] es el recomendado. | Arch Linux provee varios metodos para compilar el kernel. Usar [[Arch Build System]] es el recomendado. | ||
==Usando [[Arch Build System]]== | ==Usando [[Arch Build System]]== | ||
− | Siempre, se han propuesto varios | + | Siempre, se han propuesto varios métodos para construir fácilmente un kernel personalizado partiendo del de Arch. En la wiki se pueden encontrar varios ejemplos. Todos ellos son bastante buenos, pero sufren [https://bugs.archlinux.org/task/12384 algunos inconvenientes] que hacen que no estén oficialmente respaldados por los desarrolladores. |
− | Contrariamente, el | + | Contrariamente, el método descrito en este articulo es mas sólido y seguro, y se construye usando el paquete oficial del {{Pkg|linux}}. |
− | ===Instalando | + | ===Instalando Arch Build System=== |
− | {{ | + | [[pacman (Español)|Instala]] los paquetes {{Pkg|abs}} y {{Pkg|base-devel}}. |
− | Para obtener todo el | + | Para obtener todo el árbol de ABS, ejecuta: |
+ | # abs | ||
− | + | Revisa [[Arch Build System (Español)]] para mas información. | |
− | |||
− | Revisa [[Arch Build System]] para mas | ||
===Consiguiendo los ingredientes=== | ===Consiguiendo los ingredientes=== | ||
− | Antes que nada, necesitamos un kernel | + | Antes que nada, necesitamos un kernel limpio para empezar a personalizarlo. En este articulo asumiré que usaras el {{Pkg|linux}} oficial de Arch. Entonces creamos una carpeta para trabajar, y obtenemos los archivos del kernel desde ABS (luego de la sincronización): |
+ | cp /var/abs/core/linux/* <directorio_de_trabajo>/ | ||
− | + | Luego, pongan aquí cualquier paquete que se necesite (ej. archivos de configuración personalizada, parches, etc.) | |
− | + | ===Modificando el PKGBUILD=== | |
− | + | Modifica el [[PKGBUILD (Español)|PKGBUILD]] del paquete oficial del {{Pkg|linux}}. | |
− | ===Modificando el | ||
− | Modifica el PKGBUILD del paquete oficial del | ||
====Cambiendo pkgname==== | ====Cambiendo pkgname==== | ||
Las primeras lineas se pareceran a estas: | Las primeras lineas se pareceran a estas: | ||
− | {{ | + | {{hc|PKGBUILD|<nowiki> |
# $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $ | # $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $ | ||
# Maintainer: Tobias Powalowski <tpowa@archlinux.org> | # Maintainer: Tobias Powalowski <tpowa@archlinux.org> | ||
Line 43: | Line 43: | ||
_kernelname=${pkgname#linux} | _kernelname=${pkgname#linux} | ||
... | ... | ||
− | }} | + | </nowiki>}} |
− | Como ves, hay un comentario para | + | Como ves, hay un comentario para construir un kernel con diferente nombre (# Build kernel with a different name), todo lo que debemos hacer es descomentar esa linea, cambie el sufijo '-custom' por el nombre que quieras, y comentar la linea anterior ( osea el primer pkgname): |
− | {{ | + | {{hc|PKGBUILD build()|<nowiki> |
... | ... | ||
#pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel | #pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel | ||
pkgname=linux-test # Build kernel with a different name | pkgname=linux-test # Build kernel with a different name | ||
... | ... | ||
− | }} | + | </nowiki>}} |
− | {{Note|Esto asume que no vas a recompilar los | + | {{Note|Esto asume que no vas a recompilar los {{Pkg|linux-headers}}, -manpages or -docs. Si los queres recompilar, agregalos.}} |
− | Ahora, todas las variables de tu paquete | + | Ahora, todas las variables de tu paquete serán cambiadas de acuerdo al nuevo nombre. Por ejemplo, luego de instalar el paquete, los módulos seran alojados en {{ic|/lib/modules/<kernel_release>-test/}}. |
====Modificando build()==== | ====Modificando build()==== | ||
− | Probablemente necesites un archivo ".config" personalizado para tu kernel. Podes descomentar una de las posibilidades mostradas en la | + | Probablemente necesites un archivo ".config" personalizado para tu kernel. Podes descomentar una de las posibilidades mostradas en la función {{ic|build()}} del [[PKGBUILD (Español)|PKGBUILD]], por ejemplo: |
− | {{ | + | {{hc|PKGBUILD|<nowiki> |
... | ... | ||
# load configuration | # load configuration | ||
Line 70: | Line 70: | ||
# ... or manually edit .config | # ... or manually edit .config | ||
... | ... | ||
− | }} | + | </nowiki>}} |
− | Si ya tenias un archivo de | + | Si ya tenias un archivo de configuración para el kernel. Te sugiero descomentar una de las herramientas de configuración interactiva, como nconfig, y cargar tu configuración desde allí. Eso evitará problemas con el nombre del kernel. |
− | {{Note|Si descomentas ''return 1'', podes cambiar el directoria principal del kernel luego de que makepkg termine las extracciones y luego hacer la | + | {{Note|Si descomentas ''return 1'', podes cambiar el directoria principal del kernel luego de que makepkg termine las extracciones y luego hacer la configuración con nconfig. Esto te permitirá configurar tu kernel en varias sesiones. Cuando estés listo para compilar, copia el archivo .config sobre el .config que se haya generado automáticamente, o sobre el config.x86_64 (esto dependerá de la arquitectura del procesador), comenta ''return 1'' y usa '''makepkg -i'''.}} |
====Cambiando la función package_kernel26()==== | ====Cambiando la función package_kernel26()==== | ||
− | Debemos escribir una | + | Debemos escribir una función personalizada para decirle al sistema como instalar el paquete. Esto es muy simple de hacer, solo debemos cambiarle el nombre a la función package_kernel26() por el de package_kernel26-test(),(test, recordemos es el nombre del kernel personalizado) y adaptar las instrucciones a tus necesidades. Si no quieres cambiar nada, la función debería quedar así: |
− | {{ | + | {{hc|PKGBUILD package_kernel26-test()|<nowiki> |
... | ... | ||
package_linux-test() { | package_linux-test() { | ||
Line 85: | Line 85: | ||
... | ... | ||
} | } | ||
− | + | </nowiki>}} | |
− | }} | ||
− | ===Compilando con varios | + | ===Compilando con varios núcleos === |
− | Para decirle al compilador que use todos los | + | Para decirle al compilador que use todos los núcleos al momento de compilar, usamos el flag -j<numero_de_nucleos>. El numero debe ser de n+1, donde n es la cantidad de núcleos de tu procesador. |
− | Por ejemplo un procesador de 2 | + | Por ejemplo un procesador de 2 núcleos (2+1=3): |
− | {{ | + | {{hc|/etc/makepkg.conf|<nowiki> |
... | ... | ||
#-- Make Flags: change this for DistCC/SMP systems | #-- Make Flags: change this for DistCC/SMP systems | ||
MAKEFLAGS="-j3" | MAKEFLAGS="-j3" | ||
... | ... | ||
− | }} | + | </nowiki>}} |
===Compilacion=== | ===Compilacion=== | ||
Ahora podemos compilar el kernel, con los comandos usuales: | Ahora podemos compilar el kernel, con los comandos usuales: | ||
− | {{ | + | {{ic|makepkg}} |
− | Si usaste un programa interactivo para configurar los | + | Si usaste un programa interactivo para configurar los parámetros del kernel (como menuconfig), deberás estar allí durante la compilación. |
{{Note|El kernel necesita un tiempo para compilar, una hora no es inusual.}} | {{Note|El kernel necesita un tiempo para compilar, una hora no es inusual.}} | ||
− | === | + | === Instalación === |
− | Luego de makepkg, podes revisar el archivo | + | Luego de {{ic|makepkg}}, podes revisar el archivo {{ic|linux.install}}. Veras que algunas variables han cambiado. Ahora, solo debemos instalar con [[pacman (Español)|pacman]]: |
− | + | #pacman -U <paquete_del_kernel> | |
===Boot Loader=== | ===Boot Loader=== | ||
− | Las carpetas y archivos de | + | Las carpetas y archivos de nuestro kernel personalizado han sido creadas, ej. {{ic|/boot/kernel26-test-img}}. Para testear el kernel, debemos actualizar el bootloader ({{ic|/boot/grub/menu.lst}} para [[GRUB (Español)]]) y agregar las nuevas entradas ('default' y 'fallback') para nuestro kernel. De esta manera, podes tener ambos kernels el ya instalado y el de personalizado en paralelo. |
===Drivers propietarios de Nvidia=== | ===Drivers propietarios de Nvidia=== | ||
Revisar [[NVIDIA|Instalacion alternativa: kernel personalizado]]. | Revisar [[NVIDIA|Instalacion alternativa: kernel personalizado]]. | ||
− | ==Usando | + | ==Usando AUR== |
− | En AUR hay | + | En el [[Arch User Repository (Español)|AUR]] hay algunos paquetes de los kernels mas conocidos. Podes instalarlos como están, o usarlos como base para tu kernel personalizado. |
− | [[Kernels|Kernels en AUR]] | + | [[Kernels|Kernels en el AUR]] |
==Tradicional== | ==Tradicional== | ||
− | [[ | + | [[Kernel_Compilation_(Español)|La manera tradicional]] es simple y directa. |
− | Este | + | Este método requiere de la descarga manual del tarbal, y la contrucción en tu directorio home como usuario normal. Una vez configurado, se explican dos métodos de compilación/instalación, el método manual y el de makepkg/[[pacman (Español)|pacman]]. |
− | Si sos nuevo en este proceso,[[Kernel Compilation From Source For New Users Guide|la manera tradicional para nuevos usuarios]] es la apropiada. | + | Si sos nuevo en este proceso, [[Kernel Compilation From Source For New Users Guide|la manera tradicional para nuevos usuarios]] es la apropiada. |
− | ==Revisa | + | ==Revisa también == |
*[[Kernels]] | *[[Kernels]] | ||
*[http://www.kroah.com/lkn/ O'Reilly - El kernel de linux en una cascara de nuez] (ebook gratuito) | *[http://www.kroah.com/lkn/ O'Reilly - El kernel de linux en una cascara de nuez] (ebook gratuito) |
Revision as of 04:14, 11 December 2012
zh-CN:Kernels Arch Linux provee varios metodos para compilar el kernel. Usar Arch Build System es el recomendado.
Contents
Usando Arch Build System
Siempre, se han propuesto varios métodos para construir fácilmente un kernel personalizado partiendo del de Arch. En la wiki se pueden encontrar varios ejemplos. Todos ellos son bastante buenos, pero sufren algunos inconvenientes que hacen que no estén oficialmente respaldados por los desarrolladores.
Contrariamente, el método descrito en este articulo es mas sólido y seguro, y se construye usando el paquete oficial del linux.
Instalando Arch Build System
Instala los paquetes abs y base-devel.
Para obtener todo el árbol de ABS, ejecuta:
# abs
Revisa Arch Build System (Español) para mas información.
Consiguiendo los ingredientes
Antes que nada, necesitamos un kernel limpio para empezar a personalizarlo. En este articulo asumiré que usaras el linux oficial de Arch. Entonces creamos una carpeta para trabajar, y obtenemos los archivos del kernel desde ABS (luego de la sincronización):
cp /var/abs/core/linux/* <directorio_de_trabajo>/
Luego, pongan aquí cualquier paquete que se necesite (ej. archivos de configuración personalizada, parches, etc.)
Modificando el PKGBUILD
Modifica el PKGBUILD del paquete oficial del linux.
Cambiendo pkgname
Las primeras lineas se pareceran a estas:
PKGBUILD
# $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $ # Maintainer: Tobias Powalowski <tpowa@archlinux.org> # Maintainer: Thomas Baechler <thomas@archlinux.org> pkgbase=linux pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel # pkgname=linux-custom # Build kernel with a different name _kernelname=${pkgname#linux} ...
Como ves, hay un comentario para construir un kernel con diferente nombre (# Build kernel with a different name), todo lo que debemos hacer es descomentar esa linea, cambie el sufijo '-custom' por el nombre que quieras, y comentar la linea anterior ( osea el primer pkgname):
PKGBUILD build()
... #pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel pkgname=linux-test # Build kernel with a different name ...
Ahora, todas las variables de tu paquete serán cambiadas de acuerdo al nuevo nombre. Por ejemplo, luego de instalar el paquete, los módulos seran alojados en /lib/modules/<kernel_release>-test/
.
Modificando build()
Probablemente necesites un archivo ".config" personalizado para tu kernel. Podes descomentar una de las posibilidades mostradas en la función build()
del PKGBUILD, por ejemplo:
PKGBUILD
... # load configuration # Configure the kernel. Replace the line below with one of your choice. #make menuconfig # CLI menu for configuration make nconfig # new CLI menu for configuration #make xconfig # X-based configuration #make oldconfig # using old config from previous kernel version # ... or manually edit .config ...
Si ya tenias un archivo de configuración para el kernel. Te sugiero descomentar una de las herramientas de configuración interactiva, como nconfig, y cargar tu configuración desde allí. Eso evitará problemas con el nombre del kernel.
Cambiando la función package_kernel26()
Debemos escribir una función personalizada para decirle al sistema como instalar el paquete. Esto es muy simple de hacer, solo debemos cambiarle el nombre a la función package_kernel26() por el de package_kernel26-test(),(test, recordemos es el nombre del kernel personalizado) y adaptar las instrucciones a tus necesidades. Si no quieres cambiar nada, la función debería quedar así:
PKGBUILD package_kernel26-test()
... package_linux-test() { pkgdesc="The Linux Kernel and modules" ... }
Compilando con varios núcleos
Para decirle al compilador que use todos los núcleos al momento de compilar, usamos el flag -j<numero_de_nucleos>. El numero debe ser de n+1, donde n es la cantidad de núcleos de tu procesador.
Por ejemplo un procesador de 2 núcleos (2+1=3):
/etc/makepkg.conf
... #-- Make Flags: change this for DistCC/SMP systems MAKEFLAGS="-j3" ...
Compilacion
Ahora podemos compilar el kernel, con los comandos usuales:
makepkg
Si usaste un programa interactivo para configurar los parámetros del kernel (como menuconfig), deberás estar allí durante la compilación.
Instalación
Luego de makepkg
, podes revisar el archivo linux.install
. Veras que algunas variables han cambiado. Ahora, solo debemos instalar con pacman:
#pacman -U <paquete_del_kernel>
Boot Loader
Las carpetas y archivos de nuestro kernel personalizado han sido creadas, ej. /boot/kernel26-test-img
. Para testear el kernel, debemos actualizar el bootloader (/boot/grub/menu.lst
para GRUB (Español)) y agregar las nuevas entradas ('default' y 'fallback') para nuestro kernel. De esta manera, podes tener ambos kernels el ya instalado y el de personalizado en paralelo.
Drivers propietarios de Nvidia
Revisar Instalacion alternativa: kernel personalizado.
Usando AUR
En el AUR hay algunos paquetes de los kernels mas conocidos. Podes instalarlos como están, o usarlos como base para tu kernel personalizado.
Tradicional
La manera tradicional es simple y directa.
Este método requiere de la descarga manual del tarbal, y la contrucción en tu directorio home como usuario normal. Una vez configurado, se explican dos métodos de compilación/instalación, el método manual y el de makepkg/pacman.
Si sos nuevo en este proceso, la manera tradicional para nuevos usuarios es la apropiada.
Revisa también
- Kernels
- O'Reilly - El kernel de linux en una cascara de nuez (ebook gratuito)