Pergunta

Eu gosto de desafios de programação, e a gravação de um kernel parece um desafio de programação.

Infelizmente, os grãos são particularmente difíceis de testar, porque eles são, basicamente, o núcleo dos sistemas operacionais, e assim eles não podem ser facilmente correu em cima de um sistema operacional.

No entanto, o que eu sei sobre aplicativos chamados de Máquinas Virtuais que podem emular o hardware de um computador.

O que é o mais fácil/melhor forma para desenvolver e testar kernels(C+Montagem) usando Máquinas Virtuais?

Foi útil?

Solução

Enquanto BOCHS parece ser melhor para deixar você saber quando acontece algo de terrivelmente errado com o seu animal de estimação OS...é muito slooooow!Eu uso o VirtualPC gerais para o propósito de teste e BOCHS quando as coisas ficam turvas.

Além disso, você será mais do que provável que a inicialização do sistema operacional a cada 2 minutos, portanto, ajuda a ter algum tipo de forma automatizada para construir uma imagem de inicialização e fogo fora do Virtual PC.

Eu construí um disquete de inicialização do GRUB imagem com todas as coisas mais necessárias para obtê-lo para inicializar o Kernel.Bin da raiz.Eu uso um arquivo em lotes para copiar este arquivo para o projeto virtual directory, use GORDURA Gerador de Imagem para copiar o meu kernel para a imagem.Em seguida, basta iniciar o VirtualPC projeto.Vola!

Trecho do meu arquivo em lotes:

COPY Images\Base.vfd Images\Boot.vfd /Y
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y
START Emulators\VirtualPC\MyOS.vmc

Uma última sugestão:Definir o VirtualPC processo de prioridade baixa confiança em mim!Eu ficaria feliz em trocar algum código!

Ferramentas: DGJPP, NORMATIVA NASM, O GRUB.
Código: osdev.org, osdever.net

Outras dicas

Você pode estar interessado em olhar para helenos . É um dos microkernel scratch que foi portado para muitas arquiteturas (botas muito bem em bare metal) desenvolvido utilizando simuladores como Simics e QEMU.

Nós usamos um grub estática que é copiado para o ISO final durante o processo de construção. Algumas coisas só tem que ser dessa maneira até que o sistema operacional se torna auto de hospedagem. Eu recomendo não implementar a sua própria biblioteca userspace C a menos que você realmente quer fazer tudo a partir do zero .. você vai se tornar auto hospedagem muito mais cedo:)

Embora Simics é não-livre, eu recomendo (e seus construído em depuração / ferramentas de perfil) ao fazer o seu kernel. Uma vez que você tem algum tipo de console do kernel e logger no lugar, QEMU faz um trabalho muito bom.

É simples. Configurar uma máquina virtual, escreva seu kernel, copie-o para a máquina virtual, inicialização da máquina virtual.

Você precisa ser mais específico, se você quer um conselho mais específico.

Provavelmente apenas a criação de uma máquina (x86, eu acho), e, em seguida, investigar exatamente como ele se comporta durante a inicialização. Deve haver um ou mais arquivos no sistema de arquivos da máquina host que atuam como sistema de arquivos da máquina virtual, e então você precisa colocar algumas informações do setor de inicialização lá que faz com que seu kernel-desenvolvimento no boot.

Isso significa, naturalmente, que o sistema de compilação sobre o anfitrião tem uma maneira de escrever o kernel para o sistema de arquivos da máquina virtual, que pode variar em dificuldade.

Escolher um aleatoriamente, bochs parece suporte editar a mídia de inicialização a partir do exterior usando ferramentas padrão como dd etc.

A primeira pergunta que você precisa perguntar a si mesmo é o que a arquitetura de hardware que você está alvejando? Eu vou assumir por causa desta discussão que lhe são dirigidas a arquitetura IA_32, que provavelmente seria uma escolha sábia como há uma abundância de documentação prontamente disponível nesse processador.

Se você é verdadeiramente sério sobre este compromisso, então você certamente vai querer executar o seu ciclo de depuração / code / build / deploy contra um emulador ou VM. Alguém mencionou Bochs, que é muito popular. Se a velocidade de emulação é sua coisa, há também um emulador chamado Qemu que é mais rápido do que bochs.

Eu sugiro que o seu ambiente de desenvolvimento executado no Linux ou Windows, que novamente seria provavelmente uma escolha sábia, devido à documentação disponível para esses ambientes dev.

Make é seu amigo. Usá-lo para automatizar o processo Build / executar. Eu aconselho você a escolher os seus conjuntos de ferramentas / compiladores na frente, e passar algum tempo aprendendo-los bem. Ela vai lhe poupar a longo prazo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top