Warum globale Funktionen in Treibern static?

jccTeq

Erfahrenes Mitglied
Hallo,

hab hier 'nen Treiber für 'n Netzwerk-Device auf VME-Bus... wofür ist aber egal. Frage ist, wieso sind der Großteil der Funktionen in den verschiedenen Modulen des Treibers als "static" deklariert, obwohl sie sowieso Treiber-global sind? Was hat sich der Entwickler dabei gedacht? Ist das sinnvoll? Welchen Sinn hat das?

Wahrscheinlich hat der damalige Entwickler des Treibers sich dabei gar nichts gedacht. Ich kannte ihn, er machte häufiger sinnlose Sachen im Code.


Danke!

Gruß,
Hendrik
 
Okay, *grmpf* man googlet mal nach "static" und schon findet man heraus, daß es zwei verschiedene statics gibt. Also bedeutet das, daß die Funktion nur in dem einzelnen Modul bekannt ist. Gut. Dann wundert mich gar nix mehr.

Gilt das denn auch für globale Variablen? Sind globale Variablen, wenn sie static deklariert sind, auch nur in dem einen Modul bekannt, in dem sie deklariert wurden?

Danke...
 
Ja static Variablen sind nur in C nur in ihrem Scope sichtbar , d.h. innerhalb einer Funktion oder nur in dem C File in dem sie deklariert wurden.

static sagt quasi aus, dass es nur in diesem File sichtbar seien soll und nur in diesem File auch referenziert werden.
 
Danke!


Man lernt doch nie aus. Ich dachte immer, static wäre nur dazu da, daß eine Variable eine feste (also statische) Position im Speicher erhält, sodaß sie bei der nächsten Initialisierung mit dem gleichen Namen wieder an der selben Stelle landet und nicht überschrieben wird.

Gut zu wissen... das erklärt einiges.
 
...daß eine Variable eine feste (also statische) Position im Speicher erhält, sodaß sie bei der nächsten Initialisierung mit dem gleichen Namen wieder an der selben Stelle landet und nicht überschrieben wird.
Dieses Verhalten ist halt eine Ursache dieser Sache, die Variable wird halt im Speicher abgelegt wie eine globale Variable ist aber halt nur in ihrem "Scope" für den Compiler sichtbar und nicht aus jedem "File" referenzierbar.

Man kann das verwenden um z.B. zu verhindern dass es globaleVariablen in einem riesen Projekt nicht doppel gibt , z.b. in File X braucht jemand ne Variable FLAG die er nicht immer an die Funktionen übergeben will und halt in diesem File "global" haben will , wenn er nich static hinschreibt kann keiner mehr eine Variable FLAG definieren die global ist .
 
Okay, danke, das hab ich verstanden...

Kann mir jetzt zufällg noch jemand sagen, wo man Informationen zum Thema Treiberentwicklung findet, speziell bezogen auf Stolpersteine beim Konvertieren eines Treibers vom alten 2.2er Kernel auf einen 2.6er?

Und wo man Konzept-Informationen zu Treibern findet? Wo ich mir nämlich vorhin die Zähne dran ausgebissen habe, und was ich immer noch nicht ganz begriffen habe, das ist das Konzept mit den wait_event und wake_up Funktionen... also einen Prozess schlafen zu legen und wieder aufzuwecken. Hab ich das richtig verstanden, daß wenn man im Treiber die Funktion wait_event_interruptible aufruft mit einer Abbruchbedingung, daß der Prozess aus dem User-Bereich (Beispielsweise ifconfig auf einem net_device), welcher gerade auf den Treiber (besagten net_devices) zugreift erstmal schlafen gelegt wird, also warten muss, bis die Bedingung zutrifft? Und daß der Treiber in der Zwischenzeit weiter läuft, um zu prüfen, ob die Bedingung zutrifft? Und wenn die Bedingung dann zutrifft, wird der Prozess dazu veranlasst, weiter zu laufen, also wieder aufgeweckt? Hab ich das so richtig verinnerlicht?

Sch...ade is das kompliziert...

Gruß, Hendrik
 
Zurück