Como começar a mudar o código-fonte do Linux para criar um SO personalizado?

14
Estou fazendo o trabalho de graduação em um CS Major, tenho conhecimento de nível médio em C, C ++ e Java e também aprendi alguns conceitos de sistema operacional (como estão no programa do meu curso). Ouvi dizer que podemos personalizar o Linux (digamos, o Ubuntu) como desejamos, alterando seu código-fonte e criando um novo sistema operacional. Eu fiz o download do código-fonte do kernel do Linux no site www.kernel.org. Mas vendo isso, eu não sou capaz de entender nada, existem tantos diretórios, arquivos dentro de arquivos (como eu acho que haveria um único programa grande). Eu quero fazer isso como um projeto de faculdade e também quero contribuir para o Linux fazendo as mudanças necessárias nele. Mas depois de fazer essa pergunta em algum site, eles disseram que o código fonte do Linux é muito grande. Você pode tentar o minix. Agora estou muito confuso.

Por favor, dê-me sugestões com detalhes sobre como eu deveria começar esta jornada (de mudar o código-fonte para personalizar o Linux) com as etapas necessárias, junto com alguns livros de nível iniciante.

    
por dubex 25.06.2012 / 15:52

4 respostas

28

Bem-vindo ao unix.stackexchange.com!

Não há uma resposta fácil para sua pergunta, e longe pessoas melhores do que eu escreveram livros inteiros sobre o tema do kernel Linux e sistemas operacionais em geral.

Sobre o escopo do projeto: escrever um sistema operacional não é uma tarefa simples! Mesmo um sistema operacional propositalmente mínimo como o Minix é uma coisa muito complexa! Para ter uma idéia sobre o Linux, pense nos programas em C que você escreveu até agora. O curso universitário médio tende a ser alguns milhares de linhas de C no máximo. Acho que meu projeto final foi de 30 a 35.000 linhas de C ++. O kernel do Linux é de aproximadamente 13.000.000 de linhas de código C.

Por que tudo está em arquivos separados? Projetos importantes são armazenados em arquivos separados por razões logísticas e práticas. Apenas considere carregar um arquivo de 13.000.000 de linhas em um editor! Antes de abordar um grande projeto como o Linux, você deve aprimorar suas habilidades em C até o ponto em que a pergunta "por que vários arquivos" responde a si mesma. Você também deve ser capaz de ler o código C , e não apenas escrevê-lo. (mais difícil do que parece a princípio)

Você definitivamente deve ser muito proficiente em C. O kernel é mantido por milhares de pessoas, e você será chamado para entender os idiomas pessoais de cada um deles (concedidos, dentro dos padrões de código do kernel razoavelmente rígidos, mas ainda assim - todo mundo tem seu próprio estilo de solução de problemas.

Depois de obter seu C fu, compreenda os sistemas operacionais. Isso ajudará você a entender o código. Nem todo o Linux é essencial. O kernel propriamente dito é bem pequeno! O que é inchado:

  • milhares de drivers de hardware para vários dispositivos.
  • Camadas de abstração para várias classes de dispositivos para simplificar as APIs e a gravação do driver. Por exemplo, temos o VFS para sistemas de arquivos, a camada de eventos para dispositivos de entrada, etc.
  • Quantidades chocantes de código compilado condicionalmente e arquivos que atendem às várias arquiteturas que executam o Linux (nem toda máquina Linux é um PC Intel, e algumas são incrivelmente diferentes do que você poderia esperar). O kernel tem que lidar com essas diferenças, e isso significa mais código.

Um problema que você encontrará imediatamente é que esses componentes não são tão fáceis de desconectar, trocar e reconectar novamente. Existem inúmeras inter-relações. Em suma, alterar bits do kernel é complicado.

O motivo pelo qual as pessoas sugeriram o Minix para você é simples: é um sistema operacional completo, mas não é sobrecarregado pelas necessidades de um sistema tão complexo quanto o Linux. O código é pequeno, mas ainda fornece funcionalidade completa. Afinal, as primeiras versões do Linux foram inspiradas pelo Minix.

Claro, a Minix tem menos suporte a hardware nos dias de hoje. E daí? Isso é um benefício! Os computadores modernos virtualizam muito bem. Use isso a seu favor: uma VM para rodar o Minix é tão leve, que tornará o desenvolvimento um diabo.

Se o seu projeto é construir um sistema operacional, você poderia fazer pior do que começar estudando o Minix. Você também pode comprar e ler o livro Minix foi escrito para acompanhar: ' Modern de Andrew Tanenbaum Sistemas Operacionais '.

Você também deve definir seus objetivos e definir seus termos com precisão . Se a sua própria definição de sistema operacional for da Microsoft (um sistema operacional com uma GUI e um conjunto de software completo), você poderá ter um projeto muito longo! Centenas de milhares de pessoas têm trabalhado desde os anos 1960 para nos trazer onde estamos agora, afinal.

Finalmente, lembre-se do grito de guerra da Computer Scientist: " nunca reinvente a roda! " (gostamos de fazer exceções ao aprender, é claro. E por diversão :))

    
por 25.06.2012 / 16:47
7

Verifique o projeto Linux From Scratch . Como o nome sugere, ele contém todos os detalhes necessários para construir sua própria distribuição Linux

    
por 25.06.2012 / 17:36
4

Acho que a primeira coisa que você precisa definir é "quais são as mudanças que você deseja trazer para o sistema operacional". Até você decidir isso, você não vai chegar a lugar nenhum. Não há "um caminho" de aprendizado.

Além disso, acho que você deve definir melhor o que você quer dizer com SO. Uma grande parte (uma parte importante) do código-fonte do Ubuntu está fora do Linux. O Linux é apenas o kernel , (às vezes é chamado de Sistema Operacional , especialmente nos círculos acadêmicos, daí a confusão), e, portanto, tem o trabalho "simples" de:

  • gerenciando recursos.
  • comunicando-se com o hardware.

Qualquer outra mudança aconteceria em um nível diferente, sejam os principais utilitários de usuário (geralmente chamados de utils ), a GUI, os aplicativos básicos de uma distro, etc.

Se, no entanto, você ainda estiver preparado para aprender como hackear o kernel, talvez deva começar com esta questão , a maior pergunta votada neste site;)

    
por 25.06.2012 / 16:18
2

Isso pode ser um pouco além do ponto, mas se você quiser aprender sobre o kernel do Linux e começar a desenvolvê-lo, você deve procurar em newbies do kernel . É um site que dá a você uma visão da mecânica do kernel (como o Alexios fez de uma maneira excelente), mas também permite que você escolha uma pequena tarefa para manipular (sendo o chamado zelador do kernel). É uma ótima maneira de aprender, e eu recomendo!

    
por 25.06.2012 / 22:57