Autor Thema: Filesysteme  (Gelesen 7108 mal)

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« am: 02. February 2013, 16:18 »
Hi, eventuell möchte ich mich nachher mal daran setzen, meinem OS Zugriff auf eine Festplatte zu geben - einige Fragen habe ich dazu aber noch:

- Hier (http://www.lowlevel.eu/wiki/File_Allocation_Table) steht ja, wie die Festplatten z.B. bei FAT beschrieben werden, aber wie mache ich das? Mit outb an irgendeinem Port? Ich hab keine Ahnung.
- Kann man die Belegung der Bytes nicht auch selbst festlegen? Quasi ein eigenes Filesystem?

mfg :)

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 02. February 2013, 16:27 »
Zum beschreiben von SATA/SATAPI Festoplatten brauchst du: http://wiki.osdev.org/AHCI(Advanced Host Controller Interface) und das nutzt http://www.lowlevel.eu/wiki/PCI als Bus und http://www.lowlevel.eu/wiki/DMA damit der host controller die großen datenmengen ohne CPU auf der RAM lesen/schreiben kann.

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 02. February 2013, 16:31 »
Oooooookay das ist ja ganz schön viel. Wo fang ich denn da an?

Erst mal muss ich bei QEMU eine Festplatte simulieren lassen, oder? Wie geht das?

Dann, würde ich sagen, fange ich damit an, im OS die Festplatten zu "suchen", also irgendwie herauszufinden, wie viele Festplatten vorhanden sind, oder? Wie in etwa läuft sowas ab?

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 02. February 2013, 16:34 »
Dann, würde ich sagen, fange ich damit an, im OS die Festplatten zu "suchen", also irgendwie herauszufinden, wie viele Festplatten vorhanden sind, oder? Wie in etwa läuft sowas ab?
Steht da  :evil:
Erst mal muss ich bei QEMU eine Festplatte simulieren lassen, oder? Wie geht das?
Gute Frage!
« Letzte Änderung: 02. February 2013, 16:37 von Martin Erhardt »

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 02. February 2013, 16:56 »
Hmmm.. OK, aber den Code dort verstehe ich nicht wirklich... die nutzen AHCI_DEV_NULL, AHCI_DEV_SATA, AHCI_DEV_SATAPI, AHCI_DEV_SEMB, AHCI_DEV_PM, HBA_PORT_DET_PRESENT und HBA_PORT_IPM_ACTIVE, ohne sie zu definieren...

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 02. February 2013, 17:02 »
Da wird gecheckt was für ein Typ das ist die Makros können so sein wie du willst, weil die nur dazu dienen mit switch case gecheckt zu werden mit der HW haben die nichts zu tun und sind meiner Meinung sogar fast überflüssig wenn da nicht check_type als extra Funktion wäre.
Bsp:
#define AHCI_DEV_NULL 0
#define AHCI_DEV_SATA 1
#define AHCI_DEV_SEMB 2
#define AHCI_DEV_PM 3
« Letzte Änderung: 02. February 2013, 17:08 von Martin Erhardt »

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 02. February 2013, 17:08 »
OK, trotzdem schwer verständlich der Code... wenn ich die Funktion zum testen mal aufrufen würde, müsste ich bei void probe_port(HBA_MEM *abar) einen HBA_MEM übergeben - was genau ist das denn?

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 02. February 2013, 17:11 »
Du musst den ganzen artikel lesen und außedem die von PCI und DMA und noch die jeweiligen Spezifikationen. HBA hat bestimmt was mit PCI zu tun wenn ich schon Vendor_ID lese
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;
 
typedef volatile struct tagHBA_PORT
{
DWORD clb; // 0x00, command list base address, 1K-byte aligned
DWORD clbu; // 0x04, command list base address upper 32 bits
DWORD fb; // 0x08, FIS base address, 256-byte aligned
DWORD fbu; // 0x0C, FIS base address upper 32 bits
DWORD is; // 0x10, interrupt status
DWORD ie; // 0x14, interrupt enable
DWORD cmd; // 0x18, command and status
DWORD rsv0; // 0x1C, Reserved
DWORD tfd; // 0x20, task file data
DWORD sig; // 0x24, signature
DWORD ssts; // 0x28, SATA status (SCR0:SStatus)
DWORD sctl; // 0x2C, SATA control (SCR2:SControl)
DWORD serr; // 0x30, SATA error (SCR1:SError)
DWORD sact; // 0x34, SATA active (SCR3:SActive)
DWORD ci; // 0x38, command issue
DWORD sntf; // 0x3C, SATA notification (SCR4:SNotification)
DWORD fbs; // 0x40, FIS-based switch control
DWORD rsv1[11]; // 0x44 ~ 0x6F, Reserved
DWORD vendor[4]; // 0x70 ~ 0x7F, vendor specific
} HBA_PORT;
« Letzte Änderung: 02. February 2013, 17:16 von Martin Erhardt »

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 02. February 2013, 17:16 »
Ja das hab ich drin, aber wie übergeb ich das der Funktion?

Einfach so?
HBA_MEM xyz;
prove_port(xyz);
oder so ähnlich?  :?

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 02. February 2013, 18:21 »
Mittlerweile bin ich mir sicher, dass es einfach nur ein Pointer ist, nur welcher?

probe_port((HBA_MEM*)?????);

Ich finde das da nirgendswo...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 02. February 2013, 18:25 »
HBA_MEM xyz;

// Ich hab den Artikel nicht gelesen, aber ich nehme an, dass du hier noch was mit xyz machen musst.

prove_port(&xyz);
Dieser Text wird unter jedem Beitrag angezeigt.

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 02. February 2013, 18:27 »
Nehm ich auch an, ich hab aber keine Ahnung, was... :S

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 02. February 2013, 22:09 »
Statt PCI und AHCI kannst du auch mit Disketten und IDE anfangen. Das sind ältere und einfachere Schnittstellen, für die du weniger funktionierende Infrastruktur brauchst. Außerdem kannst du eine SATA-Festplatte am PCI-AHCI-Controller im Kompatiblitätsmodus auch als ISA-IDE-Festplatte ansprechen. Dafür reichen wirklich inb/outb auf bestimmte Ports, wenn du auf DMA verzichtest (was bei AHCI m.W. notwendig ist).

Gruß,
Svenska

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 02. February 2013, 22:13 »
Statt PCI und AHCI kannst du auch mit Disketten und IDE anfangen. Das sind ältere und einfachere Schnittstellen, für die du weniger funktionierende Infrastruktur brauchst. Außerdem kannst du eine SATA-Festplatte am PCI-AHCI-Controller im Kompatiblitätsmodus auch als ISA-IDE-Festplatte ansprechen. Dafür reichen wirklich inb/outb auf bestimmte Ports, wenn du auf DMA verzichtest (was bei AHCI m.W. notwendig ist).

Gruß,
Svenska
Ja aber mit DMA ist das halt performanter und zumindest ich will nicht zwo Festplattentreiber schreiben
« Letzte Änderung: 02. February 2013, 22:14 von Martin Erhardt »

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 02. February 2013, 22:19 »
Es ist aber einfacher. Was du willst, ist für andere nicht unbedingt der Königsweg... Außerdem kann dein PCI-AHCI-Treiber keine IDE-Festplatten ansprechen und die sind bei Qemu Standard, solange du nichts anderes explizit forderst. Du brauchst also sowieso zwei Treiber, wenn du AHCI speziell unterstützen willst.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #15 am: 04. February 2013, 18:10 »
Noch eine Frage zu dma. Ich habe gelesen, dass dma in neueren Computern nicht mehr eingebaut wird. Deshalb dachte ich mir alles nur noch über pci laufen zu lassen. Ist das nun möglich oder nicht?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 04. February 2013, 18:17 »
Noch eine Frage zu dma. Ich habe gelesen, dass dma in neueren Computern nicht mehr eingebaut wird. Deshalb dachte ich mir alles nur noch über pci laufen zu lassen. Ist das nun möglich oder nicht?
Was du meinst, ist ISA-DMA (welches über einen eigenen Controller läuft, nur 16 MB RAM adressieren kann und nur wenige DMA-Kanäle unterstützt). Solange dein Computer "PC-kompatibel" ist, ist das eingebaut. PCI unterstützt immer DMA, ob es auch genutzt wird (oder sogar genutzt werden muss), hängt von der betreffenden Hardware ab.

 

Einloggen