it-swarm.com.de

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

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

Laut buntu Wiki ist ABI so etwas wie eine Brücke zwischen dem Kernelraum 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?

19
Lekensteyn

NB: Ich bin kein Kernel-Experte - dies basiert also 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.

12
RolandiXor

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/changelog

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.

12
user1974

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 einen C unsigned char verwenden, einen Typ mit einer Größe von 1 Byte, der Werte von 0 bis 255 codieren kann. Angenommen, ich stelle fest, dass 255 eine zu niedrige Grenze ist, weil es solche gibt Gebäude, die vor mehr als 255 Jahren gebaut wurden. Ich kann dann einen C unsigned int verwenden, der 4 Byte lang ist und Werte von 0 bis 65535 codieren kann.

Wenn ich den Typ von char in 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.

4