Что такое обновление ядра с помощью «Bump ABI»?

19

Как вы можете видеть в журнале изменений для ядра Linux , есть сообщения об обновлении, такие как «Bump ABI - Maverick ABI 28».

Согласно Ubuntu Wiki , ABI является чем-то вроде моста между пространством ядра и другими модулями (моя интерпретация).

Такое обновление добавляет дополнительные функции и / или исправления? Должен ли я обновить свое ядро ​​до следующей версии?

Lekensteyn
источник

Ответы:

12

NB: я не эксперт по ядру - так что это основано на собранных знаниях и опыте.

«Удар» ABI не должен приносить новые функции, даже если он может «исправлять» ошибки в некоторых модулях / приложениях, которые ищут более высокую версию ABI. Вам все равно следует установить эти обновления, поскольку в целом синхронизация всех компонентов обеспечивает стабильность и безопасность.

RolandiXor
источник
12

Во-первых, вы не смотрите журнал изменений для ядра Linux. Вы смотрите на метапакет, который зависит от новейшего ядра. Вы, вероятно, хотите что-то вроде: 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 / изменений

Целью этого метапакета является переход пользователя через эти неровности ABI.

Я придерживаюсь той же точки зрения, что и вы, относительно ABI и ядра. Практически говоря, удар ABI означает, что все модули должны быть перестроены под обновленное ядро.

Мое понимание также согласуется с Роландом в том смысле, что удар по ABI означает не новые функции, а критические исправления и обновления безопасности.

user1974
источник
2
Спасибо за указание, что это просто метапакет. Я забыл об этом. aptitude changelog linux-image-2.6.35-28-genericотображает список изменений. Я не уверен, почему метапакет не содержит обновлений linux-{image,headers}-*-genericпакетов; может потому что есть еще и linux-{image,headers}-*-serverпакеты?
Лекенштейн
4

ABI - это двоичный интерфейс приложения (его не следует путать с API, интерфейсом прикладного программирования). ABI определяет размеры, знаки и порядки номеров, которые использует приложение.

Чтобы быть ясным, вот пример: я хочу закодировать возраст здания, выраженный в годах. Для этого я могу использовать C unsigned char, который является типом, размер которого составляет 1 байт, и который может кодировать значения от 0 до 255. Теперь предположим, что я обнаружил, что 255 - это слишком низкий предел, потому что есть здания, которые были построены более чем 255 лет назад. Затем я могу использовать C unsigned int, который имеет длину 4 байта и может кодировать значения от 0 до 65535.

Изменив тип с charна int, я не изменил смысловой смысл поля (это был возраст, выраженный в годах, и он до сих пор есть), однако я изменил его размер. Каждое программное обеспечение, взаимодействующее с моим приложением, менять не нужно, однако оно будет говорить на другом «языке».

Поэтому, когда ядро ​​меняет свой ABI, это означает, что оно изменило язык, на котором оно говорит, но никакие функциональные возможности не были добавлены, удалены или изменены. Все сторонние модули, которые должны взаимодействовать с ядром, должны быть перекомпилированы, чтобы говорить на этом новом языке, но их не нужно менять каким-либо образом для правильной работы.

Андреа Корбеллини
источник