Was ist ein Kernel-Update mit "Bump ABI"?

19

Wie Sie im Changelog für den Linux-Kernel sehen können , gibt es Aktualisierungsnachrichten wie "Bump ABI - Maverick ABI 28".

Laut Ubuntu-Wiki ist ABI so etwas wie eine Brücke zwischen dem Kernel-Space und den anderen Modulen (meine Interpretation).

Fügt ein solches Update zusätzliche Funktionen und / oder Bugfixes hinzu? Sollte ich meinen Kernel auf die nächste Version aktualisieren?

Lekensteyn
quelle

Antworten:

12

NB: Ich bin kein Kernel-Experte. Das basiert auf gesammelten Kenntnissen und Erfahrungen.

Ein ABI-"Stoß" sollte keine neuen Funktionen bringen, auch wenn es Fehler in einigen Modulen / Anwendungen "beheben" kann, die nach einer höheren Version des ABI suchen. Sie sollten diese Updates dennoch installieren, da im Allgemeinen durch die Synchronisierung aller Komponenten Stabilität und Sicherheit gewährleistet werden.

RolandiXor
quelle
12

Zunächst einmal suchen Sie nicht im Changelog nach dem Linux-Kernel. Sie sehen das Metapaket, ein Paket, das vom neuesten Kernel abhängt. Sie möchten wahrscheinlich etwas wie: http://changelogs.ubuntu.com/changelogs/pool/main/l/linux-image-2.6.35-28-generic/linux-image-2.6.35-28-generic_2.6.35- 28,50 / Änderungsprotokoll

Der Zweck dieses Metapakets besteht darin, den Benutzer durch diese ABI-Unebenheiten zu führen.

Ich sehe ABI und Kernel genauso wie Sie. In der Praxis bedeutet ein ABI-Bump, dass alle Module gegen den aktualisierten Kernel neu erstellt werden müssen.

Mein Verständnis stimmt auch mit Roland darin überein, dass eine ABI-Beule keine neuen Funktionen, sondern nur kritische Korrekturen und Sicherheitsupdates bedeutet.

user1974
quelle
2
Vielen Dank für den Hinweis, dass es sich nur um ein Metapaket handelt. Ich habe das vergessen. aptitude changelog linux-image-2.6.35-28-genericZeigt eine Liste der Änderungen an. Ich bin nicht sicher, warum das Metapaket nicht die Updates der linux-{image,headers}-*-genericPakete enthält; vielleicht gibt es da auch linux-{image,headers}-*-serverpakete?
Lekensteyn
4

Die ABI ist die Application Binary Interface (nicht zu verwechseln mit der API, der Application Programming Interface). Der ABI definiert die Größen, die Zeichen und die Reihenfolge der Zahlen, die die Anwendung verwendet.

Um es klar zu machen, hier ein Beispiel: Ich möchte das Alter eines Gebäudes, ausgedrückt in Jahren, codieren. Dazu kann ich ein C verwenden unsigned char, einen Typ mit einer Größe von 1 Byte, der Werte von 0 bis 255 codieren kann. Nehmen wir nun an, ich stelle fest, dass 255 eine zu niedrige Grenze ist, weil es Gebäude gibt, die mehr gebaut wurden als vor 255 Jahren. Ich kann dann ein C verwenden unsigned int, das 4 Byte lang ist und Werte von 0 bis 65535 codieren kann.

Wenn ich den Typ von charauf intändere, habe ich die semantische Bedeutung des Feldes nicht geändert (es war ein in Jahren ausgedrücktes Alter und es ist es immer noch), aber ich habe seine Größe geändert. Jede Software, die mit meiner Anwendung interagiert, muss nicht geändert werden, spricht jedoch eine andere "Sprache".

Wenn ein Kernel sein ABI ändert, bedeutet dies, dass er die Sprache geändert hat, die er spricht, aber keine Funktionen hinzugefügt, entfernt oder geändert wurden. Alle Module von Drittanbietern, die mit dem Kernel interagieren müssen, müssen neu kompiliert werden, um diese neue Sprache zu sprechen. Sie müssen jedoch in keiner Weise geändert werden, damit sie ordnungsgemäß funktionieren.

Andrea Corbellini
quelle