Question

J'aime les défis de programmation et écrire un noyau semble être un défi de programmation.

Malheureusement, les noyaux sont particulièrement difficiles à tester car ils constituent le cœur des systèmes d'exploitation et ne peuvent donc pas être facilement exécutés sur un système d'exploitation.

Cependant, je connais des applications appelées machines virtuelles qui peuvent émuler du matériel informatique.

Quel est le moyen le plus simple / le meilleur de développer et de tester les noyaux (Assemblage C +) à l'aide de machines virtuelles?

Était-ce utile?

La solution

Tandis que BOCHS semble être plus efficace pour vous avertir lorsque quelque chose ne va pas du tout avec le système d'exploitation de votre animal domestique ... il est vraiment minable! J'utilise VirtualPC pour les tests généraux et BOCHS lorsque la situation devient sombre.

De plus, vous devrez probablement démarrer le système d’exploitation toutes les 2 minutes. Il est donc utile d’avoir un moyen automatisé de créer une image de démarrage & amp; éteindre le PC virtuel.

J'ai construit une image de disquette de démarrage GRUB avec tout le matériel nécessaire pour qu'elle puisse démarrer Kernel.Bin à partir de la racine. J'utilise un fichier de commandes pour copier ce fichier dans le répertoire du projet virtuel. J'utilise FAT Image Generator copier mon noyau sur l'image. Ensuite, lancez simplement le projet VirtualPC. Vola!

Extrait de mon fichier de commandes:

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

Une dernière suggestion: définissez la priorité du processus VirtualPC sur low - faites-moi confiance pour celui-ci! Je serais ravi d'échanger du code!

Outils: DGJPP, NASM, GRUB.
Code: osdev.org, osdever.net

Autres conseils

Vous pourriez être intéressé par HelenOS . C'est un micro-noyau à partir de zéro qui a été porté sur de nombreuses architectures (bottes parfaites sur du métal nu) développées à l'aide de simulateurs tels que Simics et QEMU.

Nous utilisons un fichier statique qui est copié dans l'ISO final pendant le processus de construction. Certaines choses doivent être comme ça jusqu'à ce que le système d'exploitation devienne un hébergement autonome. Je recommande fortement de ne PAS implémenter votre propre bibliothèque C d'espace utilisateur à moins que vous ne souhaitiez vraiment tout faire à partir de rien .. vous deviendrez auto-hébergeant beaucoup plus tôt:)

Bien que Simics ne soit pas libre, je le recommande vivement (ainsi que ses outils de débogage / profilage intégrés) lors de la création de votre noyau. Une fois que vous avez mis en place une sorte de console de noyau et d’enregistreur, QEMU fait un très bon travail.

C'est simple. Configurez une machine virtuelle, écrivez votre noyau, copiez-le sur la machine virtuelle, démarrez-la.

Vous devrez être plus précis si vous souhaitez des conseils plus spécifiques.

Probablement juste configurer une machine (x86, je suppose), puis rechercher exactement comment elle se comporte lors du démarrage. Le système de fichiers de la machine hôte doit contenir un ou plusieurs fichiers qui agissent comme le système de fichiers de la machine virtuelle, puis vous devrez y insérer des informations sur le secteur de démarrage qui entraîneront le démarrage de votre noyau en développement.

Cela signifierait bien sûr que le système de compilation sur l'hôte dispose d'un moyen d'écrire le noyau sur le système de fichiers de la machine virtuelle, ce qui peut varier en difficulté.

Si vous en choisissez un au hasard, bochs semble support éditez le support de démarrage de l’extérieur à l’aide d’outils standard tels que dd, etc.

La première question que vous devez vous poser est de savoir quelle architecture matérielle ciblez-vous? Dans le cadre de cette discussion, je présume que vous ciblez l'architecture IA_32, ce qui serait probablement un choix judicieux, car la documentation disponible sur ce processeur est abondante.

Si vous êtes vraiment sérieux au sujet de cette entreprise, vous voudrez certainement exécuter votre cycle de débogage / code / génération / déploiement sur un émulateur ou une machine virtuelle. Quelqu'un a mentionné BOCHS, qui est très populaire. Si vous préférez la vitesse d’émulation, il existe également un émulateur appelé Qemu, plus rapide que BOCHS.

Je suggérerais que votre environnement de développement fonctionne sous Linux ou Windows, ce qui serait encore une fois un choix judicieux en raison de la documentation disponible pour ces environnements de développement.

Make est votre ami. Utilisez-le pour automatiser le processus de construction / exécution. Je vous conseillerais de choisir vos outils / compilateurs dès le départ et de passer du temps à bien les apprendre. Cela vous sauvera à long terme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top