Estou interessado em modificar os componentes internos do kernel, aplicar patches, manipular drivers e módulos de dispositivo, para minha diversão pessoal.
Existe um recurso abrangente para hackers do kernel, destinado a programadores experientes?
linux
kernel
linux-kernel
Adam Matan
fonte
fonte
Respostas:
Uma jornada de mil milhas-código deve começar com um único passo. Se você estiver confuso sobre qual dos seguintes livros começar, não se preocupe, escolha qualquer um de sua escolha. Nem todos os que vagueiam estão perdidos. Como todas as estradas finalmente se conectam à estrada , você explorará coisas novas em sua jornada do kernel à medida que as páginas progridem sem atingir nenhum beco sem saída e, finalmente, se conectam ao
code-set
. Leia com atenção e lembre-se: o código não é literatura .O que resta não é uma coisa ou uma emoção ou uma imagem ou uma imagem mental ou uma memória ou mesmo uma idéia. É uma função. Um processo de algum tipo. Um aspecto da vida que pode ser descrito como uma função de algo "maior". E, portanto, parece que não é realmente "separado" dessa outra coisa. Como a função de uma faca - cortar algo - não é, de fato, separada da própria faca. A função pode ou não estar em uso no momento, mas é potencialmente NUNCA separada.
Algoritmo derandomizado por Solovay Strassen para teste de primazia :
Leia para não contradizer e refutar; nem acreditar e dar como certo; nem encontrar conversa e discurso; mas pesar e considerar. Alguns livros são para serem degustados, outros para serem engolidos e alguns para serem mastigados e digeridos: ou seja, alguns livros devem ser lidos apenas em partes, outros para serem lidos, mas não curiosamente, e alguns para serem lidos inteiramente , e com diligência e atenção.
O leitor deve ser bem versado nos conceitos de sistema operacional ; um entendimento justo dos processos de longa execução e suas diferenças com os processos com breves rajadas de execução; tolerância a falhas, atendendo a restrições de tempo real suaves e difíceis. Durante a leitura, é importante entender e
n/ack
as opções de design feitas pela fonte do kernel do linux nos subsistemas principais.Threads [e] sinais [são] uma trilha de miséria, desespero, horror e loucura dependente de plataforma (~ Anthony Baxte). Dito isto, você deve ser um especialista em autoavaliação C antes de mergulhar no kernel. Você também deve ter uma boa experiência com listas vinculadas, pilhas, filas, árvores de negros vermelhos, funções de hash, etc.
A beleza e a arte da fonte do Kernel Linux estão na ofuscação deliberada do código usada junto. Isso geralmente é necessário para transmitir o significado computacional que envolve duas ou mais operações de maneira limpa e elegante. Isso é especialmente verdade ao escrever código para arquitetura de vários núcleos.
Vídeo Palestras em Tempo Real Sistemas , agendamento de tarefas , memória de compressão , barreiras de memória , SMP
Sua tarefa é basicamente estabelecer uma interface de comunicação de alta velocidade entre o dispositivo de hardware e o kernel do software. Você deve ler a folha de dados / manual de referência de hardware para entender o comportamento do dispositivo e seus estados de controle e dados e canais físicos fornecidos. Conhecimento de Assembly para sua arquitetura específica e conhecimento razoável de VLSI Hardware Description Languages como VHDL ou Verilog o ajudarão a longo prazo.
P : Mas, por que tenho que ler as especificações de hardware?
R : Porque, "existe um abismo de carbono e silício que o software não consegue superar" - Rahul Sonnad
No entanto, o exposto acima não representa um problema para os algoritmos computacionais ( código do driver - processamento na metade inferior ), pois ele pode ser totalmente simulado em uma máquina universal de Turing . Se o resultado calculado é verdadeiro no domínio matemático , é certo que também é verdadeiro no domínio físico .
Palestras em vídeo sobre drivers de dispositivo Linux (Lec. 17 e 18), anatomia de um driver KMS incorporado , controle de pinos e atualização GPIO , Common Clock Framework , escreva um driver Linux real - Greg KH
Compreender um passo a passo de pacote no kernel é a chave para entender a rede do kernel. Entender isso é essencial se queremos entender os aspectos internos do Netfilter ou IPSec e muito mais. As duas estruturas mais importantes da camada de rede do kernel do linux são:
struct sk_buff
estruct net_device
Brian W. Kernighan, no artigo Unix for Beginners (1979), disse: "A ferramenta de depuração mais eficaz ainda é o pensamento cuidadoso, juntamente com declarações impressas criteriosamente". Saber o que coletar ajudará você a obter os dados corretos rapidamente para um diagnóstico rápido. O grande cientista da computação Edsger Dijkstra disse uma vez que os testes podem demonstrar a presença de bugs, mas não a ausência deles. Boas práticas de investigação devem equilibrar a necessidade de resolver problemas rapidamente, a necessidade de desenvolver suas habilidades e o uso eficaz de especialistas no assunto.
Há momentos em que você atinge o fundo do poço, nada parece funcionar e você fica sem todas as suas opções. É então que a depuração real começa. Um bug pode fornecer a interrupção que você precisa para liberar uma fixação na solução ineficaz.
Palestras em vídeo sobre depuração e criação de perfil do kernel , análise de despejo de núcleo , depuração de vários núcleos com GDB , controle de condições de corrida de vários núcleos , eletrônica de depuração
Em um sistema UNIX, tudo é um arquivo; se algo não é um arquivo, é um processo, exceto para tubos e soquetes nomeados. Em um sistema de arquivos, um arquivo é representado por
inode
um tipo de número de série que contém informações sobre os dados reais que compõem o arquivo. O sistema de arquivos virtual do LinuxVFS
armazena em cache as informações na memória de cada sistema de arquivos, à medida que é montado e usado. Muito cuidado deve ser tomado para atualizar o sistema de arquivos corretamente, pois os dados nesses caches são modificados à medida que os arquivos e diretórios são criados, gravados e excluídos. O mais importante desses caches é o cache de buffer, que é integrado à maneira como os sistemas de arquivos individuais acessam seus dispositivos de armazenamento em bloco subjacentes.Palestras de vídeo em sistemas de armazenamento , sistema de arquivos compatível com flash
A criptografia forma a base da confiança online. O hacking está explorando os controles de segurança em um elemento técnico, físico ou humano. Proteger o kernel de outros programas em execução é o primeiro passo em direção a um sistema seguro e estável, mas obviamente isso não é suficiente: também deve existir algum grau de proteção entre os diferentes aplicativos do usuário. As explorações podem ter como alvo serviços locais ou remotos.
Palestras em vídeo sobre criptografia e segurança de rede , namespaces para segurança , proteção contra ataques remotos , Linux embarcado seguro
Você pode não pensar que os programadores são artistas, mas a programação é uma profissão extremamente criativa. É criatividade baseada em lógica. A educação em ciência da computação não pode tornar ninguém um programador especialista, assim como estudar pincéis e pigmentos pode tornar alguém um pintor especialista. Como você já sabe, há uma diferença entre conhecer o caminho e percorrê-lo; é de extrema importância arregaçar as mangas e sujar as mãos com o código-fonte do kernel. Finalmente, com seu conhecimento do kernel assim adquirido , aonde quer que você vá, você brilhará .
Codificadores imaturos imitam; codificadores maduros roubam; codificadores ruins desfiguram o que recebem, e bons codificadores transformam isso em algo melhor, ou pelo menos em algo diferente. O bom programador solda seu roubo em um sentimento único, totalmente diferente daquele em que foi rasgado.
Palestras em vídeo sobre receitas de kernel
Linux_source_dir/Documentation/*
fonte
Iniciantes no Kernel Linux é um ótimo recurso.
fonte
Eu sugiro que você leia " Linux Kernel in a Nutshell ", de Greg Kroah-Hartman e " Understanding the Linux Kernel ", de Robert Love. Deve ler :)
fonte
Drivers de dispositivo Linux é outro bom recurso. Daria a você outra maneira de entrar no funcionamento interno. Do prefácio:
fonte
Veja O projeto de documentação do Linux . Particularmente o "Guia do módulo Linux Kernel".
fonte
O Linux Kernel 2.4 Internals é outro recurso online para se olhar. Parece ter uma abordagem bastante "básica", começando com a inicialização. Aqui o sumário:
E, para torná-lo ainda mais doce, há uma nova terceira edição do Linux Kernel Development de Robert Love e Slashdot tem uma revisão.
fonte
Comece com o Linux Kernel Primer de Claudia Salzberg et al. Bom para começar para iniciantes. O livro de Robert Love definitivamente não é o livro que os iniciantes deveriam começar. O último livro está acima do nível intermediário.
fonte