2010-11-02 5 views
1

Je fais un système d'exploitation à partir de zéro. J'ai fait un bootloader Bonjour tout le monde en utilisant les tutoriels de l'Internet.appel shell à partir de bootloader

Je suis coincé à l'étape suivante cependant.

J'ai besoin d'appeler un exécutable (essentiellement mon code shell du code du bootloader ASM). J'ai fait des recherches sur Google et je n'ai rien trouvé de substantiel qui ait été expliqué dans le bon sens. Donc, est-ce que quelqu'un peut m'aider à connecter mon bootloader au shell? Un petit extrait de code à titre d'exemple serait génial (je comprends mieux par code). Je promets, je ne l'utiliserais que pour comprendre et ne rien copier.

Merci!

+0

Qu'attendez-vous que ce shell puisse faire? –

+0

Je veux que le shell exécute des commandes 2-3 très basiques. Dites le répertoire de liste ou quelque chose. Quelque chose de très sale. Quelle est la chose la plus simple que je puisse faire pour connecter mon bootloader à ce shell? Je ne suis pas sûr si cela aide ou non, mais j'ai l'intention d'exécuter ce chargeur de démarrage se connectant à la coque à partir d'un USB seulement. Je ne sais pas si cela serait utile, mais je pense que ça vaut la peine d'être mentionné de toute façon. – Sylar

Répondre

2

La partie qui va entre le bootloader et une application (comme un shell) est en quelque sorte ... substantielle. On pourrait dire que «faire un système d'exploitation à partir de zéro» signifie en réalité écrire cette partie, souvent appelée le noyau; par rapport à cela, le bootloader est très petit et simple. Prenons Linux comme exemple (sur 32 bits x86). Un shell Linux est une collection d'opcodes x86 qui s'attendent à être chargés à une adresse fixe dans la RAM (qui a été choisie lors de la compilation du shell, ou, plus précisément, de son lien). Le premier travail du noyau est de configurer le MMU afin que le shell ait cette vue de la mémoire. Le shell communiquera avec le monde extérieur en invoquant le noyau, et il le fera par l'intermédiaire des appels système . Sous Linux-x86, les appels système utilisent l'opcode int (cela déclenche une interruption logicielle et les arguments d'appel système sont généralement transmis dans certains registres). Certains des appels système importants incluent les appels read et write: du point de vue du shell, ce que vous tapez sur le clavier peut être lu à partir d'un fichier virtuel, indexé par un descripteur (un entier, avec la valeur 0 pour "standard"). contribution"). Le travail du noyau ici est d'accumuler des traits de touches (chacun déclenchera une interruption matérielle, que le noyau reçoit - le noyau est censé répondre aux interruptions matérielles - et se traduira en caractères) et les retournera à l'application lorsque l'application demande pour eux. De même, les données écrites par le shell sur ce que le shell considère comme "sortie standard" (descripteur 1) doivent être traduites par le noyau en caractères à afficher, ce qui implique de parler au matériel vidéo. Une bonne ressource pour apprendre à construire un système d'exploitation est Minix. Minix était initialement conçu comme un outil d'apprentissage, décrit en détail dans le livre de Tannenbaum "Operating Systems Design and Implementation". C'est opensource et gratuit. Faites-vous une faveur, téléchargez le code source Minix et achetez le livre (ou empruntez-le à une bibliothèque quelque part).

+0

On pourrait dire que le shell OpenFirmware n'a pas besoin de noyau; Cela dépend de ce que vous avez l'intention de faire. –

+0

Merci Thomas. Je comprends mieux la grande image maintenant. Mais ce n'est pas ce que j'ai l'intention de faire. Comme Ignacio l'a suggéré, j'ai besoin d'appeler un shell (fichier exécutable) du fichier bootloader. – Sylar