On Wed, 11 Sep 2002, Alexei Khlebnikov wrote: > > > >Ну разве ему не поыиг, что у версии ядра приписка bf2.4 > > > > НЕ-E-ЕТ! не пофиг. Более того, не пофиг даже тоже самое ядро, > > пересобранное с другими опциями. Любая пересборка ядра - обязательно > > пересборка _всех_ нужных модулей, в том числе и "левых". > > Отчего такая категоричность? Хотелось бы услышать толковое обоснование.
Потому что linux kernel - sourceware, причем принципиально. То есть, разработчиков не беспокоит изменение в двоичных деталях внутриядерного интерфейса, структур данных, некоторых констант при изменениях опций сборки ядра. Очень многие функции ядра, вызываемые из модулей - inline'ы и макро, многие работающие со структурами данных, находящихся вне модуля, но при этом они порождают код модуля при компиляции модуля, а не ядра. Поэтому, если модуль собирется вне ядра и исапользует заголовки _нет_того_ экземпляра ядра с другими опциями сборки, получается двоичная несовместимость. Последствия несовместимости практически непредсказуемы. Для предотвращения такой несовместимости есть механизм "украшения" экспортируемых символов ядра и модулей. Его отключение или обход - преступление. > И в чем особеннось модулей от Nvidia? Они спроектированы и поставляются в "полу-двоичной" форме, то есть, основная часть драйвера поставляется в двоичном виде, другая - в исходном. Эта часть с исходником компилируется под конкретное ядро пользователя и предоставляет двоично-неизменный интерфейс двоичной части драйвера. Разумеется, все ядерные inline'ы и макро при этом оборачиваются не-inline'овыми функциями. Но кого в наше время беспокоит производительность? -- Eсли уж гайка есть, она должна быть затянута до конца или выкручена нафиг.