informatica:certificaciones:lpic:lpic-2:201_linux_kernel
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:certificaciones:lpic:lpic-2:201_linux_kernel [2021/04/02 16:13] – [Hardware e información del kernel] tempwin | informatica:certificaciones:lpic:lpic-2:201_linux_kernel [2021/04/14 13:02] (actual) – tempwin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== LPI Topic 201: Linux Kernel ====== | ====== LPI Topic 201: Linux Kernel ====== | ||
| - | * 201.1: Kernel Components (2) | + | Perteneciente a [[informatica:certificaciones:lpic:lpic-2|LPIC-2]] |
| - | * 201.2: Compiling a kernel (3) | + | |
| - | * 201.3: Kernel runtime management and troubleshooting (4) | + | |
| - | ===== Kernel Components ===== | + | Se describen los componentes del kernel que son necesarios para el hardware específico, |
| - | El kernel de Linux es el responsable de la gestión del hardware. Es el núcleo del sistema donde se detecta todo el hardware y se cargan los controladores que sirven para que el hardware se comunique con el sistema. | + | |
| - | + | * [[informatica:certificaciones:lpic:lpic-2:201_linux_kernel:201.2_compiling_a_kernel|201.2: Compiling a kernel]] (3) | |
| - | Actualmente, | + | * [[informatica:certificaciones:lpic:lpic-2:201_linux_kernel:201.3_kernel_runtime_management_and_troubleshooting|201.3: Kernel runtime management and troubleshooting]] (4) |
| - | + | ||
| - | **Componentes** del kernel: | + | |
| - | + | ||
| - | * El núcleo del kernel. | + | |
| - | * Módulos | + | |
| - | * Ramdisk (memoria para descomprimir el kernel en el momento en que se ejecuta) | + | |
| - | + | ||
| - | Cuando se almacenan en disco, la mayoría de las imágenes del kernel se comprimen para ahorrar espacio. Hay dos tipos de compresión del kernel: | + | |
| - | + | ||
| - | * **zImage**: tiene un tamaño máximo de 502 kB (loaded into low memory) | + | |
| - | * **bzImage**: | + | |
| - | + | ||
| - | Tanto zImage como bzImage utilizan la compresión **gzip**. El '' | + | |
| - | + | ||
| - | Cuando se arranca el equipo, al llegar al cargador de arranque (GRUB, por ejemplo), este selecciona el kernel adecuado y lo descomprime sobre la ramdisk. | + | |
| - | + | ||
| - | ==== Nomenclatura del kernel ==== | + | |
| - | + | ||
| - | El kernel de Linux lo encontramos en un archivo llamad '' | + | |
| - | + | ||
| - | Hay 3 esquemas diferentes para la numeración de versiones: | + | |
| - | + | ||
| - | * Hasta la 2.6.0: | + | |
| - | * A: major release | + | |
| - | * B: minor release (número par: estable; impar: desarrollo) | + | |
| - | * C: patch level | + | |
| - | * Desde 2.6.0 hasta 3.0 | + | |
| - | * C: número incrementado cada 2 o 3 meses | + | |
| - | * D: solución de bugs e incidencias de seguridad | + | |
| - | * Versión 3.0 y 4: | + | |
| - | * B: version number | + | |
| - | * C: patch level. | + | |
| - | + | ||
| - | Para saber la versión del kernel en uso: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | uname -r | + | |
| - | </ | + | |
| - | + | ||
| - | Más información: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | uname -a | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Fuentes del kernel ==== | + | |
| - | + | ||
| - | Si queremos hacer nosotros la compilación del kernel, necesitamos descargar su código fuente que normalmente se almacenará en ''/ | + | |
| - | + | ||
| - | Para descargar las fuentes del kernel: https://www.kernel.org/ | + | |
| - | + | ||
| - | La documentación estaría en ''/ | + | |
| - | + | ||
| - | ==== Categoría de lanzamientos de kernel ==== | + | |
| - | + | ||
| - | Ediciones sobre las que se lanzan los kernels: | + | |
| - | + | ||
| - | * **Prepatch**: | + | |
| - | * **Mainline**: | + | |
| - | * **Stable**: estable | + | |
| - | * **Longterm**: | + | |
| - | + | ||
| - | * https:// | + | |
| - | ==== Módulos ==== | + | |
| - | + | ||
| - | Son como los // | + | |
| - | + | ||
| - | Los módulos se pueden cargar dinámicamente, | + | |
| - | + | ||
| - | Tiene extensión '' | + | |
| - | + | ||
| - | La configuración de los módulos para una versión del kernel instalada se encuentra en ''/ | + | |
| - | + | ||
| - | ==== Ramdisk ==== | + | |
| - | + | ||
| - | Disco virtual sobre el que se descomprime el kernel al arrancar. Este disco virtual es el fichero '' | + | |
| - | + | ||
| - | ===== Compiling a kernel | + | |
| - | + | ||
| - | Pasos: | + | |
| - | + | ||
| - | - Obtener fuentes del kernel | + | |
| - | - Herramientas para compilación | + | |
| - | - Limpieza | + | |
| - | - Configuración | + | |
| - | - Compilación | + | |
| - | + | ||
| - | ==== Obtención de fuentes ==== | + | |
| - | El primer paso es obtener las fuentes del kernel: https:// | + | |
| - | + | ||
| - | Para descomprimirlo, | + | |
| - | + | ||
| - | <code bash> | + | |
| - | unxz < | + | |
| - | </ | + | |
| - | + | ||
| - | Y desempaquetamos: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | tar xvf < | + | |
| - | </ | + | |
| - | + | ||
| - | En caso de '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | tar zxvf < | + | |
| - | </ | + | |
| - | + | ||
| - | Una vez descomprimido, | + | |
| - | + | ||
| - | ==== Herramientas para compilación ==== | + | |
| - | + | ||
| - | En **Debian** es necesario instalar: | + | |
| - | + | ||
| - | < | + | |
| - | apt-get install build-essential bison flex libelf-dev libssl-dev bc libncurses5-dev | + | |
| - | </ | + | |
| - | + | ||
| - | En **CentOS**: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | yum group install " | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round info 60%> | + | |
| - | Es posible que hagan falta más herramientas, | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Limpieza ==== | + | |
| - | + | ||
| - | Para asegurarnos de que comenzamos con un estado limpio del kernel, debemos realizar la limpieza del mismo: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | make mrproper | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Debemos realizar la operación dentro del directorio con las fuentes del kernel que vamos a compilar | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Generar archivo de configuración ==== | + | |
| - | + | ||
| - | La compilación se realiza en función de la información albergada en el archivo '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | make menuconfig | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Debemos realizar la operación dentro del directorio con las fuentes del kernel que vamos a compilar | + | |
| - | </ | + | |
| - | + | ||
| - | Después de hacer los cambios, cuando guardamos y salimos, se generará un fichero '' | + | |
| - | + | ||
| - | ==== Compilación ==== | + | |
| - | + | ||
| - | La compilación se realiza ejecutando el comando '' | + | |
| - | + | ||
| - | < | + | |
| - | make | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Debemos realizar la operación dentro del directorio con las fuentes del kernel que vamos a compilar | + | |
| - | </ | + | |
| - | + | ||
| - | Este proceso dura un tiempo que dependerá de la potencia del equipo donde se haga la compilación. | + | |
| - | + | ||
| - | ==== bzImage ==== | + | |
| - | + | ||
| - | Tras una compilación satisfactoria, | + | |
| - | + | ||
| - | <code bash> | + | |
| - | make bzImage | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Debemos realizar la operación dentro del directorio con las fuentes del kernel | + | |
| - | </ | + | |
| - | + | ||
| - | Se creará en ''/ | + | |
| - | ==== Instalación de módulos ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | make modules | + | |
| - | </ | + | |
| - | + | ||
| - | Y tras ello: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | make modules_install | + | |
| - | </ | + | |
| - | + | ||
| - | Los módulos se instalarán en la carpeta ''/ | + | |
| - | + | ||
| - | <WRAP center round info 60%> | + | |
| - | En versiones antiguas (antes del kernel | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Instalación del kernel ==== | + | |
| - | + | ||
| - | Al finalizar los pasos anteriores, tendríamos: | + | |
| - | + | ||
| - | * 32 bits: ''/ | + | |
| - | * 64 bits: ''/ | + | |
| - | + | ||
| - | La instalación se hace copiando simplemente dicho archivo a ''/ | + | |
| - | + | ||
| - | <code bash> | + | |
| - | cp / | + | |
| - | </ | + | |
| - | + | ||
| - | Finalmente también tendríamos que añadir los ficheros '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | cp / | + | |
| - | cp / | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Creación del Ramdisk ==== | + | |
| - | + | ||
| - | Tenemos que dejar a disposición del kernel un **ramdisk** que contenga el conjunto de módulos compilados para la nueva versión del nuevo kernel: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | mkinitramfs -o NOMBRE_IMAGEN_VERSION | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round info 60%> | + | |
| - | Anteriormente se utilizaba el comando '' | + | |
| - | </ | + | |
| - | + | ||
| - | Ejemplo: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | mkinitramfs -o initrd.img-4.16.7 | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Configurar el gestor de arranque ==== | + | |
| - | + | ||
| - | Tenemos que indicarle al gestor de arranque que hay un nuevo kernel para que nos permita elegirlo y arrancarlo. Aquí veremos el ejemplo del cargador de arranque GRUB. | + | |
| - | + | ||
| - | Entramos en ''/ | + | |
| - | + | ||
| - | < | + | |
| - | menuentry ' | + | |
| - | # Partición del disco donde está el sistema | + | |
| - | set root=' | + | |
| - | + | ||
| - | # Kernel a usar | + | |
| - | linux / | + | |
| - | + | ||
| - | # Ramdisk donde se descomprimirá el kernel | + | |
| - | initrd / | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | El primer disco es '' | + | |
| - | + | ||
| - | Generamos el nuevo fichero de configuración del GRUB (''/ | + | |
| - | + | ||
| - | <code bash> | + | |
| - | grub-mkconfig -o grub.cfg | + | |
| - | </ | + | |
| - | + | ||
| - | Aplicar los cambios: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | update-grub | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Kernel runtime management and troubleshooting | + | |
| - | + | ||
| - | ==== Gestión de módulos ==== | + | |
| - | + | ||
| - | === lsmod === | + | |
| - | + | ||
| - | Lista módulos instalados en el kernel y qué procesos los están usando. Muestra la misma información que el contenido de ''/ | + | |
| - | + | ||
| - | < | + | |
| - | Module | + | |
| - | video 49152 0 | + | |
| - | x_tables | + | |
| - | mbcache | + | |
| - | (...) | + | |
| - | </ | + | |
| - | + | ||
| - | === insmod === | + | |
| - | + | ||
| - | Insertar módulos en el kernel. | + | |
| - | + | ||
| - | <code bash> | + | |
| - | insmod / | + | |
| - | </ | + | |
| - | + | ||
| - | Luego podemos verificar que está instalado con '' | + | |
| - | + | ||
| - | === rmmod === | + | |
| - | + | ||
| - | Eliminar módulos del kernel. | + | |
| - | + | ||
| - | <code bash> | + | |
| - | rmmod < | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Si el módulo está en ejecución o depende de otro módulo, no nos dejará. | + | |
| - | </ | + | |
| - | + | ||
| - | === modprobe === | + | |
| - | + | ||
| - | Realiza la gestión dinámica de módulos. Realiza las mismas operaciones que '' | + | |
| - | + | ||
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | Ejemplo: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | modprobe sym53c8xx.ko | + | |
| - | </ | + | |
| - | + | ||
| - | Insertaría un módulo, resolviendo las dependencias. | + | |
| - | + | ||
| - | === modinfo === | + | |
| - | + | ||
| - | Muestra información sobre módulos | + | |
| - | + | ||
| - | <code bash> | + | |
| - | modinfo / | + | |
| - | </ | + | |
| - | + | ||
| - | Ejemplo de salida: | + | |
| - | + | ||
| - | < | + | |
| - | filename: | + | |
| - | license: | + | |
| - | description: | + | |
| - | author: | + | |
| - | alias: | + | |
| - | alias: | + | |
| - | depends: | + | |
| - | retpoline: | + | |
| - | intree: | + | |
| - | name: | + | |
| - | (...) | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Configuración de módulos ==== | + | |
| - | + | ||
| - | La configuración de los módulos están en los siguientes ficheros: | + | |
| - | + | ||
| - | * ''/ | + | |
| - | * ''/ | + | |
| - | * ''/ | + | |
| - | + | ||
| - | El primero está obsoleto en muchas distribuciones y '' | + | |
| - | + | ||
| - | ==== Dependencias de módulos ==== | + | |
| - | + | ||
| - | El archivo que define las dependencias de unos módulos con respecto a otros es '' | + | |
| - | + | ||
| - | Aspecto del fichero '' | + | |
| - | + | ||
| - | < | + | |
| - | kernel/ | + | |
| - | kernel/ | + | |
| - | (...) | + | |
| - | </ | + | |
| - | + | ||
| - | Primero aparece el nombre del módulo y a continuación los módulos de los que depende. | + | |
| - | + | ||
| - | ==== Carga de módulos ==== | + | |
| - | + | ||
| - | '' | + | |
| - | + | ||
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | Ambos usan '' | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Kmod reemplaza Kerneld a partir del kernel 2.2 | + | |
| - | </ | + | |
| - | + | ||
| - | Para habilitar el uso de kmod, el kernel debe ser compilado con la opción '' | + | |
| - | + | ||
| - | ==== Hardware e información del kernel ==== | + | |
| - | + | ||
| - | === lsdev === | + | |
| - | + | ||
| - | Proporciona información del hardware instalado. Qué dispositivo está usando qué dirección I/O y canales IRQ/DMA. Para ello, utiliza la información de los siguientes ficheros: | + | |
| - | + | ||
| - | * ''/ | + | |
| - | * ''/ | + | |
| - | * ''/ | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Para tener disponible este comando, hay que instalar el paquete '' | + | |
| - | </ | + | |
| - | + | ||
| - | === lscpi === | + | |
| - | + | ||
| - | Muestra información sobre todos los buses PCI del sistema y todos los dispositivos que están conectados a ellos. | + | |
| - | + | ||
| - | === lsusb === | + | |
| - | + | ||
| - | Muestra información de los buses USB de sistema y los dispositivos que están conectados a ellos. | + | |
| - | + | ||
| - | === dmesg === | + | |
| - | + | ||
| - | Comando que permite ver los mensajes de la salida estándar del kernel (también llamado //kernel buffer ring//). | + | |
| - | + | ||
| - | Muy útil para tratar de solucionar problemas con el sistema o si necesitamos obtener información del hardware del sistema. | + | |
| - | + | ||
| - | La salida de '' | + | |
| - | + | ||
| - | Como la salida del comando es muy larga, lo normal es filtrar los resultados con '' | + | |
| - | + | ||
| - | < | + | |
| - | dmesg | grep sda | + | |
| - | </ | + | |
| - | + | ||
| - | Ejemplo de salida: | + | |
| - | + | ||
| - | < | + | |
| - | [ 3.166003] sd 1:0:0:0: [sda] 134217728 512-byte logical blocks: | + | |
| - | [ 3.166043] sd 1:0:0:0: [sda] Write Protect is off | + | |
| - | [ 3.166045] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00 | + | |
| - | [ 3.166057] sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn' | + | |
| - | [ 3.195329] | + | |
| - | [ 3.196275] sd 1:0:0:0: [sda] Attached SCSI disk | + | |
| - | [ | + | |
| - | [ | + | |
| - | </ | + | |
| - | + | ||
| - | === sysctl === | + | |
| - | + | ||
| - | Modifica los parámetros del kernel en tiempo de ejecución: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | sysctl net.ipv4.ip_forward=1 | + | |
| - | </ | + | |
| - | + | ||
| - | Los parámetros disponibles se encuentra en ''/ | + | |
| - | + | ||
| - | Los cambios son volátiles, desaparecerán al apagar/ | + | |
| - | + | ||
| - | Si queremos ver todos los parámetros disponibles y su estado: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | sysctl -a | + | |
| - | </ | + | |
| - | + | ||
| - | === udev === | + | |
| - | + | ||
| - | Diseñado para hacer más flexible y seguro el manejo de dispositivos. | + | |
| - | + | ||
| - | Consiste en un daemon '' | + | |
| - | + | ||
| - | El fichero de configuración es ''/ | + | |
| - | + | ||
| - | El directorio donde se almacenan las reglas del usuario se encuentra en ''/ | + | |
informatica/certificaciones/lpic/lpic-2/201_linux_kernel.1617372824.txt.gz · Última modificación: por tempwin
