1. A breve aggiorneremo la piattaforma di Reboot per risolvere alcuni problemi con i plug-in, quindi chiediamo ancora un po' di pazienza, Lo staff di Reboot

[Guida] Come creare un sistema operativo - Il driver ATA (Parte 1)

Discussione in 'Software' iniziata da iostream, 1 Ago 2017.

  1. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.913
    Like ricevuti:
    1.639
    Leggere prima il tutorial precedente


    Questo sarà un tutorial, come tutti gli altri successivi di spiegazione


    Il driver ATA

    Fare operazioni con i driver ATA è abbastanza semplice, in fatti si tratta solo di scrivere e leggere io port.
    La specifica ATA si basa sulla ST506, che ha due porte (una dei dati e l'altra del comando)
    Per attivare un dispositivo messo in modalità slave bisogna scrivere su una porta, stessa cosa per attivare un master (e quindi togliere lo slave).

    I chip controller per l'ATA hanno sempre due bus per chip. Ci sono porte standard per leggerli. Il primo bus standard (bus primario) ha le porte da 0x1F0 a 0x1F7, e il secondo (bus secondario) quelle da 0x170 a 0x177 e le porte del registro di controllo e di quello stato sono 0x3F6 e 0x376.
    Se ci sono altri due bus (quindi un altro chip) le porte saranno da 0x1E8 a 0x1EF (primario) e da 0x168 a 0x16F (secondario) e le porte di controllo e di stato di quest'altro chip sono 0x3E6 e 0x366

    La specifica ATA consiglia, per inviare i comandi, di vedere i bit BSY e DRQ prima di provare a inviare il comando (mi scuso per la ripetizione). Questo significa che devi leggere il registro di stato del dispositivo prima di inviare il comando. Quindi bisogna prima impostare (sempre) il disco corretto e poi leggere lo stato. Si consiglia di leggere lo stato 5 volte e dare conto solo all'ultimo valore, visto che il driver ATA è abbastanza lento. Questo occupa circa 400 nanosecondi di tempo. Se non cambi lo stato del registro controllo, puoi anche leggere il registro stato una sola volta. Oppure, per velocizzare le operazioni dovete far sapere al driver che l'hard disk fa cose belle (o brutte) e che quando finirà metterà a 0 BSY e DRQ.

    In alcuni dischi bisogna pulire la cache manualmente inviando 0x7E al registro controllo.

    Ci sono tre tipi di settori "rotti":
    - Quelli che non si possono scrivere (permanentemente)
    - Quelli che non si possono leggere (permanentemente)
    - Quelli che non si possono leggere ma si possono scrivere (temporaneamente)
    Questi vengono salvati in una tabella

    Prima di inizializzare il driver bisogna controllare se il regular status register è a 0xFF, se lo è significa che non ci sono dischi. Attenzione però che il voltaggio può variare quindi far risultare il valore "oscillante".
    Verificare che ci siano le porte è uno spreco di tempo, perchè lo fa già il bios per noi.
    I bios hanno creato un comando standard per identificare i drive, ci sono anche altri metodi ma non li tratterò in questa guida.
    Per usare questo comando (IDENTIFY) si selezione il dispositivo (0xA0 per il master, 0xB80 per lo slave) alla porta drive select (0x1F6 sul controller primario). Poi imposta le porte IO Sectorcount, LBAlo, LBAmid, e LBAhi A 0 (porte da 0x1F2 a 0x1F5). E per oggi è tutto, ci vediamo domani per la seconda lezione su questo driver

    Parte 2 disponibile!
     
    #1
    Ultima modifica: 2 Ago 2017
    A zoomx, DoctorD90, alsacchi e 1 altro utente piace questo messaggio.
  2. MODD3R

    MODD3R Ospite

Sto caricando...

Condividi questa Pagina