Que partes do kernel Linux posso ler para me divertir? [fechado
-
06-07-2019 - |
Pergunta
A programação não é o meu trabalho principal, embora eu goste e às vezes seja pago por isso. Há muitos anos, tenho ouvido falar sobre Linux e meus amigos me mostraram muitos *nixes (ou *nici?), Embora eu fique com o Mac OS.
Você acha que há alguma parte do kernel do Linux que eu poderia gostar de olhar, que me ajudaria a entender o que é o material inteiro? Por exemplo, como o Linux é diferente de Darwin?
Eu cresci com o assembler e o DOS, então coisas como interrupções ou C de baixo nível não devem ser barreiras à compreensão. Mas, no final, estou mais interessado em conceitos de alto nível, como pilha de rosca ou networking - sei que diferentes sistemas operacionais os fazem de maneira diferente. E estou procurando algo divertido, fácil e agradável, como leitura noturna.
(Nota: fez um CW, apenas por precaução)
Atualização: procurei alguns documentos e comecei a ler:
Solução
Eu recomendaria olhar para Lxr. Isso facilita o acompanhamento do fluxo do código (você não precisa procurar cada função chamada - bem, você tem, mas o site faz isso por você).
Alguns pontos de partida, para a versão atual (2.6.30):
start_kernel()
- Pense nisso como o equivalente do kernel demain()
. Esta função inicializa quase todos os subsistemas do kernel; Siga -o para ver no código o que você vê rolando na tela durante a inicialização.- entrada_32.s -Sistema chama e interrupções (versão x86-32, que deve estar mais próxima do que você sabe; observe o uso do dialeto de montagem da AT&T em vez do dialeto Intel para o qual você pode estar mais acostumado).
- Head_32.s - O ponto de entrada do kernel. É aqui que o kernel começa após a mudança para o modo protegido; No final, vai ligar
start_kernel()
. - arch/x86/bota -O código de inicialização do modo real. Começa na montagem (Boot/Header.S), mas rapidamente entra no código C (começando em inicialização/main.c). A inicialização do modo real (principalmente chamadas de BIOS que precisam ser feitas antes de mudar para o modo protegido); é compilado usando um truque estranho do GCC (
.code16gcc
), que permite a geração de código real de 32 bits. - arch/x86/bota/compactado - Se você já se perguntou de onde vem a mensagem "Decomprimindo Linux ...", é daqui.
Outras dicas
Eu sempre achei o código de agendamento de tarefas um pouco:-//
Methinks, você precisa conseguir um hobby fora da indústria. Ou uma vida :-)
Os comentários no kernel podem ser bem engraçados. Há alguma dicas sobre onde encontrar os melhores no kerneltrap.
arch/sparc/lib/checksum.s-/* sol, você simplesmente não pode me bater, você simplesmente não pode. Pare de tentar, arch/sparc/lib/checksum.s: * Desista. Estou falando sério, vou chutar o arco de merda viva/sparc/lib/checksum.s- * fora de você, jogo, luzes apagadas. */
Linux-0.01.tar.gz é um kernel histórico e bom para começar
É simples, minúsculo e melhor para começar a ler
(Também tem vazio principal (vazio) em vez de start_kernel () lol: d)
Você pode querer ler ou passar um livro que descreva o kernel Linux antes de olhar profundamente no kernel Linux.
Os livros que vêm à mente são:
Você provavelmente terá mais de ler um livro sobre teoria do sistema operacional. No que diz respeito ao código -fonte: não tenho ideia, mas você pode fazer o download facilmente o Fonte do kernel Linux E veja se você consegue encontrar algo que apela.
Isso deve aumentar algum código interessante quando executado no diretório SRC:
grep -ir "fixme" *
Experimente também com outros termos cômicos, porcaria, merda, merda, pinguim, etc.
Você precisa redefinir a palavra 'diversão' em seu contexto. :)
Dito isto, o kernel do Linux pode ser um monstro demais para enfrentar. Você pode começar com alguns grãos acadêmicos ou mais primitivos para pegar o jeito do que está acontecendo, primeiro. Você também pode querer considerar o Jolix livro.
Foi recomendado por muitas pessoas que a v0.0.1 do Linux é a mais fácil de entender.
No entanto, se você está procurando uma boa fonte de kernel para ler, eu não iria com o Linux, é uma besta de um hack (sobre como dizer que as fontes do GCC são "divertidas"), em vez disso, você pode experimentar o Minix ou um dos BSDs (Darwin é basicamente um ramo do NetBSD IIRC) ou mesmo um dos muitos clones gratuitos do DOS, se todo o resto for um pouco assustador demais.
Tente ler o código que implementa esses dispositivos de caracteres: /dev /zero /dev /null /dev /completo
E talvez os geradores de números aleatórios se você estiver inclinado. O código é direto e mais simples do que todos os outros drivers de dispositivo, pois não toca em nenhum hardware.
Comece em Drivers/Char/Mem.*
Alguns truques simples que podemos aprender, como
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
...
#define min(x, y) ...
...
#define container_of
Por diversão, acho que você também pode ver o Minix, não é exatamente o Linux, mas os sistemas operacionais modernos da Tenenbaum são uma boa leitura.