Este artigo explica brevemente o kernel Linux e como navegar seu código -fonte.
Este tutorial é otimizado para usuários e programadores de Linux inexperientes que desejam ler o código -fonte do kernel ou se tornarem desenvolvedores de kernel Linux. O kernel Linux é universal; Portanto, o presente documento é útil para todas as distribuições Linux.
Ao ler este artigo, você entenderá o que é o kernel, como é estruturado e como navegar por seus componentes. Este artigo foi escrito inicialmente em 2019 e atualizado em 2022.
Qual é o kernel Linux e como navegar
O kernel Linux é o principal componente que permite a interação entre o software e o hardware com a ajuda de drivers de dispositivo. Você pode pensar no kernel Linux como um tradutor que permite a comunicação entre programas, hardware e interface do usuário.
Aprender a navegar no kernel Linux é o primeiro passo para qualquer programador que queira se tornar um desenvolvedor de kernel. Também é útil para programadores ou usuários que desejam ler seu código -fonte ou modificá -lo.
A estrutura do kernel Linux
O kernel Linux é estruturado com diretórios e subdiretórios conhecidos como "Kernel Tree", os usuários podem navegar para acessar seções específicas de todo o código. Isso permite que usuários e desenvolvedores se concentrem em partes específicas do código.
Exceto pela distribuição do Slackware Linux, cujo kernel é mantido por uma única pessoa, o restante das tarefas de dividir da comunidade de Distribuições Linux com base na árvore do kernel. Por outro lado, vários desenvolvedores se concentram nos motoristas, outros se concentram na segurança e outros em virtualização.
A árvore de origem do kernel é a seguinte estrutura descrita através da qual os usuários podem navegar no código -fonte:
Visualizando e navegando o código -fonte do kernel Linux
Geralmente, quando instalamos o Linux, não incluímos o código -fonte. Podemos instalar o Linux e manter o código -fonte em nosso sistema. Mas a maioria dos usuários o descarta para baixar uma imagem ISO menor. Afinal, você pode baixar o código -fonte mais tarde se precisar.
Se o código-fonte do kernel estiver presente em seu sistema, você poderá encontrá-lo no diretório/usr/src/linux-.
Você também pode encontrar o último código -fonte do kernel em https: // github.com/torvalds/linux.
Como você pode ver na captura de tela anterior ou no URL fornecido, dentro da árvore do código -fonte, podemos encontrar os seguintes diretórios e arquivos principais:
- arco: Este diretório contém códigos de origem para diferentes arquiteturas do sistema suportadas pelo kernel Linux.
- bloquear: O diretório da camada de E/S do bloco contém código para o gerenciamento de dispositivos de bloco (como discos rígidos, DVDs, discos de disquete, etc.) e seus pedidos.
- Certs: O diretório CERTS contém arquivos de certificados e sinais para permitir assinaturas de módulo para o kernel carregar módulos assinados. Isso pode ser útil para impedir que o código malicioso seja executado em módulos de kernel como rootkits.
- Cópia: Este arquivo tem informações sobre licenças para o código -fonte
- Créditos: Uma lista parcial de pessoas que contribuíram para o código -fonte do kernel Linux
- Cripto: Este diretório contém cifras criptográficas, que lidam com tarefas criptográficas e de compressão.
- Documentação: Como o seu nome sugere, este diretório inclui toda a documentação sobre todos os componentes do kernel.
- motoristas: O diretório de drivers contém código -fonte para drivers de dispositivo para suportar hardware. Dentro deste diretório, você encontrará subdiretos para cada hardware, como vídeo, bluetooth, etc. (qualquer hardware suportado).
- Fs: Este diretório contém fontes para sistemas de arquivos, incluindo sistemas de arquivos virtuais, além de sistemas de arquivos de leitura e gravação.
- incluir: Este diretório contém cabeçalhos C para arquivos do kernel, como funções para compilar código.
- iniciar: O diretório init contém código -fonte relacionado ao processo de inicialização e à inicialização do kernel Linux. O código -fonte é armazenado em um arquivo chamado Mainc.c dentro do diretório /init. O código inicializa o kernel e alguns processos iniciais.
- IPC: Comunicação entre processos, como sinais e tubos.
- Kbuild: O arquivo kbuild indica arquivos de objeto para vmlluz.
- Kconfig: O arquivo kconfig é usado para desativar ou ativar os recursos do kernel. Os usuários lidam com a execução do comando "Make Menuconfig".
- núcleo: O diretório do kernel inclui subsistemas principais, como o código de manuseio de sinal do agendador.
- lib: Este diretório inclui rotinas de biblioteca, operações comuns de string, operações dependentes de hardware, rotinas de depuração e código de análise da linha de comando.
- Licenças: Ele contém as licenças a serem aplicadas à fonte do kernel e aos arquivos de origem individual, que podem ter licenças diferentes. Dentro deste diretório, você encontrará quatro subdiretórios principais contendo licenças suportadas como LGPL-X, licença Apache, etc.
- Mantainers: O arquivo de mantenedores mostra a lista dos mantenedores do kernel e as instruções para enviar mudanças no kernel.
- Makefile: Este arquivo lê o .Arquivo de configuração e cria módulos e vmlluxux.
- milímetros: O kernel Linux gerencia hardware e memória virtual (swap). Este é o diretório em que o código -fonte para gerenciamento de memória é armazenado.
- líquido: O diretório líquido contém a pilha de rede. Aqui, você pode encontrar código relacionado a protocolos de comunicação, como IP, TCP e UP.
- Leia-me: O arquivo ReadMe refere -se a guias para desenvolvedores de kernel no diretório de documentação descrito anteriormente.
- Amostras: O diretório de amostras inclui kernel e arquivos de configuração Código de amostra.
- scripts: Aqui estão armazenados os scripts necessários para construir o kernel Linux.
- segurança: O subdiretório de segurança contém a estrutura de segurança Linux (Selinux) aprimorada por segurança.
- som: Aqui, você pode encontrar o subsistema de som, incluindo drivers de som, arquiteturas de driver e código relacionado ao som, como o ALSA.
- ferramentas: Aqui estão as ferramentas para o desenvolvimento do kernel compactado, como ACPI, CGROUP, Ferramentas de teste USB, módulo de teste VHOST, GPIO, IIO e Ferramentas SPI e ferramenta de política de energia intertimal.
- USR: Aqui, a USR armazena os initramfs, que enraíam o sistema de arquivos e o init no cache de memória do kernel. O código incluído permite que você execute o código no espaço do usuário no processo de inicialização quando o kernel não estiver totalmente carregado.
- Virt: O diretório de virtualização contém o módulo KVM (Kernel Virtual Machine) para hipervisores, incluindo arquiteturas.
Estes são todos os principais arquivos e diretórios incluídos no diretório de origem principal do kernel. Você pode navegar cada seção, dependendo de suas necessidades. Depois de entender o objetivo de todos os arquivos e diretórios listados acima, os subdiretórios são bastante intuitivos.
Conclusão
Como você pode ver, este artigo foi escrito para usuários novos e médios para entender o básico do kernel Linux. No entanto, é necessário algum conhecimento sobre desenvolvimento em Linux, hardware e características do sistema operacional. A palestra anterior é excelente como uma introdução à estrutura do kernel Linux e à distribuição Linux. Lembre -se de que o kernel Linux evolui periodicamente. É por isso que mantemos o conteúdo descrito anteriormente atualizado.
Esperamos que você tenha achado este artigo útil. Continue lendo Linuxhint para mais artigos profissionais do Linux.