Como começar a alterar o código-fonte do Linux para criar um sistema operacional personalizado?

Como começar a alterar o código-fonte do Linux para criar um sistema operacional personalizado?

Ouvi dizer que podemos personalizar o Linux (digamos, Ubuntu) como desejarmos, alterando seu código-fonte e podemos criar um sistema operacional totalmente novo. Baixei o código-fonte do kernel Linux do site www.kernel.org. Mas ao ver não consigo entender nada, são tantos diretórios, arquivos dentro de arquivos (pois acho que seria um único programa grande). Quero fazer isso como um projeto de faculdade e também quero contribuir com o Linux fazendo as alterações necessárias nele. Mas depois de fazer essa pergunta em alguns sites, eles disseram que o código-fonte do Linux é muito grande. Você pode tentar o minix. Agora estou muito confuso.

Por favor, me dê sugestões detalhadas sobre como devo iniciar esta jornada (de alterar o código-fonte para personalizar o Linux) com as etapas necessárias, junto com alguns livros para iniciantes.

Responder1

Bem-vindo ao unix.stackexchange.com!

Não há uma resposta fácil para sua pergunta edistantepessoas melhores do que eu escreveram livros inteiros sobre o 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 é algo bastante complexo! Para se ter uma ideia sobre o Linux, pense nos programas C que você escreveu até agora. O curso universitário médio tende a ter no máximo alguns milhares de linhas de C. Acho que meu projeto do último ano teve cerca de 30 a 35.000 linhas de C++. O kernel do Linux tem aproximadamente 13 milhões de linhas de código C.

Por que está tudo em arquivos separados? Projetos consideráveis ​​são armazenados em arquivos separados por razões logísticas e práticas. Considere carregar um arquivo de 13 milhões de linhas em um editor! Antes de abordar um grande projeto como o Linux, você definitivamente deve aprimorar suas habilidades em C até o ponto em que a pergunta “por que vários arquivos” seja respondida por si mesma. Você também deve ser capaz deleia o código C, não apenas escreva. (mais difícil do que parece à primeira vista)

Você definitivamente deve ser muito proficiente em C. O kernel é mantido por milhares de pessoas, e você será chamado para entender os idiomas C pessoais de cada uma delas (concedido, dentro dos padrões de codificação do kernel bastante rígidos, mas ainda assim - todo mundo tem seu próprio estilo de resolução de problemas).

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

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

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

A razão pela 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 como o Linux. O código é pequeno, mas ainda oferece funcionalidade completa. Afinal, as primeiras versões do Linux foram inspiradas no Minix.

Claro, o Minix tem menos suporte de hardware atualmente. E daí? Isso é uma vantagem! Os computadores modernos virtualizam muito bem. Use isso a seu favor: uma VM para executar o Minix é tão leve que tornará o desenvolvimento muito lento.

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 que Minix foi escrito para acompanhar, 'Sistemas operacionais modernos de Andrew Tanenbaum'.

Você também deve definir suas metas e definir seus termosprecisamente. Se a sua própria definição de sistema operacional for a da Microsoft (um sistema operacional com uma GUI e um conjunto completo de software), você poderá ter um projeto muito longo! Afinal, centenas de milhares de pessoas trabalharam desde a década de 1960 para nos trazer onde estamos agora.

Finalmente, lembre-se do grito de guerra do Cientista da Computação: 'nunca reinvente a roda!' (gostamos de abrir exceções quando aprendemos, é claro. E por diversão :))

Responder2

VerificarLinux do zeroprojeto. Como o nome sugere, contém todos os detalhes necessários para construir sua própria distribuição Linux.

Responder3

Acho que a primeira coisa que você precisa definir é "quais são as mudanças que você deseja trazer para o sistema operacional". Até que você decida isso, você realmente não chegará a lugar nenhum. Não existe um “caminho único” de aprendizagem.

Além disso, acho que você deveria definir melhor o que entende por sistema operacional. Uma grande parte (a maior parte) do código-fonte do Ubuntu está fora do Linux. Linux é apenaso núcleo, (às vezes é chamado deSistema operacional, especialmente nos meios acadêmicos, daí a confusão) e, portanto, tem a"simples"trabalho de:

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

Qualquer outra mudança aconteceria em um nível diferente, seja nos principais utilitários da área de usuário (geralmente chamados deútil), a GUI, os aplicativos básicos de uma distribuição, etc.

Se, no entanto, você ainda deseja aprender como hackear o kernel, talvez deva começar comessa questão, a pergunta mais votada neste site ;)

Responder4

Isso pode ser um pouco irrelevante, mas se você deseja aprender sobre o kernel do Linux e começar a desenvolvê-lo, você deve realmente dar uma olhadanovatos no kernel. É um site que fornece informações sobre a mecânica do kernel (como Alexios fez de uma maneira excelente), mas também permite que você escolha uma pequena tarefa para realizar (sendo o chamado zelador do kernel). É uma ótima maneira de aprender e eu recomendo fortemente!

informação relacionada