[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Драйверы



On Wed, 11 Sep 2002, Alexei Khlebnikov wrote:

> > > >Ну разве ему не поыиг, что у версии ядра приписка bf2.4
> >
> > НЕ-E-ЕТ! не пофиг. Более того, не пофиг даже тоже самое ядро,
> > пересобранное с другими опциями. Любая пересборка ядра - обязательно
> > пересборка _всех_ нужных модулей, в том числе и "левых".
> 
> Отчего такая категоричность? Хотелось бы услышать толковое обоснование.

Потому что linux kernel - sourceware, причем принципиально.
То есть, разработчиков не беспокоит изменение в двоичных деталях
внутриядерного интерфейса, структур данных, некоторых констант при
изменениях опций сборки ядра. Очень многие функции ядра, вызываемые
из модулей - inline'ы и макро, многие работающие со структурами
данных, находящихся вне модуля, но при этом они порождают код
модуля при компиляции модуля, а не ядра. Поэтому, если модуль
собирется вне ядра и исапользует заголовки _нет_того_ экземпляра
ядра с другими опциями сборки, получается двоичная несовместимость.
Последствия несовместимости практически непредсказуемы.

Для предотвращения такой несовместимости есть механизм "украшения"
экспортируемых символов ядра и модулей. Его отключение или обход -
преступление.


> И в чем особеннось модулей от Nvidia?

Они спроектированы и поставляются в "полу-двоичной" форме, то есть,
основная часть драйвера поставляется в двоичном виде, другая - в
исходном. Эта часть с исходником компилируется под конкретное ядро
пользователя и предоставляет двоично-неизменный интерфейс двоичной
части драйвера. Разумеется, все ядерные inline'ы и макро при этом
оборачиваются не-inline'овыми функциями. Но кого в наше время
беспокоит производительность?

-- 
Eсли уж гайка есть, она должна быть затянута до конца
или выкручена нафиг.



Reply to: