Cuando necesitará compilar su propio núcleo

Cuando necesitará compilar su propio núcleo

Entonces, has decidido probar esto de lo que escuchaste hablar, llamado 'compilando un núcleo personalizado'. Si intentas esto como un pasatiempo, o porque quieres aprender una nueva habilidad, muy bien, sigue leyendo.

Sin embargo, antes de comenzar, trataremos de explicar las situaciones cuando surja esto y cómo lidiar con eso. Tenga en cuenta que este es un tema extenso que necesita mucho más en términos de espacio de lo que proporcionaremos aquí. Aprenderá los conceptos básicos, lo que necesita, qué hacer y lo que logrará.

Para obtener más información, como de costumbre, Google es tu amigo; Además, la documentación residente en el árbol de origen del kernel responderá muchas preguntas. Entonces, comencemos con el principio, con una última nota: si es necesario, publicaremos más artículos relacionados con la compilación del núcleo relacionado con otras distribuciones.

Cuando necesitará compilar su propio núcleo

La primera situación sería cuando necesite un núcleo más nuevo que su distribución, especialmente cuando ejecuta una distribución estable (e.gramo. Debian Stable, Centos), porque su núcleo no es compatible.

Una advertencia, sin embargo: Si desea ejecutar un núcleo de borde de sangrado, asegúrese de que sea compatible con otros componentes clave de su sistema (como GLIBC), recuerde que más reciente significa menos pruebas y (probablemente) más inestabilidad; Los mantenedores de núcleos de su distribución generalmente hacen un buen trabajo que respalda algunas características nuevas a los núcleos más antiguos y más estables, así que asegúrese de necesitar realmente el borde de sangrado. Nuestro consejo no es usar estos núcleos (los núcleos a largo plazo harían una excepción aquí) en los sistemas de producción. Como se dice, confíe en los mantenedores de su distribución.

La segunda situación es que sientes que estás ejecutando un núcleo hinchado, con muchos componentes innecesarios. Mientras que el núcleo solo carga módulos que coinciden con una pieza de hardware existente, una huella de memoria más pequeña del núcleo generalmente ayuda a acelerar y arrancar el tiempo.

# lspci -vv # lsusb # hwinfo # cat /proc /cpuinfo 

Los comandos anteriores te ayudan a conocer mejor tu hardware. Escriba lo que encontró y asegúrese de ejecutar los comandos LS* arriba como root, para obtener información adicional.

Otra situación sería que desea ayudar a probar el núcleo ejecutando lo último en su sistema. Se aplican las mismas advertencias que se aplican: Haga eso en los sistemas de prueba, manténgase en contacto con Upstream en caso de que encuentre un error (LKML.org es la lista principal de correo del kernel: alto tráfico) e intente ser lo más útil posible cuando se le solicite información.Esto no se puede enfatizar lo suficiente: lea la documentación, ya sea porque se encuentra en una situación desagradable, quiere informar un error o simplemente tener preguntas.

A continuación, es posible que desee ser el niño genial en el bloque y ejecutar lo último y lo mejor, tal vez mirando a la fuente (siempre que esté en esto y tenga algunos conocimientos de C y ASM) e incluso envíe parches. Es posible que desee ver primero si su distribución aún no ofrece un paquete de kernel más nuevo, por ejemplo, puede instalar núcleos de Debian Experimental en un sistema de prueba, si altera sus fuentes.en consecuencia. Una vez más, trabaja con los mantenedores si te topas con un error.

Terminología

Antes de profundizar más en este tema algo arcano, debemos aclarar algunos términos básicos (ER); Esto es esencial para comprender las partes clave de las pruebas y la compilación del núcleo.

  • núcleo - El núcleo del sistema operativo, responsable de la administración de recursos de hardware (E/S, redes, CPU, memoria ...). Básicamente, es la parte esencial del sistema operativo responsable de todo el trabajo sucio. Los programas de usuario se comunican con el núcleo, solicitan tiempo de CPU u otros recursos por bibliotecas de sistemas que actúan como intermediarios entre usuarios (ver más abajo) y el núcleo / hardware. Los núcleos pueden ser monolíticos y microkernos (para obtener más información, si está interesado, consulte los enfoques de diseño en todo el núcleo en Wikipedia.organizar . Microkernels (como Minix) usa un esquema de diseño que divide el núcleo del resto del núcleo, y ese descanso se divide en componentes, cada uno hace algo específico: E/S, redes, etc. Los núcleos monolíticos (Linux, BSD, Solaris), como su nombre indica, comprenden la mayor parte del núcleo en una unidad, con funcionalidad adicional (E.gramo. controladores) proporcionados por módulos. También hay núcleos híbridos, una combinación entre los dos, un buen ejemplo es el núcleo de Windows.
  • tierra de usuarios - Se dice que todo en un sistema operativo que no es parte del núcleo (bibliotecas, aplicaciones) es parte de Userland. El nombre es ese obvio.
  • módulo - Como se muestra anteriormente, un módulo de núcleo es una pieza de software binario que básicamente "enseña" al núcleo cómo "hablar" con una pieza de hardware o proporcionar alguna funcionalidad (e.gramo. NFS)
  • compilador - El compilador es una aplicación que básicamente toma el código escrito, según lo descargado por usted desde el núcleo.org y lo transforma en binarios. El compilador que se encuentra en las distribuciones de Linux se llama 'GCC', y eso significa GNU Compiler Collection, que también necesita componentes esenciales para construir software: servicios públicos que se encuentran en binutilos como el ensamblador (as) o el archivador de la biblioteca (AR) .En Debian Systems, o Ubuntu, se puede encontrar a qué paquete pertenece un archivo instalando y ejecutando Apt-File. Hablando de eso, veamos qué paquetes necesitamos instalar para una compilación exitosa de kernel.
  • núcleo de vainilla - Este es el nombre utilizado para el núcleo aguas arriba, como se encuentra en el núcleo.org, así que sin parches específicos de distribución.

Tenga en cuenta que cada vez que ve un comando en este documento que comienza con el aviso ps Eso significa que el comando tendrá que ejecutarse como un usuario normal de todos los días; Siempre que veas el '#' Aviso, eso significa que el comando debe ejecutarse como root (usamos sudo, pero eso no es obligatorio). El directorio actual, a menos que se especifique lo contrario, es el que sostiene su árbol de origen, en este caso, Linux-2.6.

Lo que necesitas instalar

  • GCC - Por supuesto, el compilador es esencial
  • Binutils: este paquete contiene el enlazador, el ensamblador y otras utilidades vitales para compilar programas escritos en C.
  • GCC -Doc: las páginas manuales e info para GCC. Útil si quieres ensuciarte y modificar algunas banderas de compilación. Útil de todos modos si quieres escribir o compilar paquetes C.
  • GDB - El depurador de GNU. No es obligatorio pero útil si algo sale mal. GDB-DOC también ayudará.
  • Libreadline5-Dev-para usar la interfaz de configuración del kernel ncurses. Puede usar otras interfaces (ver más abajo).
  • hacer: se instalará como dependencia, pero se están en orden pocas palabras. Consulte el manual o los libros, porque este no es un tema que se explique a la ligera en un espacio tan corto. Hacer es una utilidad utilizada al compilar programas C/C ++, y lo que hace es que se ve en un archivo, que contiene reglas sobre cómo y en qué orden debería suceder la construcción, e intenta ejecutar esas directivas. Lea los makfiles en el árbol de origen para ver.
  • Git-Git es un VCS (sistema de control de versiones), haciendo lo que hace CVS o subversión, a saber, mantenerlo al día con el último árbol de kernel.

Obtener la fuente del núcleo

Si desea instalar la fuente desde su distribución, use

# APT-GET Instalar Linux-fuente-

¿Dónde se puede recopilar para emitir?

desanimado -r 

Use esto si desea modificar su núcleo existente (agregar conductores, recortar, etc. ). De lo contrario, quieres el núcleo de vainilla. Puedes obtenerlo de www.núcleo.org (sugerimos wget o curl aquí como gerentes de descarga) o, si desea lo último, usará git. Recomendamos almacenar la fuente en el directorio de inicio de su usuario, y el comando para obtener el último árbol principal es (ver Man Git):

$ git clone git: // git.núcleo.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.Git Linux-2.6 

En el pasado encontramos el mini-howto en http: // linux.yyz.EE. UU./Git-HOWTO.html para ser útil; también mira kernelnewbies.organizar . El comando anterior creará una carpeta en su directorio actual llamado Linux-2.6, que se puede actualizar más tarde cd'ing en él y emitiendo un simple

hacer limpia; git tirón 

Ahora, después de tener la fuente, tendremos que configurar el kernel .

Configuración y edificio

Si tienes un existente .Archivo de configuración (el archivo que contiene las opciones para la construcción del núcleo: lo que entra y lo que no), copielo en Linux -2.6 (desde /boot /config- o /proc /config.GZ - La configuración actual). Si no desea modificar el existente .configurar, solo emitir

$ Make OldConfig 

De lo contrario, sigue leyendo. Si desea modificar la configuración existente, problema

$ haz menuconfig 

(Recomendación: puede usar la configuración Make para muchas preguntas sobre las opciones en el núcleo, o hacer XConfig, que requiere bibliotecas QT, para un menú gráfico más agradable), y seleccione "Cargar un archivo de configuración alternativo" y presione ENTER para .config, el nombre predeterminado del archivo de configuración, o escriba un nombre de archivo alternativo ya guardado en Linux-2.6.

Después de eso, comience a pasar por los menús para hacer las alteraciones necesarias, la regla general aquí es "si no sabes lo que hace, no te metas con él", al menos hasta que tengas experiencia. Al final, desde el menú superior, seleccione "Guardar un archivo de configuración alternativo", presione Entrar para obtener el nombre predeterminado (.config - recomendado) y luego "salir" desde abajo. Si desea comenzar desde cero, olvide el paso "Cargar un archivo de configuración alternativo" y continuar. En su próxima compilación de núcleos, después de limpiar y actualizar el árbol, use 'hacer OldConfig' como arriba para usar la configuración anterior. Ok, ahora tenemos la configuración adaptada a nuestras necesidades que solo esperan ser construidas. Construir un núcleo es tan simple como configurarlo (!). Solo escriba la marca y la salida debe verse a continuación:

$ make hostcc scripts/básico/fixdep hostcc scripts/kconfig/conf.o Scripts enviados/kconfig/zconf.pestaña.c scripts/kconfig/zconf.lex.c scripts/kconfig/zconf.picadillo.c scripts hostcc/kconfig/zconf.pestaña.o scripts hostld/kconfig/conf chk incluye/linux/versión.H UPD incluyen/Linux/Versión.H CHK incluye/generado/UtsRelease.H UPD incluyen/generado/UTSRELEASE.h cc núcleo/límites.S Gen incluye/generado/límites.H CC Arch/x86/kernel/asm-offsets.s… 

y, después de un tiempo, dependiendo de la configuración de su máquina y kernel, se realizará. Si desea acelerar un poco las cosas, use el indicador -jn para hacer, donde n es el número de procesadores/núcleos + 1. Sin embargo, tenga cuidado, eso puede exponer errores en el núcleo o construir infraestructura, por lo que si algo sale mal, intente nuevamente usando simplemente sin banderas. Si después de leer el manual de GCC (y si todavía está cuerdo), se siente aventurero y desea modificar algunas banderas específicas de hardware, o tenga ganas de optimizar el código, use la página Manual Make para averiguar cómo (principalmente coptas y cflags ). Sin embargo, las optimizaciones más grandes que -o2 son arriesgadas.

Tenga cuidado y espere rotura, el núcleo puede compilarse sin problemas, pero puede actuar raro. Recuerde escribir todos los comandos como usuario normal. No hay necesidad de construir como raíz y los desarrolladores del núcleo desaproban la idea.

Instalación

Ahora instalemos los módulos: esto debe hacerse como root, ya que los módulos están instalados en /lib, y el usuario normal no tiene acceso de escritura allí. Entonces,

# hacer módulos_install 

hace exactamente eso, y esto debe hacerse antes de instalar el núcleo para que los módulos y el núcleo instalado estén sincronizados. Usar

# Haz instalar 

Para instalar el núcleo a /arranque, luego

# DEPMOD 

y prepárese para crear un initRAMFS (sistema de archivos RAM inicial), que es un sistema de archivos temporal cargado para RAM en las primeras etapas de arranque, y se utiliza para proporcionar controladores básicos y otras instalaciones para que el sistema de archivos raíz se monte. Se puede encontrar más información en la página de inicio de Wikipedia. El comando necesario para la tarea es la actualización -initRAMFS (esto se invoca también cada vez que se instala un nuevo kernel, activado por el administrador de paquetes) que puede crear un initRAMFS (-c) o actualizar uno existente (-u) . El comando completo es

# Actualizar initramfs -c -k 

La versión es la que verá después de 'hacer módulos_install' finalizados (la última línea de su salida será "Depmod").Si desea tener el número de versión exacto y más largo, por lo que puede decirle a los desarrolladores qué "momento git" que usó, seleccione "Configuración general" → "Agregue automáticamente la información de la versión a la cadena de la versión" después de emitir Menuconfig. La salida en mi sistema Ubuntu se ve así:

Actualización de initramfs: generar /boot /initrd.IMG-3.1.0-RC3+.. 

Actualice su comida para que no se dé cuenta de su nuevo núcleo con

# Actualizar-Grub 

En mi máquina de prueba Debian, la salida se ve así:

Generación de comida.CFG ... imagen de fondo encontrada:/usr/share/images/escritorio-base/escritorio-grub.PNG FOUNDA LINUX Imagen: /Boot /VMlinuz-3.0.0-1-amd64 Imagen de initrd encontrado: /boot /initrd.IMG-3.0.0-1-amd64 imagen de Linux encontrada: /boot /vmlinuz-3.0.0-RC6-AMD64 FOUNTRD IMAGEN: /BOOT /INITRD.IMG-3.0.0-RC6-AMD64 Imagen de Linux encontrado: /boot /vmlinuz-2.6.39-07727-GBD1BFE4 encontrado INITRD Imagen: /Boot /Initrd.IMG-2.6.39-07727-GBD1BFE4 FOUNDA IMAGEN LINUX: /BOOT /VMLINUZ-2.6.39-2-AMD64 FOUNTRD IMAGEN: /BOOT /INITRD.IMG-2.6.39-2-AMD64 Imagen de Linux encontrado: /boot /vmlinuz-2.6.39-RC7-AMD64 FOUNTRD IMAGEN: /BOOT /INITRD.IMG-2.6.39-RC7-AMD64 Imagen de Linux encontrado: /boot /vmlinuz-2.6.38.5 Imagen de initrd encontrada: /boot /initrd.IMG-2.6.38.5 Imagen de Linux encontrado: /boot /vmlinuz-2.6.38.4-00001-GFAA8EE7 FOUNTRD IMAGEN: /BOOT /INITRD.IMG-2.6.38.4-00001-GFAA8EE7 Imagen de Linux encontrado: /boot /vmlinuz-2.6.38.4 Imagen de initrd encontrado: /boot /initrd.IMG-2.6.38.4 Imagen de Linux encontrado: /boot /vmlinuz-2.6.38-2-AMD64 FOUNTRD IMAGEN: /BOOT /INITRD.IMG-2.6.38-2-AMD64 Imagen de Linux encontrado: /boot /vmlinuz-2.6.32-5-AMD64 FOUNTRD IMAGEN: /BOOT /INITRD.IMG-2.6.32-5-AMD64 encontrado Memtest86+ Imagen: /Memtest86+.Bin encontrado Memtest86+ Multiboot Image: /Memtest86+ _Multiboot.contenedor 

Por supuesto, su salida no se verá exactamente igual, pero el esquema debe ser el mismo; Finalmente, recuerde: si desea, editar/etc/predeterminado/grub para alterar algunas opciones antes de actualizar grub y, con los dedos cruzados, reinicie su máquina para probar el nuevo kernel.

Si algo va mal

Las situaciones más habituales cuando su nuevo núcleo es inutilizable es que no puede arrancarlo en primer lugar, o que bota y no tiene un controlador esencial (por ejemplo, controladores de redes). Por lo general, Update-Grub hace un buen trabajo al escribir el archivo del menú Grub, pero es posible que desee verlo de todos modos. Si pasa comida, es probable que te vuelvas excesivo y te cases un controlador esencial para el sistema, como las partes relacionadas con el disco (ATA, SATA, SCSI ...), o tal vez NFS, si tienes una raíz montada en NFS. Arrancar un núcleo de trabajo y reconfigurarlo, usando Google y posibles otras fuentes, como IRC .

Lo más probable es que alguien ya haya tropezado con su problema en el pasado y tiene posibilidades de encontrar una respuesta. Si el problema es más grave, y confía en que lea sobre la netiquette y cómo publicar en la lista de correo del kernel, pregunte bien. Hay muchas personas agradables y serviciales por ahí, pero tienden a no ser tan amables cuando no has hecho tu tarea y/o perdiendo el tiempo. Si tiene una /bota separada, tenga en cuenta que generalmente no es muy grande y podría llenarse con núcleos rápidamente. También /lib /módulos tiende a acumular mucho espacio en /, así que asegúrese de limpiar de vez en cuando. Recuerde que el núcleo es un software complejo y muchas causas pueden estar en la raíz de sus problemas. Si no tuvo problemas para seguir esta guía, está listo para la configuración más avanzada del kernel de Linux.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Ubuntu 20.04 Guía
  • Cómo eliminar los núcleos viejos en Ubuntu
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Cosas para instalar en Ubuntu 22.04
  • Instale Arch Linux en VMware Workstation