Coragem e uma breve introdução sobre a reinvenção da roda
A construção de sistemas operacionais não é algo comum de se ouvir hoje em dia, mas, desperta o interesse de muitos para realmente saber como as coisas funcionam debaixo dos panos.
Sim, por trás da tela gráfica e até mesmo por trás da tela preta do terminal.
Abordarei hoje, a criação de um kernel do zero.
Kernel é o núcleo do sistema operacional. Ele controla, dependendo do paradigma escolhido, praticamente tudo em seu computador. Pode gerenciar Hardware (aquele Pendrive que você conectou na máquina, foi ele que reconheceu e o deixou acessível a você), distribui e organiza recursos de todo o sistema.
O kernel que criaremos em questão, será algo muito simples. Ele será capaz de ligar uma máquina de arquitetura x86 e escrever "hello world" na tela. Servirá apenas para entusiasmar sobre o assunto e mostrar que, com um pouco de esforço, é realmente possível fazer um simples sistema operacional.
O artigo é direcionado a todos os públicos. Desde o leigo e médio entendedor do assunto, até às pessoas mais avançadas. Se você não parou de ler até aqui, é um bom sinal, você está disposto a encarar o desafio!
Mas antes, vamos recapitular algumas regras:
- Para que nada dê errado, leia o artigo em sua respectiva ordem, deixe o autor leva-lo passo por passo, um de cada vez. Mesmo com um assunto extenso, prometo não ser chato.
- Caso tenha algum termo que você, por acaso, não conheça, pesquise sem medo. O intuito de tudo é realmente isso. Os dois lados aprenderem.
- Se algo não der certo, coisa que acontece muito quando o assunto é este, não desanime. Tente quantas vezes forem necessárias para seu sucesso.
- As linguagens escolhidas para a criação de nosso sistema operacional são C++ e Netwide Assembly (ASM). Caso não conheça, sugiro uma pesquisa elevada sobre isso.
- Rodar Kernels caseiros em máquinas reais, pode gerar efeitos colaterais graves. Então, pelo amor de Deus, não rode isso em uma máquina real. Todos os testes serão feitos dentro de máquinas virtuais que não oferecem risco nenhum a saúde de seu micro. Se você for doido o bastante para fazer isso, tire uma foto e me mande. Caso queira, faça por sua conta e risco.
Será divertido... Acredite!
Preparando o ambiente
Para conseguirmos fazer nosso sistema operacional, será necessário algumas ferramentas de programação instaladas em seu computador.
Para o artigo, foi utilizada a distribuição
Slackware 14 32 bits.
* Algumas pessoas têm problemas ao compilar o kernel em sistemas operacionais x86_64, então, é recomendado que você use um sistema operacional apenas 32 bits para a tarefa.
Foi realizado um teste com a distribuição
Ubuntu 13.04 x86_64 em uma máquina da universidade em que estudo. Funcionou perfeitamente, apenas necessitando instalar os pacotes necessários.
As ferramentas em questão, são (detalhe: tudo é feito com ferramentas livres):
- NASM (Netwide Assembler)
- G++ (GNU C++ Compiler)
- ld (GNU linker)
- Make (GNU Make)
- QEMU (Virtual Machine)
- Git (SCM)
Caso esteja na distribuição Ubuntu, ou qualquer outra derivada de
Debian, use o comando:
# apt-get install nasm g++ make qemu make git
* Nota: o ld não consta na lista, mas é instalado como dependência do
G++.
Caso contrário, existem vários artigos aqui no VOL sobre a instalação destas ferramentas, pois sairia mais ainda do escopo do artigo explicar meios de instalar em outros gerenciadores de pacotes mais complexos, ou mostrar meios de compilação das ferramentas citadas.
ErdOS: a proposta "tangível" antes de começarmos
O projeto
ErdOS (sim, é em homenagem a Paul Erdős) é a proposta de um sistema operacional apenas para o aprendizado. Nele, contém tudo o que faremos neste artigo.
Caso queira ver como seu trabalho ficará antes de começarmos, ou ter mais informações sobre o projeto, basta clonar o repositório em seu micro e simplesmente rodar o comando
make, para que tudo seja devidamente construído.
Detalhando mais, com nosso ambiente anteriormente pronto, só precisamos...
Já em seu respectivo diretório, criado exclusivamente para testes, faça o clone do repo...
git clone git@github.com:gabrielbiga/ErdOS.git
Depois de concluído, basta entrar como root e construir o sistema ErdOS.
Nota: o comando
make deve ser rodado como root, pois utiliza "mount" para editar a imagem do GRUB, portanto, sendo estritamente necessárias permissões elevadas:
su
# make
Ou:
sudo make
Ao término, se tudo ocorrer bem, será gerado 2 arquivos na pasta bin:
"erdos.img" é, nada mais do que uma imagem de disquete com seu kernel recentemente gerado, atrelado ao GRUB (nosso
bootloader). Você pode gravar num disquete físico ou testar com o QEMU:
# qemu-system-i386 -fda erdos.img
E "kernel.bin", é seu kernel compilado. Para testar o kernel sem precisar usar um bootloader, é completamente possível utilizando:
# qemu-system-i386 -kernel kernel.bin