Forum: PC Hard- und Software Linux-Kernel und Treiber


von Markus (Gast)


Lesenswert?

Angesichts des neuen 4.17-Kernels mal eine Newbie-Frage:

Was heißt es eigentlich, wenn man sagt "Die Kernel-Entwickler haben den 
Hardware-Support abermals deutlich verbessert, indem sie Dutzende neuer 
Treiber aufgenommen und viele existierende verbessert haben." ?

Was ist der Kernel eigentlich? Ist das eine einzige Datei? Mittlerweile 
müßte die ja riesengroß sein?
Warum ist es so wichtig, daß der Kernel alle möglichen Treiber 
beinhaltet? Unter Windows kaufe ich z.B. einen Drucker und installiere 
den notwendigen Treiber halt von CD oder Internet nach, wieso muß der 
unbedingt im Kernel enthalten sein?

von Dr. Sommer (Gast)


Lesenswert?

Markus schrieb:
> Was ist der Kernel eigentlich? Ist das eine einzige Datei? Mittlerweile
> müßte die ja riesengroß sein?

Das ist nicht eine Datei sondern viele Zigtausend.

Markus schrieb:
> Warum ist es so wichtig, daß der Kernel alle möglichen Treiber
> beinhaltet? Unter Windows kaufe ich z.B. einen Drucker und installiere
> den notwendigen Treiber halt von CD oder Internet nach, wieso muß der
> unbedingt im Kernel enthalten sein?
Du beantwortest deine Frage selbst. Diese Installation ist umständlich; 
nur unter Windows muss man nach derart veralteten Methoden vorgehen. 
Unter Linux schließt man das Gerät an und es funktioniert sofort. 
Außerdem ändert sich der Linux-Kernel sehr schnell, was "externe" 
Treiber schnell inkompatibel zu neuen Kernel-Versionen macht; alles was 
im Kernel enthalten ist wird mit aktualisiert. Das ermöglicht eine 
schnelle Innovation und Verbesserung des Kernels, während z.B. unter 
Windows alles abwärtskompatibel zu uralten Treibern sein muss.

von Jens G. (jensig)


Lesenswert?

>Was ist der Kernel eigentlich? Ist das eine einzige Datei? Mittlerweile
>müßte die ja riesengroß sein?

"Der Kernel" ist eigentlich eine Datei. Aber dieser Kernel enthält 
erstmal nur Basistreiber für irgendwelche HW des Mainboards, damit das 
Ding überhaupt erstmal startfähig ist.

Für andere Gerätschaften wie Drucker, Grafik, RAID, ... werden extra 
Treiber erst während der Laufzeit geladen, und docken damit an den 
Kernel an, um dessen HW-Verständnis für die aktuelle Situation zu 
erweitern. Und diese Treiber sind meistens schon beim Linux mit dabei. 
Zwar nicht direkt im Kernel, aber eben als dazuladbare Module (eben so, 
wie bei Windows).
Und da das Kernelmodule sind, heisen die dazugehörigen Entwickler eben 
Kernel-Entwickler ;-)

>Warum ist es so wichtig, daß der Kernel alle möglichen Treiber
>beinhaltet? Unter Windows kaufe ich z.B. einen Drucker und installiere
>den notwendigen Treiber halt von CD oder Internet nach, wieso muß der
>unbedingt im Kernel enthalten sein?

Was heist wichtig: wenn Linux das nicht mitbringt für irgendwelche HW, 
dann mußt Du Dir den Treiber dann genau wie unter Windows woanders her 
beziehen. Vielleicht mit dem Gerät mitgeliefert.
Aber Linux liefert schon von Haus aus reichlich Treiber mit. Oftmals 
aber auch nur 0815-Treiber, die oftmals nicht sehr speziell auf eine 
bestimmte HW abgestimmt ist, bzw. nicht deren speziellen Features 
unterstützt. Kann also sein, daß manche GraKa ihre Auflösung bzw. 
Farbtiefe nicht ausspielen kann, weil der Treiber nicht weis, wie man 
das anspricht, oder manche Drucker können nur als Postscript-Drucker 
angesprochen werden, ...  Kommt halt auf die HW an ...

von Jens G. (jensig)


Lesenswert?

Dr. Sommer (Gast)  schrieb:

>Außerdem ändert sich der Linux-Kernel sehr schnell, was "externe"
>Treiber schnell inkompatibel zu neuen Kernel-Versionen macht; alles was
>im Kernel enthalten ist wird mit aktualisiert. Das ermöglicht eine

Ich hoffe, das ist nicht wirklich so, sonst bräuchte man sich nicht zu 
wundern, wenn HW-Hersteller einen Bogen um Linux machen, sollten sie 
doch mal gewillt sein, Treiber, die spezieller Features der HW ausnutzen 
wollen, mit anzubieten. Die wollen ja nicht alle Furz lang ihre Treiber 
anpassen ...

>schnelle Innovation und Verbesserung des Kernels, während z.B. unter
>Windows alles abwärtskompatibel zu uralten Treibern sein muss.

Was ist denn daran so innovativ, daß die Schnittstellen oder 
Treibermodelle ständig neu gewürfelt werden (sollen), so daß alte 
Treiber nicht mehr wollen? Und wie paßt das damit zusammen, daß Linux 
doch angeblich auch auf jeder uralten HW läuft?

: Bearbeitet durch User
von DPA (Gast)


Lesenswert?

Markus schrieb:
> Was heißt es eigentlich, wenn man sagt "Die Kernel-Entwickler haben den
> Hardware-Support abermals deutlich verbessert, indem sie Dutzende neuer
> Treiber aufgenommen und viele existierende verbessert haben." ?

Jedes OS hat ein Kernel, ich nehme an du meinst den Linux Kernel, da 
dies meistens gemeint ist wenn läute von "dem Kernel" reden.

Hier ist das Repo von Linus:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/

Dort ist der Quellcode der sozusagen offiziellen momentanen 
Entwicklungsversion.

Linus übernimmt aber nur selten direkt Patches (=codeänderungen) von 
fremden, stattdessen gibt es viele Repos für die diversen Subsysteme:
https://git.kernel.org/ (Einige sind auch an anderen orten gehostet, 
torwald mirrort seinen auch auf github, und Redhat hat den für das DRM 
Subsystem irgendwo unter freedesktop.org, wenn ich mich recht erinnere)

Die Maintainer der Repos für die Subsysteme nehmen Patches von anderen, 
und diese senden die Patches von ihren Repos dann wieder zu Linus oder 
einem anderer Subsystem Maintainern. Irgendwann landet es dann in 
Mainline, wenn alles gut ist.

Die Ersteller von Patches müssen ihren Code auch warten und durch ihre 
Patches ausgelöste Probleme beheben. Wenn man sich nicht um seine 
Treiber usw. kümmern will, werden sie womöglich wieder entfernt.

> Was ist der Kernel eigentlich?

Ein Programm. Das Herz des OS. Dieser kümmert sich um die 
Hardwareinitialisierung, das laden der Treiber, das Laden und Ausführen 
von Programmen, und das Verwallten wann welcher Prozess läuft 
(scheduling), das Verwalten von Ressourcen wie z.B. Speicher, und das 
zur Verfügung stellen von Interfacen, um mit Ressourcen wie Dateien, mit 
anderen Prozessen, und mit der Hardware über high Level Abstraktionen 
interagieren zu können, ohne sich um die Details kümmern zu müssen.

> Ist das eine einzige Datei?

Es gibt Kernel mit Monolitischem Design, und es gibt Microkernel, die 
fast jede Aufgabe einem anderen Programm überlassen, und nur das 
nötigste tun.
Der Linux kernel ist als Monolithisch aufgebaut. Er kann als einzelne 
Datei gebaut werden, wenn man alle Module als Builtins verwendet. 
Meistens baut man aber die meisten Treiber und andere dinge, die nicht 
immer gebraucht werden, als separate Module, die man nachladen und 
entladen kann. Es handelt sich dann aber immernoch nicht um ein 
Microkernel, weil die Module keine eigenstendigen Prozesse bilden. Es 
gibt auch noch die Problematik von Binaryblobs, aber das ist wieder ein 
grösseres Thema.

> Mittlerweile müßte die ja riesengroß sein?

Wenn man wirklich alles einstellt und in eine Datei packt, wird es 
wirklich relativ gross. Die Repos von Linux sind aber immer noch kleiner 
als die von Windows. (Was keine positive Sache an Windows ist, im 
gegenteil.)

> Warum ist es so wichtig, daß der Kernel alle möglichen Treiber
> beinhaltet?

Treiber im Kernel werden in der regel an die Änderungen in neueren 
Versionen angepasst, und haben Maintainer die Fehler in diesen beheben. 
Die Interna des Kernels haben keine stabile API, wodurch off-tree Module 
schnell mit dem momentanen Entwicklungsstand inkompatibel werden. Es 
gibt jedoch einige Kernelinterfaces und Libraries, die ehemalige 
Aufgaben des Kernels mit einer stabilen API in den Userspace verlagern. 
Beispiele dessen wären z.B. libusb zur interaktion mit USB Geräten, und 
fuse zur Bereitstellung von Dateisystemen. Beide werden von 
Userspaceprozessen verwendet.

> Unter Windows kaufe ich z.B. einen Drucker und installiere
> den notwendigen Treiber halt von CD oder Internet nach, wieso muß der
> unbedingt im Kernel enthalten sein?

Zur Vermeidung von Fragmentierung, um sicherzustellen, dass diese auch 
in neuen Versionen noch gehen, damit diese alle an einem Ort sind & der 
Sourcecode gut und immer verfügbar ist, etc.

Jens G. schrieb:
> Ich hoffe, das ist nicht wirklich so, sonst bräuchte man sich nicht zu
> wundern, wenn HW-Hersteller einen Bogen um Linux machen, sollten sie
> doch mal gewillt sein, Treiber, die spezieller Features der HW ausnutzen
> wollen, mit anzubieten. Die wollen ja nicht alle Furz lang ihre Treiber
> anpassen ...

Das muss man nur, wenn er eben off-tree ist. Wenn er im Repo ist muss 
immer der sich um die Regressionen kümmern, der sie verursacht hat. Und 
wenn man eine Regression verursacht, gibt es eine wütende Nachricht von 
Linus.

von Markus (Gast)


Lesenswert?

Jens G. schrieb:
> Ich hoffe, das ist nicht wirklich so, sonst bräuchte man sich nicht zu
> wundern, wenn HW-Hersteller einen Bogen um Linux machen, sollten sie
> doch mal gewillt sein, Treiber, die spezieller Features der HW ausnutzen
> wollen, mit anzubieten. Die wollen ja nicht alle Furz lang ihre Treiber
> anpassen ...

Ausgehend von der Roadmap, wird Ubuntu 16.04 LTS mit dem kommenden 
August-Update auf Kernel v4.15 geupdated. v4.17 ist noch in weiter 
Ferne.
Kaufe ich also jetzt brandneue Hardware, müßte ich u.U. wie in Deinem 
ersten Posting beschrieben, den zugehörigen Treiber von einer anderen 
Quelle besorgen.
Daher meine Frage, warum die Treiberintegration unter Linux als so 
wichtig erachtet wird. Bei Motherboards, Grafikkarten u.ä. verstehe ich 
das noch, aber unter Linux ist selbst der Treiber für eher marginale 
Dinge wie TV-Karten (Digital Devices) im Kernel enthalten. Und der 
Aufwand eine CD mitzuliefern, so daß sich der Benutzer den Treiber 
selbst installiert hält sich in Grenzen.

von Markus (Gast)


Lesenswert?

DPA hat meine restlichen Fragen in der Zwischenzeit beantwortet.
Vielen Dank!

von Dr. Sommer (Gast)


Lesenswert?

Markus schrieb:
> Ausgehend von der Roadmap, wird Ubuntu 16.04 LTS mit dem kommenden
> August-Update auf Kernel v4.15 geupdated. v4.17 ist noch in weiter
> Ferne.

Meistens ist es kein Problem, unter Ubuntu einen aktuellen Kernel zu 
installieren. Ubuntu ist da nur recht konservativ. Ich hab das schon 
öfter gemacht um aktuelle Treiber zu bekommen...

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Markus schrieb:

> Warum ist es so wichtig, daß der Kernel alle möglichen Treiber
> beinhaltet? Unter Windows kaufe ich z.B. einen Drucker und installiere
> den notwendigen Treiber halt von CD oder Internet nach, wieso muß der
> unbedingt im Kernel enthalten sein?

Weil an den Kernel-Interfaces recht oft rumgefingert wird. Es kann 
passieren daß die kompillierten Treiber für 4.17 nicht mehr mit 4.19 
laufen. Deswegen werden sie mitgepflegt.

von Noob (Gast)


Lesenswert?

@Dr. Sommer,


Dr. Sommer schrieb:
> Du beantwortest deine Frage selbst. Diese Installation ist umständlich;
> nur unter Windows muss man nach derart veralteten Methoden vorgehen.
> Unter Linux schließt man das Gerät an und es funktioniert sofort.
> Außerdem ändert sich der Linux-Kernel sehr schnell, was "externe"
> Treiber schnell inkompatibel zu neuen Kernel-Versionen macht; alles was
> im Kernel enthalten ist wird mit aktualisiert. Das ermöglicht eine
> schnelle Innovation und Verbesserung des Kernels, während z.B. unter
> Windows alles abwärtskompatibel zu uralten Treibern sein muss.

Dr. Sommer schrieb:
> Markus schrieb:
>> Ausgehend von der Roadmap, wird Ubuntu 16.04 LTS mit dem kommenden
>> August-Update auf Kernel v4.15 geupdated. v4.17 ist noch in weiter
>> Ferne.
>
> Meistens ist es kein Problem, unter Ubuntu einen aktuellen Kernel zu
> installieren. Ubuntu ist da nur recht konservativ. Ich hab das schon
> öfter gemacht um aktuelle Treiber zu bekommen...

Was nu?

Funktioniert es oder muss der Ganze Kernel getauscht werden?

von Dr. Sommer (Gast)


Lesenswert?

Noob schrieb:
> Funktioniert es oder muss der Ganze Kernel getauscht werden?

Beides. Das Tauschen des Kernels dauert ca. 3 Minuten. Unter Linux Mint 
sind das ca 8 Klicks:
-> Update Symbol
-> View
-> Linux Kernels
-> Warnmeldung abnicken
-> Links Major-Version auswählen
-> Rechts Minor Version auswählen
-> "Install" anklicken
-> root-Passwort eingeben
-> Automatischen Download & Installation abwarten, fertig.
Wenn man geizig ist kann man nach dem nächsten Reboot auf die gleiche 
Art und Weise noch den alten Kernel löschen. Wie das ganze bei normalem 
Ubuntu geht weiß ich nicht. Im Zweifelsfall geht es durch Eingabe von
1
sudo apt-get install linux-image-4.15.0-22-generic linux-modules-4.15.0-22-generic linux-headers-4.15.0-22-generic
Version entsprechend anpassen. Das sind dann noch weniger Tastendrücke 
aus Mausklicks bei der GUI-Version.

von Martin H. (horo)


Lesenswert?

Dr. Sommer schrieb:
> Wie das ganze bei normalem
> Ubuntu geht weiß ich nicht. Im Zweifelsfall geht es durch Eingabe
> von
> sudo apt-get install linux-image-4.15.0-22-generic
> linux-modules-4.15.0-22-generic linux-headers-4.15.0-22-generic
> Version entsprechend anpassen. Das sind dann noch weniger Tastendrücke
> aus Mausklicks bei der GUI-Version.

Debian regelt das über die zusätzlichen Meta-Pakete linux-image-amd64 
und linux-headers-amd64, die ihrerseits jeweils von der aktuellen 
Kernel-Version abhängen und diese somit automatisch installieren beim
1
apt update; apt upgrade

von Dr. Sommer (Gast)


Lesenswert?

Martin H. schrieb:
> Debian regelt das über die zusätzlichen Meta-Pakete linux-image-amd64
> und linux-headers-amd64, die ihrerseits jeweils von der aktuellen
> Kernel-Version abhängen

Ubuntu auch, aber das Ziel war ja gerade, nicht die Standard-Version für 
die jeweilige Ubuntu/Debian-Version zu erhalten, sondern die aktuellste, 
die zwar als Paket vorhanden ist aber noch nicht von Ubuntu als "stabil" 
freigegeben ist und nicht automatisch installiert wird.

von Bernd K. (prof7bit)


Lesenswert?

Jens G. schrieb:
> Was ist denn daran so innovativ, daß die Schnittstellen oder
> Treibermodelle ständig neu gewürfelt werden (sollen),

Nichts wird gewürfelt, wer hat Dir das erzählt?

Hin und wieder ergibt sich vielleicht mal aus einer technischen 
Notwendigkeit heraus daß an der einen oder anderen API eine Kleinigkeit 
oder auch was größeres geändert werden muß. Meist wird alles oder fast 
alles bisherige auch weiterhin mit den neuen Headern immer noch 
kompilieren und funktionieren ohne daß man irgendwas ändern muss (also 
Pflegeaufwand == 0), oder meinst Du ernsthaft irgendjemand hat Zeit sich 
absichtlich unnötige Arbeit zu machen? Und glaubst Du die anderen machen 
das mit? Das wird ausdiskutiert, solange bis ein tragfähiger Plan 
existiert wie das API am sinnvollsten zu ändern ist, da wird nichts dem 
Zufall überlassen, da sind Profis am Werk, die besten der besten!

: Bearbeitet durch User
von Sven B. (scummos)


Lesenswert?

Bernd K. schrieb:
> Jens G. schrieb:
>> Was ist denn daran so innovativ, daß die Schnittstellen oder
>> Treibermodelle ständig neu gewürfelt werden (sollen),
>
> Nichts wird gewürfelt, wer hat Dir das erzählt?
>
> Hin und wieder ergibt sich vielleicht mal aus einer technischen
> Notwendigkeit heraus daß an der einen oder anderen API eine Kleinigkeit
> oder auch was größeres geändert werden muß. Meist wird alles oder fast
> alles bisherige auch weiterhin mit den neuen Headern immer noch
> kompilieren und funktionieren ohne daß man irgendwas ändern muss (also
> Pflegeaufwand == 0)

Ich weiß ja nicht, hast du das schonmal versucht? Quasi kein 
nichttrivialer Treiber kompiliert nach 2 Jahren noch, und mit 
Binärkompatibilität ist direkt bei jedem Patch-Release vorbei. Das ist 
schon der Grund, warum bei Linux die Treiber alle im Kernel rumliegen; 
extern ist das nicht wirklich machbar.

von Jens G. (jensig)


Lesenswert?

@ Bernd K. (prof7bit)

>Jens G. schrieb:
>> Was ist denn daran so innovativ, daß die Schnittstellen oder
>> Treibermodelle ständig neu gewürfelt werden (sollen),

>Nichts wird gewürfelt, wer hat Dir das erzählt?
>...

Nun, daß ich das Wörtchen "würfeln" vielleicht nicht ganz so ernst 
meinte, wird Dir ja hoffentlich klar sein. Aber wenn Dr. Sommer 
schreibt:

>Außerdem ändert sich der Linux-Kernel sehr schnell, was "externe"
>Treiber schnell inkompatibel zu neuen Kernel-Versionen macht; alles was
>im Kernel enthalten ist wird mit aktualisiert. Das ermöglicht eine
>schnelle Innovation und Verbesserung des Kernels, während z.B. unter
>Windows alles abwärtskompatibel zu uralten Treibern sein muss.

dann ist Windows doch aus Anwendersicht klar im Vorteil , da es mit 
alten Treibern noch klarkommt, während bei Linux irgendwelche Hardwäre 
plötzlich nicht mehr will nach einem Update, wenn man "externe" Treiber 
installieren musste. Da würden sich normale Anwender bedanken, wenn 
denen erstmal gesagt wird, man könne sich doch ganz einfach die Quellen 
holen, und neu kompilieren. So betrachtet ist das nette Feature, daß 
Linux möglichst alle Treiber mitbringt, nicht nur ein nettes Feature, 
sondern auch eine Notwendigkeit.

von Sven B. (scummos)


Lesenswert?

Jens G. schrieb:
> dann ist Windows doch aus Anwendersicht klar im Vorteil , da es mit
> alten Treibern noch klarkommt, während bei Linux irgendwelche Hardwäre
> plötzlich nicht mehr will nach einem Update, wenn man "externe" Treiber
> installieren musste.

Dem Anwender ist das alles völlig egal, Hauptsache sein komisches Gerät 
tut. Für die typischen Geräte ist das heutzutage eigentlich bei beiden 
Systemen ganz gut der Fall.

> So betrachtet ist das nette Feature, daß
> Linux möglichst alle Treiber mitbringt, nicht nur ein nettes Feature,
> sondern auch eine Notwendigkeit.

Ist auch so, ja.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.