1 / 16

AKBPII: Abschlusspräsentation

AKBPII: Abschlusspräsentation. NE2000: Hardware und Design eines prototypischen Treibers bearbeitet von Manuel Götz, Stefan Gabriel. Übersicht:. Aufbau einer NE2000-kompatiblen Karte - Allgemeines - Speicherlayout - Puffer - Register Design des Treibers - Allgemeines - Klassen

jaimin
Télécharger la présentation

AKBPII: Abschlusspräsentation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AKBPII:Abschlusspräsentation NE2000: Hardware und Design eines prototypischen Treibers bearbeitet von Manuel Götz, Stefan Gabriel NE2000: Hardware und Design eines Treibers

  2. Übersicht: • Aufbau einer NE2000-kompatiblen Karte - Allgemeines - Speicherlayout - Puffer - Register • Design des Treibers - Allgemeines - Klassen - Starten des Treibers und Initialisieren der Karte - Versenden von Paketen - Empfangen von Paketen • Beschreibung des erstellten Treibers NE2000: Hardware und Design eines Treibers

  3. Bei der Entwicklung nie als Standard gedacht gewesen Kein Shared Memory Zugriff über den IO-Port möglich Zugriff nur auf Speicher möglich Interner Zwischenpuffer: FIFO Für Lesezugriff auf Speicher: 9 Zugriffe auf Register nötig Schreiben: 7 Zugriffe auf Register Aufbau einer NE2000-Karte: Allgemeines Netz FIFO Speicher BS NE2000: Hardware und Design eines Treibers

  4. PROM: Ethernet-Adresse Puffer: - eingehende Pakete - zu sendende Pakete 0x0000 0x001F 0x4000 0x8000 0xC000 0xFFFF Aufbau einer NE2000-Karte: Speicherlayout PROM Aliased PROM Puffer Aliased PROM Aliased Puffer NE2000: Hardware und Design eines Treibers

  5. Puffer sowohl für zu versendende als auch für eingehende Pakete Zugriff durch Treiber über den IO-Port möglich (und nötig) Adressen zwischen 0x4000 und 0x8000 Unterteilt durch Register (TPSR, PSTART, PSTOP); gesetzt beim Initialisieren TPSR PSTART PSTOP Aufbau einer NE2000-Karte: Puffer Zu versendende Pakete Eingehende Pakete (Ringpuffer) NE2000: Hardware und Design eines Treibers

  6. Aufbau einer NE2000-Karte: (Ring-)Puffer • Current Pointer: Zeiger auf nächste zu schreibende Seite • Boundary Pointer: Zeiger auf letzte gelesene Seite (256 Byte) • Auf Umbruch ist beim Boundary Pointer selbst zu achten • Innerhalb von PSTART und PSTOP • Struktur des Headers eines eingehenden Pakets: Status Next Page Length (L) Length (H) NE2000: Hardware und Design eines Treibers

  7. Aufbau einer NE2000-Karte: Register • Wichtigste Register: - Command Register: Wahl von Registerseiten, Remote DMA aktivieren oder abschalten - Interrupt Status Register: Auslesen der Art der Interrupts NE2000: Hardware und Design eines Treibers

  8. Design des Treibers: Allgemeines • Ebene des Treibers (im TCP-IP-Schichtenmodell) TCP IP Ethernet Treiber Hardware (spezifisch) NE2000: Hardware und Design eines Treibers

  9. Design des Treibers: Klassen Meldet Karte im System an Ruft richtigen Konstruktor auf Hilfsklasse zum Lesen und Hilfsklasse zum Speichern Schreiben von Speicher von ein- und aus- und Registern gehenden Paketen NE2000Finder.java NE2000.java Register.java Message.java NE2000: Hardware und Design eines Treibers

  10. Design des Treibers: Starten des Treibers • NE2000Finder.java wird über boot.rc aufgerufen • Suche nach NE2000-kompatiblen Karten im Rechner • Erkennen der speziellen Karte • Prüfen, ob PCI- oder ISA-Karte gestartet wird • Starten des benötigten Konstruktors • Aufruf der open-Methode zum Initialisieren der Karte • Anmeldung der Karte im System NE2000: Hardware und Design eines Treibers

  11. Design des Treibers: Initialisieren der Karte • 13 initiale Schritte nötig • Die Wichtigsten sind: - Hardware-Reset - Einstellungen für DMA im DCR (Data Configuration Register) - Spezifizieren der anzunehmenden Pakete im RCR (Receive Configuration Register) - Konfigurieren des Ringpuffers (BNRY, CURR, PSTART, PSTOP) - Vorbereiten des Empfangs der gewünschten Interrupts durch Löschen von ISR (Interrupt Status Register) und Setzen von IMR (Interrupt Mask Register) - Schreiben der Ethernet-Adresse in PAR0-5 (Physical Address Register) - Setzen des Start-Mode im Command-Register NE2000: Hardware und Design eines Treibers

  12. Design des Treibers: Versenden von Paketen • 2 Methoden: transmit(...) und transmit1(...) • Prüfen, ob noch ein Versendevorgang aktiv ist • Schreiben der Anfangsadresse des Pakets im Puffer der Karte in das TPSR (Transmit Page Start Register) • Schreiben der Länge des Pakets in die TBCR0/1 (Transmit Byte Count Register) • Schreiben des Pakets in den Puffer • Starten des Versendevorgangs mit dem Command-Register Vorsicht: Synchronisieren von • transmit untereinander • Schreiben in den Puffer NE2000: Hardware und Design eines Treibers

  13. Design des Treibers: Empfangen von Paketen Auslesen aus dem Ringpuffer: • Nach Ankommen eines Pakets im Ringpuffer: Interrupt • Auslesen des Pakets aus dem Ringpuffer • Speichern in MultiThreadList • Wenn weitere Pakete: Schleife bis alles ausgelesen • Freigeben der Interupts • Nochmal Prüfen, ob Paket angekommen ist Übergeben an höhere Schicht: • Thread meldet sich beim Treiber an • Wird bei Ankommen eines Pakets geweckt • Liefert die gesamte Liste an die höhere Schicht • Legt sich wieder schlafen NE2000: Hardware und Design eines Treibers

  14. Beschreibung des erstellten Treibers • Verwirklicht: - Treiber läuft (getestet) für 2 Netzwerkkarten (Winbond und Realtek), trotz leichter Unterschiede in den Karten - Anwendung in PCI- und ISA-Modus möglich, hängt nur von den Startparametern in der boot.rc ab • Noch zu Realisieren: - Auslesen der Pakete nicht mehr im Interrupthandler, sondern in einem eigenen Thread: Interruptlatenzzeit wird gesenkt NE2000: Hardware und Design eines Treibers

  15. Beschreibung des erstellten Treibers • Größte Schwierigkeit: Ringpuffer, Setzen des Boundary Pointers • Problem: Boundary Pointer muss auf Seite vor Beginn des Pakets zeigen. • Grund: Sind Current Pointer und Boundary Pointer gleich, schließt Karte auf Pufferüberlauf. NE2000: Hardware und Design eines Treibers

  16. Vielen Dankfür ihre Aufmerksamkeit! NE2000: Hardware und Design eines Treibers

More Related