Pesquisar este blog

Novidades no blog

- Passamos das 30.000 visitas \o/

- Nenhum código novo :/

- LOS versão 0.6 (faça o download);

segunda-feira, 22 de abril de 2013

Boot, fase 8 - Tornando o processo inteligente, parte 1

Embora o bootloader seja capaz de carregar um kernel de 32 bits para a memória superior, isto ainda não é feito de forma inteligente, pois todos os parâmetros usados durante o processo estão no bootloader e são criados durante a compilação deste.

Se para uma nova compilação do kernel for necessário parâmetros diferentes, uma recompilação do bootloader também se torna obrigatória. Para evitar isto implementei no kernel uma tabela que contém todos os parâmetros necessários para o seu próprio carregamento, de forma que o kernel informa ao bootloader o que ele precisa.

Esta tabela fica logo após a instrução inicial, que é um JUMP para um rótulo mais adiante. Ela é composta de uma assinatura, que garante que somente o arquivo correto seja carregado, do tipo da CPU mínima necessária, do alinhamento de memória esperado, do ponto de carregamento, do tamanho da pilha e do heap.

O bootloader lê o arquivo de imagem do kernel, verifica a assinatura, obtêm os parâmetros, depois disso verifica os requisitos, calculando posições de memória a serem utilizadas. Se tudo estiver correto, ele copia o kernel para a memória e o executa como na versão anterior.

Um recurso interessante que implementei foi que quando o tamanho da pilha é fornecido como sendo ZERO, o bootloader irá coloca-la no ponto mais alto da memória, de forma que ela possa crescer livremente ocupando toda a memória. Enquanto que se um tamanho é fornecido, ela é colocada logo após o código, imediatamente antes do heap.

Dessa forma basta modificar tais parâmetros no próprio kernel e o bootloader irá utilizá-los durante o processo de boot.





Download dos fontes e binários:

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).