hallo,
habe ein paar verständnisfragen zu linux und modulen..
es gibt sogenannte laufzeitmodule..was heisst das?
werden die erst nach bedarf(programmaufruf..) geladen.
ist das auch der grund, warum es bei programmstarts ein bisschen länger dauert?
ist das dann ein monolithischer kernel? treiber fix eingebunden und mittels modulen ansprechbar?
braucht der dann die initrd beim start?
linux hat ja datenbanken mit den modulen im system...
wenn ich die immer aktuell halte (updatelsusb...ääähh, tut der übers internet updaten oder was??) hat er dann immer die neuesten treiber im system?
mit modprobe modulname knn ich so ein modul dann dauerhaft laden (sodass es auch bei neuem systemstart noch geladen ist)
nachher depmod......funktioniert meines wissens nur in verbindung mit modprobe..nicht mit insmod
brauch ich da eigentlich nix manuell in der modules.conf auskommentieren?
wie sucht ihr den passenden treiber? i machs a bissl russisch..zumindest hab is durch herumprobieren so hinbekommen...
lsusb
lspci
hwinfo
lshw
das sind meine suchwerkzeuge...die leite ich in eine textdatei um und such ma das gerät (respektive den treiber) raus....wenn nicht vorhanden..dann mit knoppix..hat bisher immer funktioniert.
dort raussuchen(wahrscheinlich hat der eine grössere datenbank) und einspielen mit modprobe....aber wie kann das funktionieren, wenn die normale datenbank das modul nicht aufweist..ich meine (vorausgesetzt, die selbe version vom kernel) genügts da einfach nur ein paar buchstaben in die modules.conf zu schreiben??
wenn ja, störts mich auch nicht..
puh genug einmal....aber ich komm der sache schon näher
gruss günter
Linux 15.070 Themen, 107.540 Beiträge
Du meinst wahrscheinlich Kernelmodule.
Ein Kernelmodul ist eine Erweiterung des Linux Betriebsystemkernels. Man man Kernelmodule zur Laufzeit manuell nachladen. Dazu gibt man den Befehl "modprobe Modulname..." ein. modprobe prüft diverse Abhängigkeiten und lädt andere Kernelmodule bei Bedarf automatisch nach.
insmod kann auch Kernelmodule in den Speicher laden , prüft aber keine Abhängigkeiten.
Mit lsmod kann man sich alle geladenden Kernelmodule anzeigen lassen und mit rmmod wieder aus dem Speicher entfernnen.
Der Linuxkernel selbst ist in der Datei vmlinuz??? abgespeichert. Wenn man selbst einen Betriebsystemkern übersetzt, dann heißt diese Datei bzImage.
Im Prinzip sind diese Kernelmodule kompilierte Objectdateien die in den Speicher mit modprobe geladen werden und mit dem übrigen Linuxkernel verlinkt werden.
Ein monolitischer Betriebsystemkern ist nur diese Daten vmlinuz?? in der sich alle Treiber , Netzwerkprotokolle und andere Kerneloptionen befinden. Die alten Unixsysteme von AT&T und dieses BSD UNix hatten einen monolitischen Betriebsystemkern. Wohingegen der Linuxkernel modularisert ist. Dadurch wird der Betriebsystemkern flexibler. Man kann sich selbst einen Linuxkernel übersetzen und alle notwendigen Treiber und Netzwerkprotokolle monolitisch in den Kern kompilieren. Das wird hauptsächlich für Internetserver empfohlen , da monolitische Kernel nicht so leicht von rootkits angreifbar sind.
lspci listet nur die PCI Geräte auf und wandelt diese PCI Nummern in menschenlesbare Ausgaben um.
Wenn man dann eine Ausgabe sieht die den richtigen Chipsatz auflistet, kann man leichter den passenden Treiber heraussuchen und nachinstallieren.
lspci nutzt dafür irgendeine Datei.
Wenn man wissen möchte welche Treiber der jeweilige Linuxkernel mitbringt, dann ist es am einfachsten mal sich einen eigenen Linuxkernel zu konfigurieren.
Im Dokumentationsverzeichnis der Linuxsourcen gibt es auch noch sehr viele Informationen.
Das Problem ist die Vielzahl der Hardwarekomponenten bei PC Computer. Der Standardkernel der bei der Erstinstallation installiert wird, soll auf möglichst vielen Systeme laufen. Alle Treiber für die root Partition müssen monolitisch im Linuxkernel (Datei vmlinuz??) sein, da man ein Kernelmodul erst laden kann nachdem die root Partition gemouted wurde.
Man will den Linuxkernel aber nicht zu sehr mit Treibern überladen da es da auch Probleme geben kann, wenn zu viele Treiber im Linuxkernel sind ,für die im Rechner gar keine Hardware vorhanden ist. Mit Hilfe von den Kernelmodulen wird der Linuxkernel flexibler und es werden viele Treiber nur bei Bedarf geladen.
Dafür ist dann auch die Hardwareerkennung zuständig. Die Hardwareerkennung erkennt die eingebauten Chipsätze und lädt das passende Treibermodul automatisch zur Laufzeit nach. Ich kenne nur Debian . Bei Debian gibt es für die Hardwareerkennung verschiedene Systeme:
-KMOD im Linuxkernel (hat den kerneld ersetzt)
-udev für USB Sticks und -Festplatten und andere Geräte die zur Laufzeit an den Computer angeschlossen werden
-discover, erkennt veile Hardwarekomponennten schon beim Rechnerstart
Ich übersetze meist nach der Installation einen eigenen Betriebsystemkern um ihn besser an die eingebaute Hardwarekomponenten anzupassen und alle nicht benötigten Treiber zu entfernen.
PS: Wenn man selbst als Nichtprogrammierer einen Linuxtreiber installieren will, dann kann man diesen Treiber auch nur als Kernelmodul installieren, aber nicht monolitisch. Schon gar nicht kann man einen Linuxtreiber monolitisch installieren , wenn man nicht den Programmcode des Treibers bekommt.
danke für den ausführlichen bericht..
gruss günter
Einen eigenen Betriebsystemkern zu übersetzen ist gar nicht so schwierig und manchmal auch nötig. Ich hatte früher unter SUSE mit deren Standardkernel häufig Probleme. Ich nehme mal an das wenn zu viele Treiber im Kernel sind für die im Rechner gar keine Hardware vorhanden ist, das es dann immer wieder mal Probleme geben kann. Außerdem macht die RAM Disk manchmal Ärger.
Die RAM Disk die in der Datei initrd ist umgeht das Problem mit den Kernelmodulen . Man kann erst ein Kernelmodul laden wenn die root Partition gemounted ist. Deshalb werden viele Treiber in eine RAM Disk geladen damit diese Treiber schon beim Rechnerstart zur Verfügung stehen. Wenn man einen eigenen Kernel übersetzt kann man auf die Ramdisk verzichten , da man ja selbst entscheiden kann welche Treiber monolitisch und welche Treiber modular kompiliert werden sollen. Wenn jemand von einer SATA Festplatte bootet, dann muß man den Treiber für den SATA Controller und die SATA Festplatte monolitisch in den Kernel kompilieren. Und die Treiber für Sound und USB werden als Modul übersetzt, da diese Treiber erst nach dem Rechnerstart benötigt werden.
Ich habe ein sehr schönes Howto gefunden wo sehr viele Kerneloptionen erklärt werden:
http://de.gentoo-wiki.com/Kernel_manuell_kompilieren#Kernel-Optionen
Die Konfigurations des Kernels steht in der Datei .config. Diese Datei wird dialogbasierend erstellt in dem man den Befehl "make menuconfig" in der Konsole eingibt (vorher noch ncurses-dev installieren).
Bei FreeBSD gibt es die gleiche Datei für die Konfiguration eines eigenen Betriebsystemkerns. Dort wird diese Datei aber mit einem Editor bearbeitet. Das finde ich nicht so schön gemacht wie bei Linux.
hallo karstenw..
danke nochmal für die ausführungen (initrd..)
noch ne frage:
wenn ich nun ein gerät anschliesse
angenommen mit lspci scheint es zwar auf...aber der treiber nicht(meines wissens wird jedes gerät unter linx aufgezeichnet...egal ob mit oder ohne treiber)..
was mach ich..schieb eine live-cd rein..lspci und dort scheint dann der treiber auf.
was heisst das?
ich schreib mir den treiber auf..starte mein normales linux und mach modprobe treibername...danach depmod...fertig???
funktioniert das? auch wenn der treiber in meinem normalen linux nicht drin ist??
Das Programm lspci hat erstmal nichts mit den Linuxtreibern zu tun. Wenn man nicht genau weiß wie die Chipsätze heißen um den passenden Linuxtreiber nachzuinstallieren oder überhaupt um einschätzen zu können ob es einen passenden Treiber gibt, dann kann man lspci starten (von Knoppix CD 5.1.1 oder 5.2)
lspci greift laut manpage (man lspci) auf folgenden Dateien zu um die Chipsätz zu erkennen:
/usr/share/misc/pci.ids
/proc/bus/pci
Bei meinem Debian etch sind diese Dateien auch vorhanden.
Also lspci sagt erstmal nichts darüber aus ob ein passender Treiber im Linuxkernel ist !!!
Mit den Namen der Chipsätz kann man besser einschätzen ob es passende Treiber gibt. Die entsprechenden Nummern sagen nicht viel aus.
Wie schon gesagt, der Linuxkernel bringt schon eine Menge an Treiber mit. Man kann sich zu Not auch mal den Sourcecode von http://www.kernel.org besorgen und ihn selbst übersetzen.
Am einfachsten ist sich mal einen eigenen Kernel zu konfigurieren um selbst sich eine Meinung zu bilden, ob ein passender Treiber vorhanden ist. Da kannst du das Howto von gentoo nutzen.
Du brauchst den Linuxkernel gar nicht zu übersetzen, nur mal konfigurieren.
Wenn der Linuxkernel den Treiber nicht mitbringt, dann mußt du mal in deiner Distribution nachschauen ob eventuell ein passender Treiber als fertig installierbares Paket dabei ist. Bei Debian etch mit seinen mehr als 18000 Paketen ist dafür die Chance sehr gut.
Und dann muß man sich erkundigen , ob eventuell ein Projekt im Internet existiert, wo ein Linuxtreiber programmiert wurde.
Wenn dann immer noch kein Treiber vorhanden ist hat man Pech, aber man sollte sich immer vorher erkundigen ob passende Linuxtreiber vorhanden sind bevor man sich den Rechner kauft.
Man kann wie schon gesagt Linuxtreiber nachinstallieren, aber leider nur als Modul.
Die Probleme fangen meist an , wenn der Treiber monolitisch installiert werden muß. (SCSI- oder SATA- Treiber , wenn man von SCSI oder SATA booten möchte) Dazu ist ein normaler Anwender nicht in der Lage, da der Programmcode des Linuxkernels verändert werden muß.
PS: Ich emfehle derzeit die nforce Chipsätze. Im aktuellen Linuxkernel ab 2.6.18 sind Treiber (für Sound, Netzwerk , UDMA und SATA) auch für die nForce 590 dabei. Und dann eine NVidia Grafikkkarte, weil NVidia derzeit die besseren Linuxtreiber programmiert (als AMD).
Bei Notebooks würde ich zu einem aktuellen Lenovo Thinkpad T61 mit NVidia Grafikkarte greifen. Das kostet etwa 2000 €.
Ich habe da aber leider keine Erfahrung mit diesen Notebooks.
http://www.nvidia.de/object/linux_de.html
PPS: Ich schaue mich auch gerne mal nach Alternativen zu Linux um. Ich tendiere eh lieber Richtung Unix. Bei Solaris 10 von Sun Microsystem wurde ein sehr schönes Programm (Javaprogramm ?) entwickelt um herauszufinden ob ein passender Treiber im Solaris 10 Betriebsystemkern vorhanden ist:
http://www.sun.com/bigadmin/hcl/hcts/device_detect.jsp
das heisst also, dass mir lspci den namen des treibers ausgibt..egal ob ich jetzt einen im kernel habe oder nicht....das wäre ja e okay..
frage: wenn ivh lsmod aufrufe, zeigt er mir ja nur die "aktiven..benutzten" treiber an...stimmt das?
sehe ich nicht in der modules.conf ob ich den treiber drin hab : find modules.conf | grep treibername
gruss günter
Nein, lspci gibt erstmal nur die Namen der Chipsätze aus. Man könnte auch in das Handbuch des Motherboards schauen um die gleiche Information zu bekommen . Oft heißen die Treiber so wie die Chipsätze, aber leider nicht immmer.
Beispielsweise wird für den WLAN Atheros Chipsatz der Madwifi Treiber genutzt.
Ich versteh schon das das ein riesiges Problem ist. Die Kernelentwickler müßten mal genau dokumentieren welche Chipsätze von der jeweiligen Kernelversion unterstützt werden.
lsmod zeigt erstmal alle Kernelmodule an, die momentan im Speicher geladen sind (auch diejenigen die nicht aktiv sind) und mit dem Betriebsystemkern verlinkt sind.
Ein Kernelmodul kann ein Treiber sein, muß aber nicht unbedingt ein Treiber sein. Ein Kernelmodul ist allgemein eine Erweiterung des Betriebsystemkernes.
Die Kernelmodule werden in der Regel automatisch geladen durch die Hardwareerkennung. Da gibt es bei Linux verschiedene Systeme wie KMOD im Linuxkernel und udev für ansteckbare Geräte wie USB Sticks oder-Festplatten.
Ich habe bei meinem Debian auch den Eindruck das bei Verwendung des Standardkernels zu viele Treibermodule geladen werden für die im Rechner gar keine Hardware vorhanden ist.
Ich übersetze deshalb auch immer einen eigenen Betriebsystemkern und nehme nur die Treiber in den Kernel die auch wirklich gebraucht werden. Wahrscheinlich ist die Hardwareerkennung zu einfach programmiert, keine Ahnung.
Was meinst du mit modules.conf ?
Ist das eine spezielle Konfigurationsdatei bei deiner Distribution?
Bei meinem Debian etch gibt es im /etc Verzeichnis die modules Konfigurationsdatei. Die ist für das automatische Laden eines Kernelmodules bei jedem Rechnerstart vorgesehen. Wahrscheinlich wird sie nur benötigt wenn die Hardwareerkennung nicht richtig funktioniert und das jeweilige Modul nicht automatisch geladen wird.
PS: Wahrscheinlich sind viele Programmierer ein wenig betriebsblind. Die wissen gar nicht wie schlecht die Dokumentation ist. Das ist aber ein allgemeines Problem bei Programmierer. Sie verwenden die kostbare, knappe Zeit lieber für das Programmiern als für die Dokumentation ihrer Programme ;-).
in der modules.conf kannst du die treiber auskommentieren, die du brauchst....glaube, dass ist e standard bei linux
danke erstmal für deine ausführungen
gruss günter
