Cómo comprobar si la depuración del kernel está habilitada en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo comprobar si la depuración del kernel está habilitada en Linux. Esto implica explorar la configuración del kernel, verificar la información de depuración e inspeccionar el sistema de archivos debugfs.

Primero, utilizará zcat /proc/config.gz para examinar el archivo de configuración del kernel, buscando opciones específicas como CONFIG_LOCALVERSION utilizando grep. A continuación, verificará la información de depuración utilizando dmesg. Finalmente, inspeccionará el sistema de archivos debugfs ubicado en /sys/kernel/debug. Estos pasos le brindarán una comprensión integral de cómo determinar si la depuración del kernel está habilitada en su sistema Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/echo -.-> lab-558940{{"Cómo comprobar si la depuración del kernel está habilitada en Linux"}} linux/ls -.-> lab-558940{{"Cómo comprobar si la depuración del kernel está habilitada en Linux"}} linux/cat -.-> lab-558940{{"Cómo comprobar si la depuración del kernel está habilitada en Linux"}} linux/less -.-> lab-558940{{"Cómo comprobar si la depuración del kernel está habilitada en Linux"}} linux/cd -.-> lab-558940{{"Cómo comprobar si la depuración del kernel está habilitada en Linux"}} linux/grep -.-> lab-558940{{"Cómo comprobar si la depuración del kernel está habilitada en Linux"}} end

Verificar la configuración del kernel con zcat /proc/config.gz

En este paso, exploraremos cómo verificar la configuración del kernel de Linux utilizando la línea de comandos. La configuración del kernel determina qué características se integran en el kernel y cómo se comporta.

La configuración del kernel se almacena en un archivo llamado /proc/config.gz. Este archivo es una versión comprimida de la configuración del kernel. Para ver el contenido de este archivo, utilizaremos el comando zcat.

zcat es una utilidad de línea de comandos que te permite ver el contenido de un archivo comprimido sin descomprimirlo realmente. Es especialmente útil para ver archivos comprimidos grandes, ya que te ahorra el tiempo y el espacio en disco necesarios para descomprimir todo el archivo.

Para verificar la configuración del kernel, abre tu terminal y escribe el siguiente comando:

zcat /proc/config.gz

Este comando mostrará la configuración del kernel en tu terminal. Dado que la salida es bastante larga, puede pasar rápidamente. Para ver la salida una página a la vez, puedes canalizar la salida al comando less:

zcat /proc/config.gz | less

Ahora, puedes usar las teclas de flecha para desplazarte por la configuración. Presiona q para salir de less.

El archivo de configuración del kernel consta de una serie de líneas, cada una de las cuales define una opción de configuración específica. Estas opciones controlan varios aspectos del kernel, como qué controladores de hardware se incluyen, qué protocolos de red se admiten y qué características de seguridad están habilitadas.

Busquemos una opción de configuración específica. Por ejemplo, veamos si la opción CONFIG_LOCALVERSION está configurada. Esta opción especifica una cadena de versión personalizada para el kernel.

Para buscar esta opción, podemos usar el comando grep. grep es una potente utilidad de línea de comandos que te permite buscar patrones específicos en archivos de texto.

Escribe el siguiente comando en tu terminal:

zcat /proc/config.gz | grep CONFIG_LOCALVERSION

Si la opción CONFIG_LOCALVERSION está configurada, verás una línea similar a esta:

CONFIG_LOCALVERSION="-labex"

El valor exacto de CONFIG_LOCALVERSION puede variar según la configuración del kernel. Si la opción no está configurada, grep no mostrará nada.

También puedes buscar otras opciones de configuración. Por ejemplo, puedes verificar si la opción CONFIG_DEBUG_INFO está habilitada. Esta opción habilita la generación de información de depuración, que puede ser útil para solucionar problemas del kernel.

zcat /proc/config.gz | grep CONFIG_DEBUG_INFO

Una salida típica sería:

CONFIG_DEBUG_INFO=y

Esto indica que la información de depuración está habilitada en la configuración del kernel.

Al examinar la configuración del kernel, puedes obtener información valiosa sobre cómo está configurado tu sistema y qué características están habilitadas. Esta información puede ser útil para solucionar problemas, optimizar el rendimiento y personalizar tu sistema para satisfacer tus necesidades específicas.

Verificar la información de depuración en dmesg

En este paso, aprenderemos cómo verificar la presencia de información de depuración en el buffer de mensajes del kernel, que se puede acceder utilizando el comando dmesg. dmesg es una utilidad de línea de comandos que muestra el buffer de mensajes del kernel. Este buffer contiene diversos mensajes generados por el kernel, incluyendo información de depuración, mensajes de inicialización de hardware y mensajes de error.

Primero, entendamos qué es la información de depuración y por qué es importante. La información de depuración es datos adicionales incluidos en un programa o kernel que ayudan a los desarrolladores a diagnosticar y solucionar problemas. Incluye cosas como nombres de funciones, nombres de variables y números de línea, lo que facilita rastrear la ejecución del código e identificar la fuente de los errores.

Para ver el buffer de mensajes del kernel, abre tu terminal y escribe el siguiente comando:

dmesg

Este comando mostrará el contenido del buffer de mensajes del kernel en tu terminal. La salida puede ser bastante larga, por lo que a menudo es útil canalizarla a un paginador como less:

dmesg | less

Ahora, puedes usar las teclas de flecha para desplazarte por los mensajes. Presiona q para salir de less.

Para verificar la presencia de información de depuración, buscaremos palabras clave o patrones específicos en la salida de dmesg. Por ejemplo, si el kernel se compila con la depuración habilitada, es posible que veas mensajes que contengan nombres de funciones o números de línea.

Busquemos la palabra clave debug en la salida de dmesg. Escribe el siguiente comando en tu terminal:

dmesg | grep debug

Este comando mostrará cualquier línea en la salida de dmesg que contenga la palabra debug. Si la depuración está habilitada, es posible que veas mensajes como:

[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-76-generic root=UUID=... ro debug
[    1.234567] ACPI: Added _OSI(Module Device)

La presencia de tales mensajes indica que algún nivel de depuración está habilitado en el kernel.

Otra forma de verificar la información de depuración es buscar mensajes relacionados con módulos o controladores específicos del kernel. Por ejemplo, si estás interesado en depurar un controlador de red en particular, puedes buscar mensajes relacionados con ese controlador.

Supongamos que quieres verificar los mensajes de depuración relacionados con la interfaz de red eth0. Puedes usar el siguiente comando:

dmesg | grep eth0

Este comando mostrará cualquier línea en la salida de dmesg que contenga la cadena eth0. Si el controlador de red está generando mensajes de depuración, es posible que veas una salida como esta:

[    2.345678] eth0: link up, speed 100 Mbps, full duplex
[    3.456789] eth0: received packet with invalid checksum

Estos mensajes pueden proporcionar información valiosa sobre el comportamiento del controlador de red y ayudarte a solucionar cualquier problema.

Al examinar la salida de dmesg y buscar palabras clave o patrones específicos, puedes verificar la presencia de información de depuración y obtener información sobre el funcionamiento interno del kernel y sus módulos.

Inspeccionar debugfs en /sys/kernel/debug

En este paso, exploraremos el sistema de archivos debugfs, que es una herramienta poderosa para los desarrolladores de kernel y administradores de sistemas para depurar y monitorear el kernel de Linux. Debugfs proporciona una forma de acceder a las estructuras de datos internas del kernel y controlar ciertos comportamientos del kernel.

Debugfs generalmente se monta en /sys/kernel/debug. Vayamos a este directorio en tu terminal.

cd /sys/kernel/debug

Ahora, lista el contenido de este directorio utilizando el comando ls:

ls

Verás una variedad de archivos y directorios. Estos representan diferentes subsistemas y características del kernel. El contenido exacto de este directorio puede variar dependiendo de la versión y configuración de tu kernel.

Muchos de los archivos en debugfs son de solo lectura y proporcionan información sobre el estado interno del kernel. Algunos archivos son de escritura y te permiten modificar parámetros del kernel o activar acciones específicas.

Importante: Ten mucho cuidado al escribir en archivos en debugfs. Modificar incorrectamente estos archivos puede causar inestabilidad en el sistema o incluso caídas. Generalmente se recomienda solo modificar archivos en debugfs si sabes exactamente lo que estás haciendo.

Exploremos un directorio específico dentro de debugfs. Uno común para investigar es tracing. Este directorio contiene archivos relacionados con la infraestructura de seguimiento (tracing) del kernel, que te permite monitorear la ejecución del código del kernel e identificar cuellos de botella de rendimiento.

Navega al directorio tracing:

cd tracing

Lista el contenido del directorio tracing:

ls

Verás archivos como trace, events, options, etc. El archivo trace contiene los datos de seguimiento reales. Puedes ver el contenido de este archivo utilizando el comando cat:

cat trace

La salida será una secuencia de eventos de seguimiento, que muestra la ejecución de varias funciones del kernel. Estos datos pueden ser útiles para entender cómo se está comportando el kernel e identificar problemas de rendimiento.

El directorio events contiene información sobre los eventos de seguimiento disponibles. Puedes explorar este directorio para ver qué eventos están disponibles para el seguimiento.

ls events

Verás una lista de directorios, cada uno representando una categoría de eventos diferente. Por ejemplo, el directorio sched contiene eventos relacionados con el planificador (scheduler) del kernel.

Puedes explorar estos directorios para ver los eventos específicos que están disponibles. Por ejemplo, para ver los eventos en el directorio sched:

ls events/sched

Verás archivos como sched_switch, sched_wakeup, etc. Estos representan eventos de planificación específicos que puedes seguir.

Al explorar el sistema de archivos debugfs, puedes obtener información valiosa sobre el funcionamiento interno del kernel de Linux y utilizar esta información para depurar y monitorear tu sistema. Recuerda ser cauteloso al modificar archivos en debugfs, ya que cambios incorrectos pueden causar inestabilidad en el sistema.

Finalmente, regresa a tu directorio de inicio:

cd ~/project

Resumen

En este laboratorio, exploramos cómo verificar la configuración del kernel de Linux utilizando la línea de comandos. Aprendimos que la configuración del kernel se almacena en un archivo comprimido /proc/config.gz, que se puede ver utilizando el comando zcat. Canalizar la salida de zcat a less permite una navegación más fácil a través de la configuración.

Además, utilizamos el comando grep para buscar opciones de configuración específicas dentro del archivo de configuración del kernel, como CONFIG_LOCALVERSION, para determinar si una característica o configuración en particular está habilitada en el kernel.