Como começar a mudar o código fonte do linux para criar um sistema operacional personalizado? [fechadas]

15

Ouvi dizer que podemos personalizar o Linux (digamos, Ubuntu) como desejamos, alterando seu código-fonte e criar um novo sistema operacional. Eu baixei o código fonte do kernel do linux no site www.kernel.org. Mas, vendo isso, não consigo entender nada, há muitos diretórios, arquivos em arquivos (como acho que haveria 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. 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 com detalhes sobre como devo iniciar essa jornada (de alterar o código fonte para personalizar o Linux) com as etapas necessárias, juntamente com alguns livros de nível iniciante.

dubex
fonte
Qual é o teu objetivo? Como você gostaria de contribuir?
Spidey
Para fazer o meu próprio sistema operacional personalizado, alterando a sua (Linux) código-fonte ... e para saber como OS funciona e para se divertir também
Dubex
O kernel chamado Linux não é Gnu / Linux (Ubuntu, Debian, RedHat, Suse, etc distrowatch.com ). Entretanto, muitas pessoas usam confusamente o termo Linux para significar GNU / Linux + X11 +. No entanto, o Linux é apenas um dos kernels, que pode ser usado com o GNU e outros sistemas operacionais. Se você deseja modificar o Ubuntu ou semelhante, isso não é o mesmo que modificar o kernel chamado Linux.
Ctrl-alt-delor 15/07/2015

Respostas:

29

Bem-vindo ao unix.stackexchange.com!

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

Sobre o escopo do projeto: escrever um sistema operacional não é uma tarefa simples! Mesmo um sistema operacional propositadamente mínimo como o Minix é uma coisa bastante complexa! Para ter uma idéia do Linux, pense nos programas C que você escreveu até agora. O curso médio da universidade tende a ter alguns milhares de linhas de C no máximo. Acho que meu projeto do último ano foi de cerca de 30 a 35.000 linhas de C ++. O kernel do Linux tem aproximadamente 13.000.000 de linhas de código C.

Por que tudo está em arquivos separados? Projetos consideráveis ​​são armazenados em arquivos separados por razões logísticas e práticas. Basta considerar 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 ao ponto em que a pergunta "por que vários arquivos" se responde. Você também deve conseguir ler o código C , não apenas escrevê-lo. (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 a 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 - todos têm estilo próprio 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 o Linux é essencial. O kernel propriamente dito é bem pequeno! O que é inchaço:

  • 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 driver. Por exemplo, temos o VFS para sistemas de arquivos, a camada Event para dispositivos de entrada, etc.
  • Quantidades chocantes de código e arquivos compilados condicionalmente, atendendo às várias arquiteturas que executam o Linux (nem todas as máquinas Linux são um PC Intel, e algumas são incrivelmente diferentes do que você poderia esperar). O kernel precisa 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, alterar e conectar novamente. Existem inúmeras inter-relações. Em suma, 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 quanto o Linux. O código é pequeno, mas ainda oferece funcionalidade completa. Afinal, as primeiras versões do Linux foram inspiradas no Minix.

Certamente, o Minix tem menos suporte de hardware atualmente. E daí? Isso é uma benção! Computadores modernos virtualizam muito bem. Use isso para sua vantagem: uma VM para executar o Minix é tão leve que tornará o desenvolvimento um desastre.

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

Você também deve definir suas metas e definir seus termos com precisão . Se sua própria definição de sistema operacional é da Microsoft (um sistema operacional com uma interface gráfica do usuário e um conjunto de software completo), você pode ter um projeto muito longo! Centenas de milhares de pessoas trabalham desde a década de 1960 para nos levar aonde estamos agora, afinal.

Por fim, lembre-se do grito de guerra do cientista da computação: ' nunca reinvente a roda! '(gostamos de fazer exceções ao aprender, é claro. E por diversão :))

Alexios
fonte
1
iria [link] (www.linuxfromscratch.org) completo preenchimento meu sonho ... obrigado por mostrar interesse a minha pergunta
Dubex
O LFS é fantástico para aprender como o espaço do usuário de um sistema POSIX funciona. Até onde eu sei, é específico do Linux, portanto não lida com a modificação do kernel em uma direção incomum (como você faria ao criar seu próprio kernel). Mas está além do ponto, porque uma vez que seu kernel se afasta do POSIX, o espaço do usuário será incompatível e precisará ser portado ou reimplementado.
Alexs
Desculpe pelo mal entendido ... Mas eu não quis dizer que vou fazer meu próprio kernel (pois não sou muito talentoso :)). Quero fazer uma alteração no código-fonte que possa parecer diferente dos outros e que essa seja minha própria criatividade. Por exemplo: eu gostaria de algum tipo de animação com som (que eu fiz), na tela quando o linux (digamos, ubuntu) estiver inicializando com algum software de reconhecimento de voz instalado. Mais uma vez obrigado.
Dubex
1
Nesse caso, você está fazendo sua própria distribuição do Linux, e não um sistema operacional diferente. O LFS é a ferramenta certa para isso. Boa sorte!
Alexios #
1
@ Alexios, resposta muito boa e descritiva, obrigado.
0xAF
7

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

matcheek
fonte
4

Eu acho que a primeira coisa que você precisa definir é "quais são as alterações que você deseja trazer para o sistema operacional". Até você decidir isso, você realmente não chegará a lugar algum. Não existe um "caminho único" para aprender.

Além disso, acho que você deve definir melhor o que você entende por sistema operacional. Uma grande parte (a maior parte) 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:

  • gerenciamento de recursos.
  • comunicação com o hardware.

Qualquer outra mudança que aconteceria em um nível diferente, se é os utilitários núcleo userland (muitas vezes referida como utils ), a GUI, os aplicativos básicos de uma distro, etc.

Se, no entanto, você ainda está aprendendo a hackear o kernel, talvez deva começar com esta pergunta , a pergunta mais votada neste site;)

rahmu
fonte
desculpe por não ser tão específico ao fazer a pergunta ... mas, na realidade, não tenho idéia de tudo isso em detalhes. Na verdade, eu quero algum tipo de animação (com som) na tela quando o linux (por exemplo, o ubuntu) estiver inicializando ... por favor, me dê uma idéia sobre explorar todos esses campos e como avançar em qualquer campo específico (por exemplo, gui com a comunicação com o hardware) ) ...
Dubex
O @dubex começa com plymouth e analisa as bibliotecas do Linux para reproduzir som. SDL_mixer pode ser fácil.
sourcejedi
2

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

Tommy
fonte