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/14 12:58] – tempwin | informatica:certificaciones:lpic:lpic-2:201_linux_kernel [2021/04/14 13:02] (actual) – tempwin | ||
|---|---|---|---|
| Línea 5: | Línea 5: | ||
| Se describen los componentes del kernel que son necesarios para el hardware específico, | Se describen los componentes del kernel que son necesarios para el hardware específico, | ||
| - | * 201.1: Kernel Components (2) | + | * [[informatica:certificaciones: |
| - | * 201.2: Compiling a kernel (3) | + | * [[informatica:certificaciones:lpic:lpic-2:201_linux_kernel:201.2_compiling_a_kernel|201.2: Compiling |
| - | * 201.3: Kernel | + | * [[informatica:certificaciones:lpic:lpic-2:201_linux_kernel:201.3_kernel_runtime_management_and_troubleshooting|201.3: Kernel runtime management and troubleshooting]] (4) |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ===== Compiling a kernel ===== | + | |
| - | + | ||
| - | Pasos: | + | |
| - | + | ||
| - | | + | |
| - | - 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, | + | |
| - | + | ||
| - | Descomprimir: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | unxz < | + | |
| - | </ | + | |
| - | + | ||
| - | Y desempaquetar: | + | |
| - | + | ||
| - | <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 (cargar) 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 | + | |
| - | </ | + | |
| - | + | ||
| - | Ejemplo de salida: | + | |
| - | + | ||
| - | < | + | |
| - | abi.vsyscall32 = 1 | + | |
| - | crypto.fips_enabled = 0 | + | |
| - | debug.exception-trace = 1 | + | |
| - | debug.kprobes-optimization = 1 | + | |
| - | dev.hpet.max-user-freq = 64 | + | |
| - | dev.mac_hid.mouse_button2_keycode = 97 | + | |
| - | dev.mac_hid.mouse_button3_keycode = 100 | + | |
| - | dev.mac_hid.mouse_button_emulation = 0 | + | |
| - | dev.scsi.logging_level = 0 | + | |
| - | dev.tty.ldisc_autoload = 1 | + | |
| - | fs.aio-max-nr = 65536 | + | |
| - | (...) | + | |
| - | </ | + | |
| - | + | ||
| - | ==== udev ==== | + | |
| - | + | ||
| - | Detecta los dispositivos del sistema y está 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 definidas por el usuario se encuentra en ''/ | + | |
| - | + | ||
| - | === udevadm === | + | |
| - | + | ||
| - | Control de udev en tiempo de ejecución | + | |
| - | + | ||
| - | === udevmonitor === | + | |
| - | + | ||
| - | Comando que muestra los eventos de udev y el kernel por la salida estándar. | + | |
| - | + | ||
| - | Se puede utilizar para analizar la frecuencia de eventos medidante la comparación del tiemstamp del uevent kernel y el evento udev. | + | |
| - | + | ||
| - | No existe en todas las distribuiciones linux. Cuando existe, suele ser un enlace simbólico a '' | + | |
| - | + | ||
| - | ===== Test ===== | + | |
| - | + | ||
| - | In what order would the following commands result in a compiled kernel, compiled kernel modules and installation of kernel modules in the appropriate kernel directory? | + | |
| - | + | ||
| - | * make menuconfig, make bzImage, make modules, make modules-install | + | |
| - | + | ||
| - | What is the memory limit for low memory kernel installation in older Linux systems? | + | |
| - | + | ||
| - | * 512k | + | |
| - | + | ||
| - | Which of the following " | + | |
| - | + | ||
| - | * clean | + | |
| - | * distclean | + | |
| - | * mrproper | + | |
| - | + | ||
| - | Running "make menuconfig" | + | |
| - | + | ||
| - | * Verdadero | + | |
| - | + | ||
| - | The kernel source and documentation is always installed in the same package, regardless of distribution type or version. | + | |
| - | + | ||
| - | * Falso | + | |
informatica/certificaciones/lpic/lpic-2/201_linux_kernel.1618397886.txt.gz · Última modificación: por tempwin
