AKBPII: Abschlusspräsentation

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

description

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 - PowerPoint PPT Presentation

Transcript of AKBPII: Abschlusspräsentation

Page 1: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

1

AKBPII:Abschlusspräsentation

NE2000:

Hardware und Design eines

prototypischen Treibers

bearbeitet von Manuel Götz, Stefan Gabriel

Page 2: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 3: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

3

Aufbau einer NE2000-Karte: Allgemeines

• 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

Netz

FIFO

Speicher

BS

Page 4: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

4

Aufbau einer NE2000-Karte: Speicherlayout

• PROM:

Ethernet-Adresse

• Puffer:

- eingehende Pakete

- zu sendende Pakete

PROM

Aliased PROM

Puffer

0x0000

0x001F

0x4000

0x8000

0xC000

0xFFFF

Aliased PROM

Aliased Puffer

Page 5: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

5

Aufbau einer NE2000-Karte: Puffer

• 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

Zu versendendePakete

EingehendePakete

(Ringpuffer)

Page 6: AKBPII: Abschlusspräsentation

22.3.2004 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:

StatusNext PageLength (L)Length (H)

Page 7: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 8: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

8

Design des Treibers: Allgemeines

• Ebene des Treibers (im TCP-IP-Schichtenmodell)

TCP

IP

Ethernet

Treiber

Hardware (spezifisch)

Page 9: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

9

Design des Treibers: Klassen

NE2000Finder.java

NE2000.java

Register.java Message.java

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

Page 10: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 11: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 12: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 13: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 14: AKBPII: Abschlusspräsentation

22.3.2004 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

Page 15: AKBPII: Abschlusspräsentation

22.3.2004 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.

Page 16: AKBPII: Abschlusspräsentation

22.3.2004 NE2000: Hardware und Design eines Treibers

16

Vielen Dankfür ihre Aufmerksamkeit!