Question

Comment vous compilez C programme pour un valide ELF Format (ou format RAW) afin qu'il puisse être exécuté directement à partir de RAM sans OS ? On suppose que bootloader existe qui est capable de charger le code à un emplacement dans la RAM et commencer l'exécution à cette adresse. Pour être précis, ce qui devrait être le compilateur ( GCC ) drapeaux? Y at-il besoin d'un fichier carte?

Un exemple d'application HelloWorld serait le bienvenu:)

Juste pour préciser mon point,
laissez la principale méthode () une infinie vide en boucle pour veiller à ce qu'aucun OS appels de bibliothèque spécifiques ou standard sont utilisés. O / p désiré est un blocage. Avec l'habituel GCC Options du bootloader serait certainement pas réussir à charger l'exécutable dire il est invalide ELF format . Toutefois, en passant -dN à l'éditeur de liens rendre valide ELF . Plus d'options compilateur / éditeur de liens sont nécessaires pour faire pendre et pas écrasé !! Quels sont exactement les options du compilateur?

file.c:
int main()
{
    while(1);
}

Compilation
    gcc -c -nostdinc -fno-builtin file.c
    ld -dN -nostdlib file.o

charges Bootloader a.out RAM et exécute.

Était-ce utile?

La solution

Tout d'abord, il y a des limites à ce que vous pouvez faire, une fois bootloader termine son travail. Ces limitations sont en raison des choses suivantes: (En supposant que le chargeur de démarrage (par exemple: sans tête), vous emmène en mode protégé 32 bits) 1. Il n'y a pas la pagination activée. Vous devez l'activer. 2. Il vous ne pouvez pas interagir avec les périphériques que vous devez définir des gestionnaires pour IRQ.

Voici un lien classique que je l'habitude d'apprendre l'art de la programmation sur le métal nu ( http : //geezer.osdevbrasil.net/osd/index.htm ). En outre, il y a un lien de téléchargement sur la page ( http://geezer.osdevbrasil.net /osd/code/osd.tgz ). Le fichier tar contient des noyaux de démonstration avec un niveau croissant de complexité. En outre, vous pouvez regarder dans le fichier makefile (de linux.mak), et obtenir des drapeaux requis pour gcc.

J'ai ouvert un Makefile aléatoire et trouvé que les drapeaux suivants ont été utilisés: gcc: -nostdinc -fno-builtin ld: -nostdlib
(Un appel explicite à linker est fait, donc ld a également besoin d'un drapeau).

Le but flags est de dire gcc qu'il doit y avoir pas de lien fait avec la bibliothèque standard.

Autres conseils

coreboot peut charger ELF autonome. voir "DRAM Initializing":

http://en.wikipedia.org/wiki/Coreboot

http://www.osdever.net/bkerndev/index.php

Ce site répond à votre étape par étape question ...

Est-ce que vous vous rendez compte que si vous ne chargez pas un système d'exploitation, vous devez écrire un pilote de périphérique pour fonctionner avec tout appareil. Cela signifie pas d'écriture à l'écran sans avoir à écrire un pilote pour cette carte vidéo, pas de lecture du disque sans écrire un pilote pour ce disque particulier carte contrôleur de lecteur, pas accès au clavier, etc.

Vous pouvez regarder en quelque chose appelé mode Kiosque place . L'idée de base est que le système d'exploitation fonctionne, charge tout besoin pour votre application, charge votre application, et vous ne pouvez pas passer à une autre application.

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