IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probléme d'execution de mon Kernel perso


Sujet :

C

  1. #41
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Merci pour votre réponse mais ça fait toujours le même résultat , mais j'ai encore découvert que l'espace vide n'est pas un espace vide , voilà le snapshot produit par BOCHS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>>Sÿ<<<ex86/Bochs VGABios 0.5d 29 Dec 2005
    This VGA/VBE Bios is released under the GNU LGPL
     
    Please visit :
     . http://bochs.sourceforge.net
     . http://www.nongnu.org/vgabios
     
    Bochs VBE Display Adapter enabled
     
    Bochs BIOS - build: 05/07/06
    $Revision: 1.160 $ $Date: 2006/01/25 17:51:49 $
    Options: apmbios pcibios eltorito
     
     
    Booting from Floppy...
    Chargement du Kernel ...
    C'est ce qui est entre >>> et <<< qui est bizarre .

    C'est moi qui a ajouté les <<< et >>>

  2. #42
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Un conseil pour commencer: dans ecrire(), utilise une couleur de fond différente de la couleur normale du fond. C'est bien pour savoir exactement où la fonction a écrit.

  3. #43
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Tu peux poster ton fichier kernel.bin ?

  4. #44
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Salut tous ,

    et merci pour vos réponses .

    Voilà j'ai fait une capture d'écran de BOCHS tout en spécifiant une couleur de fond différente ( magenta ) de celle par défaut dans le code du kernel .
    Et j'ai aussi uploadé le kernel ( voir fichiers joints ) .
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  5. #45
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Vous pensez qu'on peut faire le bootloader en C ?

  6. #46
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par millie
    Vous pensez qu'on peut faire le bootloader en C ?
    ça me parrait difficile, déjà il faut tenir dans les 512 ko et en plus il faut utiliser des instructions assembleur. Si c'est pour faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main (void)
    {
      asm("...");
      return 0;
    }
    Je n'en vois pas l'interêt.

    Pourquoi cette question ?

  7. #47
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Par simple curiosité, j'ai déjà vu pas mal de kernel perso comme le rédacteur du post, tout le kernel était en C, mais le bootloader en assembleur.

    Si un jour j'avais à en faire un, j'aurais preferé le faire en C qu'en assembleur, malheureusement, c'est plus difficile de gérer la taille du code binaire en C !

  8. #48
    Membre actif Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Points : 252
    Points
    252
    Par défaut
    Je ne crois pas que tu puisses le faire de toute façons en C.
    Le bootloader doit juste choisir le mode de fonctionnement et repasser le bébé au kernel... d'où l'ASM

    Il doit être le plus simple possible et si on a besoin de faire des choses compliquées, alors on fait un "minikernel" qui lui sera en C et qui donnera ensuite la main au vrai kernel.

  9. #49
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Bonjour à tous ,

    Désolé pour le retard , en effet , nous avons déménagé

    La taille d'un secteur est 512 octets et pas 512 ko !
    Il est bien possible de faire tout en C mais l'ASM est plus simple que le C , pourquoi ?
    Tout simplement , il est difficile de ne pas dépasser les 512 octets dans le binaire produit , et puis , il faut que le compilateur rempli l'espace restant avec des NOP ( pas d'opération , ça ne fait rien ) pour que le binaire fera bien 512 octets , bah ce qui est impossible pour moi , puisque la directive pour cette dérniére est introuvable !
    Et puis , le compilateur produira du code asm impropre , donc le binaire pourra ou ne pourra pas dépasser les 512 octets !
    Et puis , faire le secteur de boot en C ne servira à rien !
    Car il n'y aura pas de printf , faudra trouver un moyen pour appeler les interruptions ... c'est plus difficile que de le faire en ASM !
    Sinon , je crois qu'il est possible de le faire en HLA ( High Level Assembly ) puisque c'est de l'assembleur pur avec une syntaxe similaire à C .

    Bon , peut quelqu'un m'aider à résourdre le probléme avec ma fonction ecrire() ?

    PS : avez vous regardé la capture d'écran ?

  10. #50
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Bonjour ,

    peut quelqu'un m'aider ? je n'ai pas beaucoup de temps et je ne visiterai plus Developpez pendant une longue période ( déplacement de ma connexion internet ) .
    J'ai bien besoin d'une réponse pour que je puisse continuer mon travail pendant cette période .

    Merci beaucoup d'avance .

    A+ .

  11. #51
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Bonjour à tous ,

    je viens de découvrir que l'accés aux chars n'est pas celui qui pose des problémes , car j'ai testé sous windows avec un programme qui écrit les différents caractéres avec std::cout ( en C++ ) et ça marche , donc le probléme sera peut être un mauvais assignement à la mémoire vidéo ...
    Lorsque j'ai réalisé une fonction de scrolling qui défile l'écran d'un nombre de lignes données ( utile si on est arrivés à la 25éme ligne ) , elle effectue aussi un assignement à fb ( pointeur vers l'adresse de la mémoire vidéo ) et miracle elle marche bien !
    Donc la seule chose en question est peut être un mauvais type de la chaine de caractéres...
    Voilà le code source de ma fonction de scrolling :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #define VIDEOMEM 0xB8000
    #define SCREENSIZE 80*25*2
     
    void scroll(int);
     
    int kernel_main(void)
    {
    	scroll(3);
    	while(1);
    	return(0);
    }
     
    void scroll (int lines)
    {
    	unsigned char *fb = (unsigned char*) VIDEOMEM;
    	int pos=0;
    	while(pos<SCREENSIZE){
    		if(pos<SCREENSIZE-lines*160) fb[pos]=fb[pos+lines*160]; else fb[pos]=0;
    		pos++;
    	}
    }
    Merci beaucoup d'avance pour toute réponse .

  12. #52
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Je vais essayer l'option présentée dans cette page http://www.mega-tokyo.com/osfaq/Help!%20I%20cannot%20print%20to%20screen%20!%3F à la section "Can you find your string in the kernel image ?" .

  13. #53
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    J'ai trouvé la solution sur un autre forum sur le développement d'OS ( http://www.mega-tokyo.com/forum/index.php ) !
    En effet , la section .rodata n'était pas présente dans le script du linkeur ...
    Et puis , ce genre de manipulation ne marche pas sous windows car sous windows on manipule des objets PE et pas ELF , donc j'ai dû installer un compilateur Cross ( multi-targets ) .
    Je vous tiendrai au courant .

  14. #54
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par millie
    Par simple curiosité, j'ai déjà vu pas mal de kernel perso comme le rédacteur du post, tout le kernel était en C, mais le bootloader en assembleur.

    Si un jour j'avais à en faire un, j'aurais preferé le faire en C qu'en assembleur, malheureusement, c'est plus difficile de gérer la taille du code binaire en C !
    Euh voilà pourquoi l'asm est nécessaire : http://www.mega-tokyo.com/osfaq/ThingsYouCannotDoWithC

  15. #55
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Euh j'ai des problémes à compiler un cross-compiler , quelles sont les versions de binutils et gcc-core ( et gcc-g++ pour faire un kernel en C++ ) que vous avez compilés ? et puis quelles sont les versions que vous avez utilisées pour compiler votre cross compiler ?
    Moi j'ai téléchargé la version 2.16.1 de binutils et la version 3.4.4 de gcc .
    J'ai compilé binutils avec succés , mais c'est le gcc qui pose des problémes lors d'un " make all-gcc install-gcc " .
    Je précise que j'utilise gcc-3.4.4 et bintutils 2.16.91 sur Cygwin .

    Merci d'avance pour toute réponse .

Discussions similaires

  1. Problèmes de calage sur mon site perso avec les nouveaux navigateurs
    Par safeerbandali dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/07/2011, 23h28
  2. [Débutant] Problème d'execution de mon programme
    Par id_rima dans le forum C++Builder
    Réponses: 1
    Dernier message: 03/06/2010, 18h13
  3. [XL-2003] problème pour executer mon code sur un autre pc
    Par jess59 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/06/2009, 09h24
  4. Problème d'execution avec mon application
    Par jfdmagic dans le forum Installation, Déploiement et Sécurité
    Réponses: 9
    Dernier message: 29/05/2009, 13h23
  5. [VB6]problèmes pour executer mon projet en VB
    Par Walowalo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/04/2006, 19h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo