Introdução
Neste laboratório, você aprenderá como verificar se a depuração do kernel está habilitada no Linux. Isso envolve explorar a configuração do kernel, verificar informações de depuração e inspecionar o debugfs.
Primeiramente, você usará zcat /proc/config.gz para examinar o arquivo de configuração do kernel, procurando por opções específicas como CONFIG_LOCALVERSION usando grep. Em seguida, você verificará as informações de depuração usando dmesg. Finalmente, você inspecionará o sistema de arquivos debugfs localizado em /sys/kernel/debug. Essas etapas fornecerão uma compreensão abrangente de como determinar se a depuração do kernel está habilitada em seu sistema Linux.
Verificar a configuração do kernel com zcat /proc/config.gz
Nesta etapa, exploraremos como verificar a configuração do kernel Linux usando a linha de comando. A configuração do kernel determina quais recursos são integrados ao kernel e como ele se comporta.
A configuração do kernel é armazenada em um arquivo chamado /proc/config.gz. Este arquivo é uma versão compactada da configuração do kernel. Para visualizar o conteúdo deste arquivo, usaremos o comando zcat.
zcat é um utilitário de linha de comando que permite visualizar o conteúdo de um arquivo compactado sem realmente descompactá-lo. É particularmente útil para visualizar arquivos compactados grandes, pois economiza tempo e espaço em disco necessários para descompactar o arquivo inteiro.
Para verificar a configuração do kernel, abra seu terminal e digite o seguinte comando:
zcat /proc/config.gz
Este comando exibirá a configuração do kernel em seu terminal. Como a saída é bastante longa, ela pode rolar rapidamente. Para visualizar a saída uma página por vez, você pode canalizar a saída para o comando less:
zcat /proc/config.gz | less
Agora, você pode usar as setas do teclado para percorrer a configuração. Pressione q para sair do less.
O arquivo de configuração do kernel consiste em uma série de linhas, cada uma definindo uma opção de configuração específica. Essas opções controlam vários aspectos do kernel, como quais drivers de hardware estão incluídos, quais protocolos de rede são suportados e quais recursos de segurança estão habilitados.
Vamos procurar uma opção de configuração específica. Por exemplo, vamos verificar se a opção CONFIG_LOCALVERSION está definida. Essa opção especifica uma string de versão personalizada para o kernel.
Para pesquisar essa opção, podemos usar o comando grep. grep é um utilitário de linha de comando poderoso que permite pesquisar padrões específicos em arquivos de texto.
Digite o seguinte comando em seu terminal:
zcat /proc/config.gz | grep CONFIG_LOCALVERSION
Se a opção CONFIG_LOCALVERSION estiver definida, você verá uma linha semelhante a esta:
CONFIG_LOCALVERSION="-labex"
O valor exato de CONFIG_LOCALVERSION pode variar dependendo da configuração do kernel. Se a opção não estiver definida, grep não exibirá nada.
Você também pode pesquisar outras opções de configuração. Por exemplo, você pode verificar se a opção CONFIG_DEBUG_INFO está habilitada. Essa opção permite a geração de informações de depuração, o que pode ser útil para solucionar problemas do kernel.
zcat /proc/config.gz | grep CONFIG_DEBUG_INFO
Uma saída típica seria:
CONFIG_DEBUG_INFO=y
Isso indica que as informações de depuração estão habilitadas na configuração do kernel.
Ao examinar a configuração do kernel, você pode obter informações valiosas sobre como seu sistema está configurado e quais recursos estão habilitados. Essas informações podem ser úteis para solucionar problemas, otimizar o desempenho e personalizar seu sistema para atender às suas necessidades específicas.
Verificar informações de depuração em dmesg
Nesta etapa, aprenderemos como verificar a presença de informações de depuração no buffer de mensagens do kernel, que pode ser acessado usando o comando dmesg. dmesg é um utilitário de linha de comando que exibe o buffer de mensagens do kernel. Este buffer contém várias mensagens geradas pelo kernel, incluindo informações de depuração, mensagens de inicialização de hardware e mensagens de erro.
Primeiro, vamos entender o que são informações de depuração e por que elas são importantes. Informações de depuração são dados extras incluídos em um programa ou kernel que ajudam os desenvolvedores a diagnosticar e corrigir problemas. Elas incluem coisas como nomes de funções, nomes de variáveis e números de linha, o que facilita o rastreamento da execução do código e a identificação da fonte dos erros.
Para visualizar o buffer de mensagens do kernel, abra seu terminal e digite o seguinte comando:
dmesg
Este comando exibirá o conteúdo do buffer de mensagens do kernel em seu terminal. A saída pode ser bastante longa, por isso é frequentemente útil canalizá-la para um paginador como less:
dmesg | less
Agora, você pode usar as setas do teclado para percorrer as mensagens. Pressione q para sair do less.
Para verificar a presença de informações de depuração, procuraremos palavras-chave ou padrões específicos na saída de dmesg. Por exemplo, se o kernel for construído com a depuração habilitada, você poderá ver mensagens contendo nomes de funções ou números de linha.
Vamos procurar a palavra-chave debug na saída de dmesg. Digite o seguinte comando em seu terminal:
dmesg | grep debug
Este comando exibirá quaisquer linhas na saída de dmesg que contenham a palavra debug. Se a depuração estiver habilitada, você poderá ver mensagens 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)
A presença de tais mensagens indica que algum nível de depuração está habilitado no kernel.
Outra maneira de verificar informações de depuração é procurar mensagens relacionadas a módulos ou drivers específicos do kernel. Por exemplo, se você estiver interessado em depurar um driver de rede específico, poderá pesquisar mensagens relacionadas a esse driver.
Vamos supor que você queira verificar mensagens de depuração relacionadas à interface de rede eth0. Você pode usar o seguinte comando:
dmesg | grep eth0
Este comando exibirá quaisquer linhas na saída de dmesg que contenham a string eth0. Se o driver de rede estiver gerando mensagens de depuração, você poderá ver uma saída como esta:
[ 2.345678] eth0: link up, speed 100 Mbps, full duplex
[ 3.456789] eth0: received packet with invalid checksum
Essas mensagens podem fornecer informações valiosas sobre o comportamento do driver de rede e ajudá-lo a solucionar quaisquer problemas.
Ao examinar a saída de dmesg e pesquisar palavras-chave ou padrões específicos, você pode verificar a presença de informações de depuração e obter informações sobre o funcionamento interno do kernel e seus módulos.
Inspecionar debugfs em /sys/kernel/debug
Nesta etapa, exploraremos o sistema de arquivos debugfs, que é uma ferramenta poderosa para desenvolvedores de kernel e administradores de sistema para depurar e monitorar o kernel Linux. Debugfs fornece uma maneira de acessar estruturas de dados internas do kernel e controlar certos comportamentos do kernel.
Debugfs é normalmente montado em /sys/kernel/debug. Vamos navegar para este diretório em seu terminal.
cd /sys/kernel/debug
Agora, liste o conteúdo deste diretório usando o comando ls:
ls
Você verá uma variedade de arquivos e diretórios. Estes representam diferentes subsistemas e recursos do kernel. O conteúdo exato deste diretório pode variar dependendo da versão e configuração do seu kernel.
Muitos dos arquivos em debugfs são somente leitura e fornecem informações sobre o estado interno do kernel. Alguns arquivos são graváveis e permitem que você modifique parâmetros do kernel ou acione ações específicas.
Importante: Tenha muito cuidado ao gravar em arquivos em debugfs. Modificar incorretamente esses arquivos pode causar instabilidade do sistema ou até mesmo travamentos. Geralmente, é recomendável modificar arquivos em debugfs somente se você souber exatamente o que está fazendo.
Vamos explorar um diretório específico dentro de debugfs. Um comum para investigar é tracing. Este diretório contém arquivos relacionados à infraestrutura de rastreamento do kernel, que permite monitorar a execução do código do kernel e identificar gargalos de desempenho.
Navegue para o diretório tracing:
cd tracing
Liste o conteúdo do diretório tracing:
ls
Você verá arquivos como trace, events, options, etc. O arquivo trace contém os dados de rastreamento reais. Você pode visualizar o conteúdo deste arquivo usando o comando cat:
cat trace
A saída será um fluxo de eventos de rastreamento, mostrando a execução de várias funções do kernel. Esses dados podem ser úteis para entender como o kernel está se comportando e identificar problemas de desempenho.
O diretório events contém informações sobre os eventos de rastreamento disponíveis. Você pode explorar este diretório para ver quais eventos estão disponíveis para rastreamento.
ls events
Você verá uma lista de diretórios, cada um representando uma categoria de evento diferente. Por exemplo, o diretório sched contém eventos relacionados ao agendador do kernel.
Você pode explorar esses diretórios para ver os eventos específicos que estão disponíveis. Por exemplo, para ver os eventos no diretório sched:
ls events/sched
Você verá arquivos como sched_switch, sched_wakeup, etc. Estes representam eventos de agendamento específicos que você pode rastrear.
Ao explorar o sistema de arquivos debugfs, você pode obter informações valiosas sobre o funcionamento interno do kernel Linux e usar essas informações para depurar e monitorar seu sistema. Lembre-se de ser cauteloso ao modificar arquivos em debugfs, pois alterações incorretas podem levar à instabilidade do sistema.
Finalmente, retorne ao seu diretório home:
cd ~/project
Resumo
Neste laboratório, exploramos como verificar a configuração do kernel Linux usando a linha de comando. Aprendemos que a configuração do kernel é armazenada em um arquivo compactado /proc/config.gz, que pode ser visualizado usando o comando zcat. Canalizar a saída de zcat para less permite uma navegação mais fácil pela configuração.
Além disso, utilizamos o comando grep para pesquisar opções de configuração específicas dentro do arquivo de configuração do kernel, como CONFIG_LOCALVERSION, para determinar se um recurso ou configuração específica está habilitado no kernel.



