2009-12-22 5 views
3

C'est une question difficile à poser parce que je suis sûr que je suis sur le point d'être bombardé de haineux commentant "si je ne peux pas écrire un système d'exploitation déjà, je ne serai pas jamais être capable d'écrire un système d'exploitation ". Eh bien, j'ai lu Modern OS de Tanembaum, Linux Kernel Development, Comprendre le noyau Linux et d'autres encore je ne sais pas si je peux écrire un système d'exploitation et seulement en avançant pour en écrire un je vais me rendre compte t sais. En plus de cela, aucun des livres que je lis ne prend même la peine de décrire la séquence de démarrage/la séquence de compilation.Essayer de compiler le code du tutoriel OS Dev

Quoi qu'il en soit, je déteste être négative, mais je voudrais juste construire le code exemple du tutoriel bkerndev ci-dessous et ont un système d'exploitation absolument minimum:

http://www.osdever.net/bkerndev/index.php?the_id=90

Vous pouvez télécharger le code source associé à un format zip à partir d'ici:

http://www.osdever.net/bkerndev/bkerndev.zip

Lorsque vous essayez de compiler ce noyau que vous exécutez dans toutes sortes d'erreurs causées par le fait que certains d'entre e Le code est cassé. Un autre utilisateur a été chercher de l'aide pour ce ici débordement de pile ici:

compiling my own kernel (not from linux-kernel source)

Bien que ne pas obtenir beaucoup d'aide. J'ai corrigé ces erreurs en ajoutant l'indicateur gcc fleading-underscores et en changeant certains des types de données. Vous pouvez voir ici mon code:

http://github.com/PhillipTaylor/farmix

Le code compilera et me laisser sucessfully avec un exécutable kernel.bin mais quand je démarre en elle de grub-je obtenir:

Erreur 13: Unrecognized ou Quand je prends kernel.bin directement à partir du fichier zip de l'auteur et que je l'exécute sur mon eeepc, cela démarre très bien, donc je pense que j'ai un problème avec la compilation du code correctement. L'auteur le construit à partir d'une machine Windows, je crois, mais j'essaie de le compiler en utilisant Fedora 10 i386 avec GNU GCC 4.3 et je pense que c'est ce qui cause le problème, je vous demande comment créer un exécutable valide noyau? Ai-je manqué la bonne cible ou le mauvais format binaire?

J'apprécierais vraiment quelqu'un m'a aidée dans cette embarrassante « première étape »

+2

Vous pourriez avoir plus de chance d'obtenir une réponse utile sur les forums OSDev: http://forum.osdev.org/ – Amber

+3

Je ne pense pas que vous allez obtenir beaucoup de traction avec « I J'ai ce gros tas de code et ça ne marche pas. " Vous feriez mieux de poser une série de questions sur des problèmes spécifiques (avec un peu de temps de travail entre les questions: les questions de tir rapide ne seront pas appréciées non plus). – dmckee

+0

Quelqu'un semble penser que c'est une bonne question. Maintenant, je pense qu'il travaille sur un bon problème, mais cela semble être une question inutile et peu claire. Envie de commenter? – dmckee

Répondre

1

Il s'avère que la ligne utilisée pour compiler l'application a été explicitement définie pour compiler au format "aout", ce qui était ce que le guide disait et ce que je supposais être vrai. Seul le fait de lire des trucs dans le guide "barebones" m'a convaincu que j'étais peut-être confus. Dès que j'ai changé cette ligne pour "nasm -f elf" tout a fonctionné.

C'est une balise dans mon référentiel qui pointe vers une version de travail de base du bkerndev code tutoriel (Comment écrire votre propre système d'exploitation) pour référence future et les personnes qui se trouvaient dans ma position ..

Il est livré avec un makefile pour la construction à partir d'un système Linux 32 bits.

http://github.com/PhillipTaylor/farmix/tree/bkerndev_tutorial_working

2

Mon commentaire ci-dessus n'a pas été très clair. Ce que je voulais dire, c'est "Qu'est-ce que la commande" file "rapporte sur votre kernel.bin par rapport au leur?". La sortie de l'éditeur de liens est un fichier binaire brut. Cela devrait commencer par quelques mots magiques que Grub reconnaît. Ils sont définis dans start.asm près de "mboot". Je soupçonne que le tien est différent du leur.

Je n'ai pas de nasm très pratique donc je ne peux pas construire, mais vous voudrez peut-être commencer par comparer les premiers mots du fichier .bin.

+0

quand j'exécute la commande de fichier contre le noyau des auteurs (travaillant) et mon noyau j'obtiens des "données" pour les deux ainsi il n'est point de problème mais regardant les fichiers binaires dans vim je peux voir le mien commence par le le mot "Hello World" et les auteurs ne le font pas. Le fichier start.asm fourni nous indique que le fichier a besoin d'un certain modèle d'octets pour être reconnu par Grub correctement, donc il semble que ce soit le problème. Je ne suis pas sûr de ce que je dois faire pour résoudre ce problème: – Philluminati

Questions connexes