NetBSD: Werden Treiber bei Installation oder Boot gewählt?

Amin

Well-Known Member
Habe mal ne Verständnisfrage: wie bzw. wann werden eigentlich die Treiber ausgewählt? Werden diese bei der Installation in den Kernel gelinkt oder werden sie beim Booten des fertig installierten Systems dynamisch geladen?

Mir geht es eigentlich nur um den Hintergrund, falls sich eine Komponente ändern sollte. Z.B. eine andere Soundkarte oder gar ein anderes Mainbord. Würde das System beim nächsten Boot-Vorgang die veränderten Hardware erkennen und die Treiber entsprechend laden, weil alle Treiber auf der Platte sind? Oder muß man das System neu installieren, weil das System ursprünglich unter anderer Hardware installiert wurde?
 
Werden diese bei der Installation in den Kernel gelinkt oder werden sie beim Booten des fertig installierten Systems dynamisch geladen?
Hast du mal in Dokumentationen zu NetBSD geguckt? Ich selber verwende NetBSD zwar nicht, denke aber, dass manche Treiber, wie auch bei FreeBSD, miteinkompiliert werden können und manche beim Bootvorgang dynamisch geladen werden können.

"Neu installieren" musst du dein System nicht, die Welt neu zu brauchen reicht doch aus?

Grüße, Xantus
 
Hi, also eigentlich ist es so, wenn du alle Treiber mit rein kompilierst, dann werden die Komponenten automatisch erkannt und sind verfügbar.
Wenn du sie aber nicht mit rein kompillierst sondern als Module erstellst, dann must du manuell angeben welche du laden möchtest.

Neu installieren musst du eigentlich nichts, wenn du nicht gerade von i386 auf amd64 umsteigen möchtest.
Wenn du jetzt spezielle Compilerflags nutzt zB für i686 optimierst, dann kannst du es halt nicht auf einem i486 oder i386 laufen lassen. Dann must du halt neu kompilieren mit den entsprechenden Flags.
Deswegen bieten die meisten OSs ihr System optimiert für i386 an, denn das ist sozusagen der kleinste gemeinsame nenner.

Gruß, Daniel_S
 
Habe mal ne Verständnisfrage: wie bzw. wann werden eigentlich die Treiber ausgewählt? Werden diese bei der Installation in den Kernel gelinkt oder werden sie beim Booten des fertig installierten Systems dynamisch geladen?

Die Treiber werden in den Kernel gelinkt, d.h. meist beim übersetzen des Kernels oder eben als nachgeladenes Modul. Beim Booten sucht und findet der Kernel Hardware. Für jedes gefundene Stück Hardware überprüft er, ob er auch einen Treiber dazu hat.

Im Prinzip funktioniert das so, dass der Kernel beim Finden eines Stück's Hardware jeden Treiber aufruft und dem Treiber das Device Handle (*) des gefundenen Hardware Controllers übergibt. Der Treiber stellt dann von sich aus fest, ob er die Hardware unterstützt (das nennt man "probing"). Wenn ja, dann wird der Treiber an das Device Handle gebunden ("attached"). Jetzt kann's natürlich sein, dass der Treiber dafür sorgt, dass neue Hardware entdeckt wurde, z.B. wenn der USB Host Controller Treiber gestartet wird. Der ganze Prozess läuft so lange, bis entweder alle Hardware an einen Treiber gebunden wurde - oder keine neue Hardware gefunden wurde und es für die Hardware ohne Treiber keine Treiber im System gibt.

Den prinzipiellen Algorithmus kannst Du entweder in Tanenbaums "Modern Operating Systems", in McKusicks "Design of the FreeBSD Operating System" (bestimmt auch in der älteren, nicht-FreeBSD-spezifischen Ausgabe) oder in jedem besseren Buch über Betriebssysteme nachlesen. Apple hat auch eine ganz gute Online-Dokumentation wie das in Mac OS X funktioniert, auch sehr interessant.

(*) Eindeutige Repräsentation der Hardware in Software, d.h. im Kernel

Mir geht es eigentlich nur um den Hintergrund, falls sich eine Komponente ändern sollte. Z.B. eine andere Soundkarte oder gar ein anderes Mainbord. Würde das System beim nächsten Boot-Vorgang die veränderten Hardware erkennen und die Treiber entsprechend laden, weil alle Treiber auf der Platte sind? Oder muß man das System neu installieren, weil das System ursprünglich unter anderer Hardware installiert wurde?

Neu installieren wirst Du nicht müssen - wenn Du nicht gerade die Prozessorarchitektur wechselst ;). Möglicherweise ist der Treiber für die neue Hardware nicht in Deinem verwendeten Kernel enthalten, dann müsstest Du den Kernel neu übersetzen, oder eben ein Treiber-Modul nachladen, das ist alles. Wenn Du den NetBSD Standard Kernel verwendest und bei gängiger Hardware bleibst, dann wird Deine Hardware beim nächsten Mal booten bestimmt funktionieren.
 
Und noch was der GENERIC Kernel enthält alle Treiber, wenn du andere Soundkarte einbaust und du hast keine module erstellt ,wenn die Karte ünterstutzt wird wird die auch erkannt.


Gruss Menuhin
 
Danke erstmal für die Antworten. Aber leider bin ich jetzt nicht schlauer. Weil ihr immer von "bauen" geredet habt. Aber ich habe noch nie nen Kernel gebaut, sondern habe nur die NetBSD-CD eingelegt und installiert. Nicht mehr und nicht weniger.

@menuhin! Also den GENERIC-Kernel benutze ich ja automatisch, da ich nichts anderes beim Installieren ausgewählt habe. Aber das der Kernel alle Treiber enthält, kann ich mir schwer vorstellen. Würde doch ziemlich viel RAM verbrauchen? Liegen die Treiber nicht eher auf der Festplatte und der Kernel lädt die dynamisch bei Bedarf nach?
 
Bei der Standard Installation wird der fertige GENERIC Kernel geladen oder den Kernel den du bei der Installation ausgewählt hast ich hab immer den GENERIC genommen und der enthält alle Treiber und die werden erst beim booten sagen wir entpackt und mit der Hardware initialisiert hoffe hab mich richtig ausgedrückt für dich bedeutet dies du muss nichts machen wenn du aber aus irgendwelche Gründe den GENERIC Kernel anpassen willst musst du einen Kernel bauen z.B. für einen Scanner wenn du die Scanner Erkennennung für USB auschalten willst.
Du brauchst dir keine Gedanken machen wegen Arbeitsspeicher sprcih grösse des Kernels. Hoffe jetzt ist dir mehr klarer.


Gruss Menuhin
 
Aber das der Kernel alle Treiber enthält, kann ich mir schwer vorstellen. Würde doch ziemlich viel RAM verbrauchen? Liegen die Treiber nicht eher auf der Festplatte und der Kernel lädt die dynamisch bei Bedarf nach?

Nein, nachgeladen werden die sicher nicht. Jedenfalls nicht automatisch. Die Treiber werden beim Erstellen des Kernels mit in den Kernel aufgenommen - oder von Dir explizit nachgeladen via modload(8). Wenn ein Treiber nicht an ein Gerät gebunden wird, dann verbraucht er auch keine (Laufzeit-)Ressourcen - Dein Kernel braucht also nicht mehr RAM oder wird langsamer nur weil Du mehr Treiber integriert hast.

Naja, stimmt nicht ganz. Da der Treiber mit in den Kernel gelinkt wird macht es das Image des geladenen Kernels geringfügig größer. Ich denke, wir reden da über einige wenige (weniger als vier) Megabytes. Vernachlässigbar in Zeiten von gigabyteweie Arbeitsspeicher.
 
Zurück
Oben