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 :

Lire et écrire sur disque dur SATA


Sujet :

Programmation d'OS Assembleur

  1. #1
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    Points : 0
    Points
    0
    Par défaut Lire et écrire sur disque dur SATA
    Bonjour,

    je dois ajouter un code pour contrôler un disque dur depuis un système d'exploitation maison que je souhaite 100% assembleur. Sur internet je trouve ceci https://www.quora.com/How-do-I-read-...using-Syscalls, je n'ai personnellement pas besoin de système de fichier élaboré et d'outil de gestion des données du disque dur. Je cherche uniquement à écrire et lire sur le disque dur en assembleur. Le matériel est un processeur x86-64 Intel avec une interface disque dur SATA. Comment pourrais-je lire et écrire dans un disque dur avec ce matériel et uniquement en assembleur ? Aussi j'ai entendu parler de ça https://fr.wikipedia.org/wiki/Self-M...ing_Technology, est-ce quelque chose que j'aurais à gérer d'une quelconque manière pour garantir le bon fonctionnement de tout ?

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    C'est encore une chose qui paraît bien plus simple qu'elle ne l'est en réalité.

    Le plus simple est d'utiliser les fonctions du BIOS (UEFI) pour lire/écrire sur un disque.

    Si tu est motivé (très), tu peux aller voir de SATA-IO et lire les documents techniques : http://www.sata-io.org/technical-library

  3. #3
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    Points : 0
    Points
    0
    Par défaut
    Le lien propose des pdf promotionnels pour le SATA et je ne peux pas utiliser le BIOS étant en long mode.

  4. #4
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    Pour pour écrire sur un disque SATA il faut connaître le contrôleur AHCI. personnellement pour mon OS maison, je n'utilise que le contrôleur IDE et c'est déjà pas facile à coder. À ma connaissance il y a déjà un os en assembleur qui pilote les disque SATA, c'est un égyptien qui fait ça mais je ne me souviens plus le nom ni si ça fonctionne vraiment

  5. #5
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    Points : 0
    Points
    0
    Par défaut
    J'ai trouvé cette page http://wiki.osdev.org/AHCI, il y a un point de type programmatique que je n'ai pas su soustraire.

    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
    typedef volatile struct tagHBA_MEM
        {
        // 0x00 - 0x2B, Generic Host Control
        DWORD cap;  // 0x00, Host capability
        DWORD ghc;  // 0x04, Global host control
        DWORD is;  // 0x08, Interrupt status
        DWORD pi;  // 0x0C, Port implemented
        DWORD vs;  // 0x10, Version
        DWORD ccc_ctl; // 0x14, Command completion coalescing control
        DWORD ccc_pts; // 0x18, Command completion coalescing ports
        DWORD em_loc;  // 0x1C, Enclosure management location
        DWORD em_ctl;  // 0x20, Enclosure management control
        DWORD cap2;  // 0x24, Host capabilities extended
        DWORD bohc;  // 0x28, BIOS/OS handoff control and status
        // 0x2C - 0x9F, Reserved
        BYTE rsv[0xA0-0x2C];
        // 0xA0 - 0xFF, Vendor specific registers
        BYTE vendor[0x100-0xA0];
        // 0x100 - 0x10FF, Port control registers
        HBA_PORT ports[1]; // 1 ~ 32
        } HBA_MEM;
    C'est tout petit, que signifie 0xXX ici un exemple "// 0x28, BIOS/OS handoff control and status" ?

  6. #6
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    0x avant un nombre signifie que c'est un nombre hexadécimal. On peut aussi mettre un h a la fin (ça dépend du compilateur)
    0x5A = 5Ah par exemple

  7. #7
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    Points : 0
    Points
    0
    Par défaut
    Pardon je précise, que représente ces nombres hexadécimaux ?

  8. #8
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Si ta question est pourquoi " 0x28, BIOS/OS handoff control and status" et non 0x29 ben la j'ai envie de dire faut lire la doc
    Cela semble être des registre I/O et la faut savoir qu'une machine c'est complètement arbitraire , et d’où dépend de comment on pilote/manipule le périphérique.

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Voir le lien que j'ai indiqué plus haut : sata-io
    c'est comme pour le VESA qui normalise les cartes SVGA.
    Tu peux aller voir chez intel : http://www.intel.com/content/www/us/...-ata/ahci.html

    L'accès à tous les périphériques se fait en envoyant des données aux ports (IO)
    ces adresses et données dépendent du câblage et des circuits employés, il faut donc:
    - faire des drivers spécifiques à ton matériel
    - ou faire des drivers pour la majorité des systèmes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. disque dur sata II sur carte mère sata I
    Par davidc dans le forum Composants
    Réponses: 1
    Dernier message: 17/11/2007, 15h00
  2. probleme installation xp sur disque dur sata
    Par nemo69500 dans le forum Windows XP
    Réponses: 6
    Dernier message: 23/05/2007, 10h23
  3. Réponses: 6
    Dernier message: 12/04/2007, 21h57
  4. ecrire et lire sur disque dur
    Par united4life dans le forum C
    Réponses: 12
    Dernier message: 26/03/2007, 11h29
  5. [Disque dur]SATA II compatible sur port SATA I ?
    Par dj-julio dans le forum Composants
    Réponses: 9
    Dernier message: 21/08/2006, 13h16

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