Compilei o kernel do Linux baixando-o do kernel.org, coloquei-o na minha área de trabalho e abri o terminal. Mudei para a pasta linux-3.2.13, digitei mr proper
.
Então eu uso make menuconfig
para configurar meu arquivo .config. Depois de terminar e salvar, digito make
e o terminal começa a compilar os arquivos. Após 3 horas de compilação, fiquei me perguntando se fiz algo errado.
Minhas perguntas são:
- Fiz algo de errado?
- Se não, o que devo fazer a seguir?
- Qual será a saída (ex. .bin, .elf)?
- Meu objetivo final é fazer um sistema operacional que eu possa colocar em um CD, colocar em outro computador e rodar (nãoum sistema operacional Ubuntu com um kernel diferente).
Responder1
Fiz algo de errado?
Não parece. Compilar um kernel recente consome muitos recursos. Se sua CPU não for recente e você não tiver muita RAM, pode demorarmuitolongo.
Certifique-se de selecionar apenas os módulos/recursos que você realmente precisa e, se você tiver uma máquina multi-core/thread com um pouco de RAM, use a -jX
opção para make
que ela possa executar a compilação em paralelo. por exemplo
make -j4
usará quatro núcleos para a maior parte da construção.
Qual será o resultado?
Será uma imagem compactada do kernel. Não é um arquivo ELF, nem realmente um executável no sentido comum. Ele está em um formato apropriado para o bootloader da sua plataforma.
O que eu devo fazer a seguir?
Depende do que você está fazendo... (Vejaaquipara obter um COMO FAZER simples para instalar os módulos e a imagem do kernel, supondo que você esteja usando o Grub. Existem muitos outros disponíveis com uma pesquisa rápida, e é melhor você procurar na documentação da sua distribuição atual se você planeja realmente executar uma distribuição principal com seu novo kernel - existem requisitos de recursos e, potencialmente, especificidades do initrd que precisam ser ser levado em consideração.)
[Meu objetivo é construir meu próprio sistema operacional]
Receio que você esteja muito longe disso. Construir um sistema operacional é uma tarefa muito, muito complexa - e construir o kernel é uma das partes mais fáceis.
Eu sugiro que você vá atéLinux do zeroe leia o "livro" estável atual. Veja tambémrelógio de distribuiçãoe pesquise a categoria de distribuições "Baseada na fonte", algumas podem ser do seu interesse.
Responder2
Eu estava postando comentários grandes e pensei que seria melhor postar coisas como resposta, porque a caixa é maior e posso fazer waffles o quanto quiser. :) Espero que você desculpe meus delírios insanos.
Além disso, vou avisá-lo agora: sou um completo bastardo e vou cortar um pouco suas asas.
A primeira coisa que você precisa decidir é: quão boas são suas habilidades de programação? Você não pode escrever seu próprio sistema operacional sem boas habilidades de programação e um bom conhecimento de hardware.
A segunda coisa que você precisa decidir é:
- Você está fazendo uma distribuição Linux? (por exemplo, Debian, Ubuntu, Red Hat)
- Você está criando um sistema operacional baseado em Linux com um tempo de execução diferente? (por exemplo, Android, Maemo)
- Você está escrevendo um sistema operacional do zero? (por exemplo, VMS, CP/M, RT-11, Amoeba, Plan/9)
Antes mesmo de responder a essas perguntas, você deve verificar novamente para ter certeza de que definiu seus termos e sabe o que está fazendo.
1. Uma distribuição Linux (por exemplo, Debian)
Se tudo o que você deseja fazer é mais uma distribuição Linux, compilar o kernel é a menor das suas preocupações. O kernel praticamente se compila sozinho, desde que haja tempo suficiente e um computador grande o suficiente.
Aqui está umartigo que discute alguns dos aspectos de fazer distribuições Linux.
Por que isso é mais difícil do que você imagina: quanto mais funcionalidades você quiser adicionar à sua distribuição, mais difícil será fazer com que sua distribuição seja construída corretamente. Você terá que escolher entre reinventar a roda (criar seu próprio gerenciador de pacotes) ou usar uma roda existente (RPM? APT? Portas?). De qualquer forma, você estará realizando meses de trabalho chato reconciliando pacotes mutuamente incompatíveis, compilando, verificando se as coisas funcionam usando computadores diferentes com CPUs diferentes (não apenas Intel ou AMD), etc.
Dependendo do escopo, você pode acabar tendo que refazer sozinho o trabalho de milhares de pessoas. Você aprenderia muito com isso? Absolutamente! Mas você também aprenderia muito executando uma distribuição existente do Linux e, ocasionalmente, compilando alguns pacotes por conta própria para ver como as coisas funcionam. Por que construir a libc e centenas de outras bibliotecas se tudo o que você quer ver é como um servidor X é construído?
Pense desta forma: se você quiser aprender a montar um PC, você começaria com um balde de transistores e um ferro de solda, ou obteria componentes de PC e alguma documentação?
2. Um sistema operacional baseado em Linux (por exemplo, Android)
Existem alguns sistemas operacionais baseados em Linux com tempos de execução bastante diferentes do POSIX. Maemo, Meego, Android e outros sistemas operacionais (na maioria das vezes incorporados) vêm à mente.
A vantagem disso é que você não precisa escrever seu próprio kernel. A desvantagem disso é que você não só precisa projetar sua própria distribuição, mas também criar a maioria dos pacotes sozinho. Você pensou que compilar gcc
e libc
foi uma dor? Tente escrever seu próprio compilador C compatível com ANSI-Ceuma pilha completa de software desde o início. Passei anos escrevendo pequenas funções irritantes (provavelmente em Assembly) que fornecem pequenas quantidades de satisfação. Você também precisará aprender a maior parte dos detalhes internos do kernel do Linux e como ele se comunica com o espaço do usuário, porque essa interface é a base para a construção. Você deve saber de cor a maioria dos números do syscall ao final deste artigo. :)
Você aprenderia muito? Absolutamente! Mais do que você jamais imaginou ser possível. Será frustrante e irritante? Oh sim. Há uma razão pela qual o Android não foi desenvolvido por um cara solitário com um laptop nas horas vagas. Mesmo gcc
não foi construído dessa forma.
3. Um sistema operacional do zero
É aqui que você começa com um compilador Assembler e C e escreve seu próprio kernel - se o seu sistema operacional tiver um kernel. Não é universalmente o caso. Baixe todas as folhas de dados que encontrar para o seu hardware e pronto. Depois de ter um kernel básico em execução, você poderá ver o tempo de execução. Você pode escrever seu próprio tempo de execução ou certificar-se de que seu kernel seja parcial ou totalmente compatível com POSIX e então terá um tempo de execução GNU completo à sua disposição. Você 'apenas' terá que criar a primeira camada de bibliotecas e começar gcc
a rodar em seu novo sistema operacional.
Isso é gratificante? Surpreendentemente. Será difícil? Se os nomes Donald Knuth e Andrew Tanenbaum não significam nada para você, você provavelmente deveria reconsiderar. Haverá muito estudo teórico da ciência da computação. Há uma quantidade incrível de teoria necessária para criar um sistema operacional realmente do zero. Infelizmente, também existe um tédio incrível com os sistemas modernos.
Antigamente, você apenas gravava uma ROM com uma instrução JMP no lugar certo, conectava-a, ligava e pronto. Os sistemas modernos precisam de muito trabalho apenas para colocar o núcleo da CPU em funcionamento, configurar a memória, enumerar um dispositivo de entrada e iniciar um dispositivo de saída. Existem livros inteiros sobre cada uma dessas tarefas (tenho um livro sobreoriginalVGA com mais de 1.000 páginas - crescendo com máquinas de 8 bits, presumi que programar o VGA de 1987 seria simples e fiquei seriamente irritado, mas aprendi muitas coisas no processo!)
Então, você deveria?
Você absolutamente deveriatentar. Não tenha conceitos errados sobre “sucesso”, a menos que seus objetivos sejam definidos desde o início. Manter um sistema operacional/distribuição é uma tarefaabertotarefa que geralmente é realizada por grandes grupos de pessoas. Mas mesmo tentar fazer isso irá aprimorar suas habilidades e lhe ensinar novas.
Aliás, estou falando por experiência (muitas vezes dolorosa) com relação à maioria dessas coisas. Eu (co-)escrevi tempos de execução de baixo nível incorporados para algumas CPUs (estudos/trabalho/diversão) e estou escrevendo um sistema operacional de brinquedo para uma CPU de brinquedo no momento (isso é tudo por diversão).
Responder3
Siga as etapas fornecidas no tutorial a seguir para compilar um kernel no Ubuntu: