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

Programmation d'OS Assembleur Discussion :

[ld / ASM + C] Incompatibilité d'architecture


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut [ld / ASM + C] Incompatibilité d'architecture
    Bonjour. Par curiosité,j'essaie de faire un petit noyau qui boote et affiche bonjour ou un truc du style. Je suis donc le tuto ici:
    http://aaprog.free.fr/?page=os/firstcompile

    Le seul problème est que, après avoir tapé ces commandes
    nasm -s -f elf -w+orphan-labels -o start.o start.asm
    gcc -c -o main.o -m386 -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs main.c
    ld -T link.ld --oformat=elf32-i386 -Map map.txt -o kernel.bin start.o main.o
    j'ai l'erreur suivante que je n'arrive pas a faire partir (j'ai un processeur 64 bits) :
    ld: i386 architecture of input file `main.o' is incompatible with i386:86-64 output

  2. #2
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Bonjour,

    Quelles sont les réponses données par les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    file start.o
    file main.o
    file kernel.bin
    Il semblerait que ces 3 binaires n'aient pas été compilés pour la même architecture.
    Avant de poster, merci de consulter les règles du forum

  3. #3
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    Merci! main.o ne donne pas un bon resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
    Le seul truc c'est que je n'arrive pas a trouver comment compiler pour i386

  4. #4
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    À tout hasard ça change quelque chose si tu utilises -m32 au lieu de -m386 ?
    :wq

  5. #5
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    Non ça ne marche pas ...

  6. #6
    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, tu es sous Windows avec cygwin ou mingw je suppose ? Si c'est le cas, compile un compilateur GCC Cross pour i386 ( pourquoi pas i586 pour faire des choses intéressantes ? :p ), et si t'es sous Linux, essaie quand même

    Un petit lien pour t'aider : http://www.osdev.org/osfaq2/index.ph...Cross-Compiler .

    Un autre conseil, utilise fasm ( flatassembler.net ), il a l'air simple, produit des binaires "plates" pour les architectures x86 et est développé initialement pour la programmation OS
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  7. #7
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    désolé du retard.Je suis sous linux,mais pour tout te dire,sa m'arangerais bien de passer a Windows,je vais donc essayer ton lien et je vais essayer fasm.
    Merci!

    Edit:en fait,ne serait-il pas plus simple de programmer directement en x86_64?

    Edit2:en faite,cywing m'a permis de contourner le probleme,mais maintenant j'ai un autre probleme:
    undefined reference to 'kernel_start'.J'ai suivi scrupuleusement le tuto ici:http://aaprog.free.fr/?page=os/firstcompile,j'ai rien modifier au programme.

  8. #8
    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,

    d'abord je ne voulais pas te dire de passer sous Windows ^^'

    Donc si t'as toujours Linux, essaie d'y compiler un Cross GCC pour la plate-forme i386 ( http://www.osdev.org/osfaq2/index.ph...Cross-Compiler ) .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  9. #9
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    En faite,j'ai toujours linux,mais pas sur l'ordi que je peu utiliser le plus(dison que l'ordi de ma chambe a un DD de 10GO^^),donc utiliser Windows m'arrange.De plus,quite a utiliser linux,autant en installer un ayant déjas l'achitecture i386,sa prendra surement moins de temps.

    Bon je vais voir sa demain,merci de l'aide que tu m'apporte!

  10. #10
    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,

    ça ne dépend pas de l'OS mais plutôt du compilateur, en effet, le compilateur GCC standard ( ou n'importe quel autre compilateur ) produit du code POUR ton architecture, donc x86-64 .

    Or si tu veux faire du code 32 bits qui marchera en mode protégé et pas un code 64 bits qui nécessite la présence du Long Mode, tu dois faire un compilateur Cross GCC pour i586-elf ou travailler sur un PC avec un CPU 32 bits

    http://en.wikipedia.org/wiki/Cross_compiler , bonne lecture ^_^
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  11. #11
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    Je vais regarder.

    Merci de ton aide!

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/01/2012, 10h43
  2. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  3. Reboot en asm ou C++
    Par Juke dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 17/10/2002, 09h11
  4. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/08/2002, 20h43
  5. architecture
    Par pons dans le forum CORBA
    Réponses: 3
    Dernier message: 11/06/2002, 11h10

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