Eu quero entender o código do kernel do linux, e já o tenho analisado, mas não consigo entender completamente o que está acontecendo (estou me concentrando na parte de rede do kernel do linux), então qualquer um de vocês pode sugerir boas práticas de leitura do código C (ou qualquer outro idioma) em geral e específico da parte da rede do kernel do Linux. desde já, obrigado
c
linux-kernel
davidhaskins
fonte
fonte
Respostas:
Se você precisa aprender C lendo primeiro, o kernel do Linux não é o local onde você começaria: é um programa bastante atípico e de baixo nível (embora eu tenha achado bem estruturado).
Em vez disso, consulte o código-fonte para algum programa utilitário BSD, por exemplo, aqueles no OpenBSD . Leia sua página de manual para obter uma especificação semi-formal e de alto nível do programa.
Pegue uma cópia da leitura de código de Spinellis e / ou da prática de programação de Kernighan e Pike .
Por fim, leia um bom livro sobre os componentes internos do kernel do Unix ou Linux e comece a ler o kernel. (Eu achei o Design do sistema operacional Unix de Maurice J. Bach (ca. 1986) ainda um bom começo, mesmo para o Linux.)
fonte
O que fiquei surpreso ao ver quando tentei fazer a mesma coisa (que você deseja fazer) é encontrar tão poucos comentários relevantes (se houver) em um código tão complexo.
A documentação deve ser o código, certo, mas o recurso de comentários existe na linguagem de programação C por um motivo.
Se eles foram removidos, provavelmente é também por um motivo: para mantê-lo longe disso.
Eu sinceramente duvido que todos os desenvolvedores do kernel tenham que trabalhar nessa base de código limpa e minha opinião é que (pelo menos) o autor de qualquer "recurso" do kernel (como epoll, pelo bem da discussão) mantém uma versão privada do código COM todos esses comentários ausentes.
Por que eu acredito nisso?
Um desenvolvedor de kernel proeminente, tentando me convencer a liberar o código-fonte do servidor G-WAN como código-fonte aberto, me aconselhou a "dificultar a leitura possível".
Ele acrescentou que essa tática funcionou maravilhosamente para ele durante décadas em todos os seus projetos de "código aberto".
Manter o controle sobre qualquer parte crítica de um projeto de "código aberto" amplamente usado obviamente cria oportunidades quando suas receitas provêm exclusivamente de consultoria.
Portanto, voltando à sua pergunta, a coisa mais útil que você pode fazer para entender esse código é estudá-lo passo a passo e adicionar os comentários ausentes.
Então, progressivamente, começará a fazer sentido (e você descobrirá por que os comentários foram removidos).
fonte
i++ // increment i by 1
O que às vezes me ajuda é a depuração do código. A visualização de dados reais e os caminhos reais tendem a torná-lo mais compreensível para mim. Conforme apontado por outros membros, o código do kernel Linux é um ponto de partida muito ruim para a compreensão c.
fonte