Co to jest aktualizacja jądra z „Bump ABI”?

19

Jak widać w dzienniku zmian jądra systemu Linux , pojawiają się komunikaty o aktualizacji, takie jak „Bump ABI - Maverick ABI 28”.

Według Wiki Ubuntu ABI jest czymś w rodzaju pomostu między przestrzenią jądra a innymi modułami (moja interpretacja).

Czy taka aktualizacja dodaje dodatkowe funkcje i / lub poprawki błędów? Czy powinienem zaktualizować swoje jądro do następnej wersji?

Lekensteyn
źródło

Odpowiedzi:

12

NB: Nie jestem ekspertem od jądra - opiera się to na zebranej wiedzy i doświadczeniu.

„Wstrząs” ABI nie powinien przynosić nowych funkcji, nawet jeśli może „naprawić” błędy w niektórych modułach / aplikacjach, które szukają wyższej wersji ABI. Należy nadal instalować te aktualizacje, ponieważ ogólnie synchronizacja wszystkich składników zapewni stabilność i bezpieczeństwo.

RolandiXor
źródło
12

Po pierwsze, nie patrzysz na dziennik zmian dla jądra systemu Linux. Patrzysz na pakiet meta, który jest pakietem zależnym od najnowszego jądra. Prawdopodobnie chcesz czegoś takiego: 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 / dziennik zmian

Celem tego meta-pakietu jest przeniesienie użytkownika przez te nierówności ABI.

Mam taki sam widok jak ty na ABI i jądrze. Praktycznie mówiąc, guz ABI oznacza, że ​​wszystkie moduły muszą zostać przebudowane w stosunku do zaktualizowanego jądra.

Moje rozumowanie jest również zgodne z Rolandem, ponieważ guz ABI nie oznacza nowych funkcji, tylko poprawki krytyczne i aktualizacje zabezpieczeń.

użytkownik1974
źródło
2
Dziękujemy za zwrócenie uwagi, że to tylko meta-pakiet. Zapomniałem o tym. aptitude changelog linux-image-2.6.35-28-genericwyświetla listę zmian. Nie jestem pewien, dlaczego meta-pakiet nie zawiera aktualizacji linux-{image,headers}-*-genericpakietów; może dlatego, że są też linux-{image,headers}-*-serverpakiety?
Lekensteyn
4

ABI to Application Binary Interface (nie mylić z API, czyli interfejsem programowania aplikacji). ABI definiuje rozmiary, znaki i kolejność liczb, z których korzysta aplikacja.

Dla jasności, oto przykład: chcę zakodować wiek budynku, wyrażony w latach. Aby to zrobić, mogę użyć C unsigned char, który jest typem o rozmiarze 1 bajt, który może kodować wartości od 0 do 255. Załóżmy teraz, że odkrywam, że 255 to zbyt niski limit, ponieważ istnieją budynki, które zostały zbudowane więcej niż 255 lat temu. Następnie mogę użyć C unsigned int, który ma 4 bajty i może kodować wartości od 0 do 65535.

Zmieniając typ z charna int, nie zmieniłem semantycznego znaczenia pola (był to wiek wyrażony w latach i nadal nim jest), ale zmieniłem jego rozmiar. Każde oprogramowanie, które współdziała z moją aplikacją, nie musi być zmieniane, jednak będzie mówić innym „językiem”.

Dlatego, gdy jądro zmienia swój ABI, oznacza to, że zmieniło język, którym mówi, ale nie dodano, nie usunięto ani nie zmodyfikowano żadnych funkcji. Wszystkie moduły innych firm, które muszą wchodzić w interakcje z jądrem, muszą zostać ponownie skompilowane, aby można było mówić w tym nowym języku, ale nie trzeba ich zmieniać w żaden sposób, aby działały poprawnie.

Andrea Corbellini
źródło