Pesquisar este blog

Novidades no blog

- Passamos das 120k visitas \o/

- Os repositórios ainda precisam ser organizados!

- Nova postagem: Organizando a casa;
- LOS versão 0.7 (acesse, em breve, no github.com);

terça-feira, 26 de março de 2013

Boot, fase 2 - Requisitos

Um ponto importante na construção do bootloader são os requisitos necessários que devem ser cumpridos para que possamos carregar o nosso kernel com segurança. São eles:

Tipo da CPU:

É extremamente importante verificar o tipo da CPU a fim de garantir que suporte o nosso kernel.

Provavelmente não iremos necessitar nada melhor que um 386, e dificilmente alguém vai tentar rodar o sistema em um computador inferior a um 486 (Em um 486 eu tenho certeza, porque ainda tenho um!). Mas mesmo assim temos que fazer essa verificação pelo bootloader para garantir.

Porem não é necessário que seja um processador muito evoluído, tendo suporte a 32 bits já é o suficiente para o kernel ser carregado e entrar em execução. Se no kernel utilizarmos alguma instrução mais avançada, podemos buscar o tipo de processador instalado na máquina e qual conjunto de instruções ele suporta, pelo próprio kernel.

Uma verificação simples de ser feita é pelos Flags da CPU, com essa verificação é possível detectar desde um 8086 até um 80586. E também se a CPU está em Modo Protegido ou Modo Real, o que é muito importante caso alguém tente carregar o sistema através do Prompt de Comando, ao invés de diretamente sobre o DOS.

Implementei um programa (DetecCPU) para testar a detecção da CPU, que será utilizada no bootloader. Este programa somente vê o tipo da CPU instalada (8086-80586), se está no modo Real/Protegido e sai.


Este programa pode ser executado no Prompt de Comando do Windows. Link para download dos fontes e binários no rodapé da página.

Quantidade de memória instalada:

Outra coisa extremamente importante é determinar a quantidade de memória RAM instalada, que somente pode ser feito de maneira segura através da BIOS. Pois é ela quem configura o Chipset para usar a memória RAM.

Inicialmente não teremos nenhum acesso à BIOS em nosso kernel. Portanto devemos detectar a memória disponível durante o boot. Porem não precisamos, também, que toda a memória instalada seja detectada, acredito que demoraremos para usar mais de 4 MB de memória. Isto nos possibilita usar as chamadas de BIOS mais simples e fáceis de interpretar durante o boot.

Provavelmente iremos implementar posteriormente um “driver de BIOS”, que nos permita utilizar as funcionalidades da BIOS no Modo Protegido, nesse ponto poderemos verificar se realmente conhecemos toda a memória disponível e assim atualizar os dados.

Implementei dois programas (DetecMem e DetecM2), o primeiro informa os dados de forma bruta, enquanto o segundo de forma trabalhada, simplificando o que devemos passar ao kernel durante o boot.



Não obtive sucesso ao executar esse programa no Prompt de Comando do Windows, mas ele funciona normalmente sobre o DOS.

Alias não tenho certeza se este problema que tive foi causado pelo Prompt ou porque eu executei o Windows dentro do VirtualBox e o programa dentro de um Prompt, pois isto tem acontecido com outros programas também.

Modo de vídeo atual:

Não menos importante é saber qual o modo do vídeo atual, pois inicialmente não teremos como configurar o vídeo de dentro do kernel e devemos utilizar o que foi definido pela BIOS. Implementei um programa (DetecCRT) para detectar o modo do vídeo.



Obs.:
  • Devido a uma falha na implementação, atualizei todos os downloads.
  • Somente aconselho rodar esse programa sobre o DOS puro, nunca dentro de um prompt do Windows, pois não é garantido que eles funcionem adequadamente.

Download dos fontes e binários (Atualizado em 30/03/2013):

Nenhum comentário:

Postar um comentário

Obs.: Após escrever seu comentário, inscreva-se por e-mail para seguir os próximos comentários. Ou assine a postagem de comentários (Atom).